晨露博客

关注互联网,关注科技,关注生活!

上一篇: 这几天备考中... 下一篇:互联网与极端主义

LinuxLinux遵循GPL协议( 公共软件许可证) , 任何人可以得到并且修改它的源代码, 所以它的安全性比其它的非开源系统要高。按照TCSEC评估标准, 目前Linux的安全级基本达到了C2, 与SCO UNIX和WindowsNT安全级别相同。由于其开放的源代码( OSDL) 和安全性, 它非常适合于用作软路由或网关,并能自行配置防火墙。


防火墙的概念
1、防火墙的一般原理
防火墙是用来在安全私有网络( 可信任网络) 和外部不可信任网络之间安全连接的一个设备和一级设备,作为私有网络之间连接的单点存在。它可以实施比较广泛的安全策略来控制信息流, 防止不可预的潜在的入侵破坏, 防御来自内部网络和外部网络的攻击, 使服务器群处在DMZ区。
2、防御级防火墙的功能
从逻辑上说, 防火墙是一个分离器, 是一个限制器, 是一个分析器, 防御级防火墙旨在阻止网络攻击,其主要是防止非法用户进入内部网络, 禁止存在安全脆弱性的服务进出网络, 过滤存在安全缺陷的网络服务来降低内部网遭受攻击的威胁, 阻塞finger以及DNS服务, 从而使得外部主机无法获取这些有利于攻击的信息, 从而达到能抵御来自各种路线的攻击。

防火墙防御功能的设计与实现
1、总体设计
制定安全策略和包过滤规则是设计防火墙防御功能的基本步骤。安全策略有两种: 没有被列为允许的服务都是禁止的策略和没有被列为禁止的服务都是允许的策略。前者拒绝一切未经许可的服务, 防火墙封锁所有信息流, 然后逐项使能每一种许可的服务。而后者允许一切没被禁止的服务, 防火墙转发所有的信息, 然后逐项删除所有被禁止的服务。这两条规则的差别在于,依据“ 未明确表示为允许的便被禁止”的原则制定的过滤规则提供了更强的安全性, 但由于在制定过滤规则时有可能没有考虑到所有情况, 导致有的网络访问被阻塞。包过滤规则由防火墙逐一审查每一个数据包是否与其分组过滤规则相匹配, 由规则确定包的取舍。分组过滤规则处理IP包头信息为基础, 其中以IP源地址、 IP目的地址、封装协议( UDP/TCP) 、端口号等来制定检查规则。在确定规则时一般把最常用的规则放在最前面, 而且大多时候Web服务是最主要的, 从而它的流量也是最大的, 所以应该对它的响应进行调整, 尽量把它往前移动。
2、几种防火墙技术防御功能的实现
(1) 端口扫描
网络攻击者根据广义扫描器 ( 反馈结果简单, 但是速度很快的扫描器) 的反馈结果, 选择整体安全性不高的网络作为攻击目标。攻击者选定目标后, 通过扫描和tcp的三次握手可以确定该服务器开设了什么端口, 再从端口判断出这台服务器开设的具体服务, 然后按照不同的服务进行漏洞攻击或入侵。因此, 不要让服务器暴露在网络中, 对端口进行过滤, 只允许指定的服务通过指定的端口穿越防火墙。例如对只开设了web服务使用标准的80端口的服务器, 我们可在防火墙中进行如下设置:


iptables p INPUT j DROP #来拦截主机上所有通讯
iptables A INPUT p tcp dport 80 j ACCEPT #打开80端口的 tcp协议


假如我们在将来还要添加适当端口, 可以用上句的格式逐一添加, 这样我们就实现了对网络服务器主机的端口过滤功能, 这种方法也只是降低受到攻击的威胁, 若要防御多种网络攻击, 还要分别制定防火墙策略。
(2)IP地址欺骗( IP Spoofing)
IP地址欺骗是一种比较复杂的攻击方式, 为阻止这类攻击, 选择放弃以地址为基础的验证。通过不允许使用r类远程命令调用,清空/etc/hosts.equiv文件并删除.rhosts文件来对IP地址欺骗进行防范。而在过滤模块中通过检查报文的源地址和接受到此报文的网卡的地址, 来阻断那些来自外网而源地址为内网地址的IP地址欺骗攻击。
(3)IP源路由欺骗( Source Route Spoofing)
在IP报文中, 定义了一种源路由选项, 通过此选项用户可容易地指定该报文在网络上的路由。此选项常常被用来进行地址欺骗型和服务拒绝型的攻击, Smurf攻击就是这样的一种服务拒绝型攻击。它通过以欲攻击的主机的地址为源地址向某网段广播大量的ping请求报文, 从而使被攻击主机淹没在ping回应报文中。 当发起攻击的主机与被攻击主机不在同一网段时, Smurf就
是通过源路由选项进行攻击。在过滤模块的规则设置时, 禁止所有含源路由选项的报文通过。
(4)洪水攻击( SYN Flood)
SYN Flood是目前最流行的拒绝服务攻击与分布式拒绝服务攻击的方式之一, 这是一种利用TCP协议缺陷, 发送大量伪造的TCP连接请求, 从而使得被攻击方资源耗尽的攻击方式。这种攻击的方式的问题就出在TCP连接的三次握手中, 假设一个用户向服务器发送了SYN报文后突然死机或掉线, 那么服务器在发出SYN+ACK应答报文后是无法收到客户端口的ACK报文的( 第三次握手无法完成) , 这种情况下服务器一般会重试 ( 再次发送SYN+ACK给客户端) 并等待一段时间丢弃这个未完成的连接, 这段时间的长度我们称为( SYN Timeout) ,一般来说这个时间是分钟为单位 ( 半分钟- 2分钟) ;一个用户出现异常导致服务器的一个线程等待1分钟并不是什么很大的问题, 但如果一个恶意的攻击者大量模拟这种情况, 服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源—— —数以万计的半连接, 即使是简单的保存并遍历也会消耗很多的CPU资源与时间, 何况还要不断对这个列表中的IP进行SYN+ACK的重试。实际上如果服务器的TCP/IP栈不够强大, 最后的结果往往是堆栈溢出崩溃—— —即使服务器端的系统足够强大, 服务器也将忙于处理攻击者伪造的TCP连接请求而无暇理睬合法请求( 客户端的正常请求相较于非法请求来说非常小) , 此时从正常连接的角度来说, 服务器失去了响应, 这种情况我们称为服务器受到了洪水攻击。从防御角度来说, 可以缩短SYN- Timeout时间, 由于SYN FLOOD攻击效果取决于服务器上保持的SYN半连接数, 这个值等于SYN攻击的频度 SYN- Timeout,所以通过缩短从接受到SYN报文到确定这个报文校验并丢弃连接的时间, 可以降低服务器的负荷。我们可以在用IPTABLES执行如下语句:


iptables A FORWARD p tcp syn m limit
limit 1/ s j ACCEPT


(5)ICMP重定向欺骗 ICMP重定向报文被用来动态调整主机或路由器的路由表。当网络节点A接到从节点B传来的信宿为C的IP报文, 经过路由算法选择节点D为下一节点。而其路由表显示节点B与节点D之间存在直接的通路, 那么A将向B发出ICMP重定向报文,这样以后B发往C的报文就直接传到节点D。ICMP重定向报文在网络拓扑结构经常变化的环境中是比较重要的, 但由于它没有任何手段保护信息的正确性, 使得破坏者可以在网上随意发布其ICMP重定向报文, 从而导致网络传输的混乱。因为防火墙系统安装在网络的唯一出口处, 其网络结构相对比较稳定, 所以过滤模块丢弃所有接收到的ICMP重定向报文。为了解决这个问题, 我们可以在防火墙中加入以下内容:
iptable - A INPUT - p icmp - type echo - request - i
eth1- j DROP    这句话的意思是, 从接口eth1进入的icmp协议的请求全部丢弃。
(6)IP劫持攻击
IP劫持是一种主动攻击方式。所谓IP劫持是指, 当用户连接远程机器的时候, 攻击者接管用户的连线如同经过攻击者中转一样, 攻击者能任意对连线交换的数据进行修改, 冒充合法用户给服务器发送非法命令, 或冒充服务器给用户返回虚假信息。根据TCP运行机制可知, 客户方和服务方在连接建立且没有数据交换的情况下存在两种连接状态即“同步状态”和 “ 非同步状态”。当连接处于非同步状态时, 如果有数据传递, 可能出现两种情况:

报文序列号处于合法范围内, 则该报文将被缓存, 供以后使用; 该报文序列号处于不合理范围内, 该报文被抛弃, 并向数据发送方发送一个反馈包, 以通知合法的序列号。攻击者正是利用连接的非同步状态来进行IP劫持的, 在攻击时, 攻击者诱使连接进入非同步状态,并使得数据在交换时, 出现上述第②种情况。此时, 连接的双方无法再进行正常的数据交换, 而攻击者可以用网络监视器( 如SUN下的Sniffit, PC上的NetXray等)来侦听截获该客户方发送的报文, 攻击者冒充合法客户方发送可以被服务方接收的报文, 服务方接收到这个伪造的报文后, 将完成该包中携带数据所代表的命
令。这就构成了IP劫持攻击。由于要进行IP劫持攻击就必须造成连接的非同步状态, 所以防火墙在服务器的TCP实现中加以防御。 在TCP实现中, 当连接收到RST报文时, 向连接对方发送一个RST报文, 然后再重置该连接, 使得攻击者无法建立连接非同步状态, 从而抵御用连接重置法进行的攻击。其实现部分代码如下:


static void send_tcpreset ( struct sk_buff skb,int
local)
{
struct sk_ buff * nskb;
struct tcphdr * otcph, tcph:
struct rtable * rt;
unsigned int otcplen;
u_int16_t tmp_port;
u_int32_t tmp_addr;
int needs_ack;
tcph= ( struct tcphdr * ) ( ( u_int32_t* ) nskb - >
nh.iph+nskb- >nh.iph- >ihl) ;
//源目的地址交换
tmp- addr=nskb- >nh.iph- >saddr;
nskb- >nh.iph- >saddr=nskb- >nh.iph- >daddr;
nskb- >nh.iph- >daddr "tmp_addr;
tmp_port=tcph- >source;
tcph- >source = tcph- >dest;
tcph- >dest=tmp_port;
//圆整无数据包长
tcph- >doff=sizeof ( struct tcphdr) /4:
skb_ trim ( nskb, nskb- ? nh.iph- >ihl 4+sizeof
( struct tcphdr) ) :
nskb- >nh.iph- >tot_len=htons ( nskb- >len) ;
//置Reset标志
( ( u_int8_t*) tcph) [ 137] =0; //control field flags
置0
tcph- >rst = 1:
tcph- >ack = needs_ack;
tcph- >window=0;
tcph- >urg_ptr=0;
NF_HOOK( PF- INET, NF_IP_ LOCAL_ OUT,
nskb, NULL, nskb- >dst- >dev,
ip_finish output) ; //将该函数HOOK到NF_IP_
LOCAL OUT

Linux系统下实现防火墙防御功能具有配置方便、运行速度快、 系统功能强大等优点, 能按照系统设定的安全策略对防火墙进行过滤, 但是也还存在一些缺点, 需进一步设置和优化, 需要采用混合防火墙来保证内部网络安全。随着防火墙的技术渐渐成熟, 多数的防火墙已不会单独使用其中的一种技术、 多半会加一改良或混合应用, 使其能适应各种不同的情况。不要认为有了防火墙就可以万事大吉, 其实不然, 防火墙只是提高了安全指数, 只要存在网络通讯就一定有安全隐患, 我们要有这种意识。基于netfilter中的iptables, 可在过滤管理模块中实现防火墙的防御功能, 利用Linux下的开发工具, 对Linux内核进行二次开发, 可开发基于Linux内核级的防火墙, 使Linux下的防火墙具有更完善的功能。目前流行的基于核检测的防火墙的开发原理与其具有类似性。未来防火墙的发展趋于协同互动的分布式防火墙, 但其核心理论与本文的研究大同小异。

小博文章如没有特殊说明均为原创,如要帮忙推广还望加上我的链接哦!
  • 本文Url: http://www.chenlublog.com/post/defense-function-and-firewall-design-under-linux.html (出自: 晨露博客)
  • 点击这里获取该日志的TrackBack引用地址

    发表评论:

    ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

    关于本文

    您正在阅读的是:Linux下防火墙防御功能的设计与实现
    morningdew 发表于:2010-11-2 20:10:37
    分类:IT技术
    关键词:system  操作系统  Security  Linux  

    博客作者

    Morningdew

    晨露博客

    热门文章

    最近更新

    最新评论及回复

    最近留言

    站类搜索

    博文分类

    博文归档

    Copyright ©2010 晨露博客. All Rights Reserved.网站地图  Theme Designed By TangChang
    本博客采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载本站内容必须也遵循“署名-非商业用途-保持一致”的创作共用协议.
    This site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License.
    CONTACT ME:E-mail:tcmorningdew@gmail.com QQ:515667845<风荷雨莲>   津备ICP09004821   GO TO TOP

    Powered By Z-Blog 1.8 Walle Build 91204