浅谈iptables开源方案在提高网站安全方面的应用

  • 优秀论文奖
  • 文章作者:中国新闻技术工作者联合会 2021/12/30-04:43 阅读: loading...

    龚大丰

    (温州日报报业集团)

    [摘 要] 本文通过温州都市报官方网站的最新升级改造,建立以linux开源系统下iptables为平台的网络安全防御系统。该系统利用linux强大的开源特性,提供了一个高性能、高稳定性、高安全性、低成本网络安全解决方案。本文还总结了实现过程中遇到的困难,最后还对本系统做了展望,可灵活与其他入侵检测防御工具联动,能达到IDS效果。[关键词] iptables 网络安全 入侵检测

    1 现有状况分析

    1998年,温州都市报官方网站上线,是当年最早上互联网的地市级报纸,期间由于种种原因,网站由不同单位接替管理运营,存在诸多问题。从2008年开始本报社领导又高度重视网络建设,并于该年底重新创建网站投入试运营。由于访问量的不断增加,原先的网站架构已不适应新环境下的运行,在2011年7月开始全面改造升级网站架构,把主要的应用软件全部迁移到官方建议的linux系统下,包括报网互动的论坛、博客、数据库系统等。由于网站运营期间发生过多次的网络安全事故,故本次建设重点就落在整个系统的安全方面了。

    和众多单位一样,我们报社也是一个非常节俭的单位,本次改造升级的一条重要原则就是:在保证性能、响应速度等关键指标的基础上,确保资金尽可能少的投入。

    2 网络安全相关技术

    在网络中,所谓“防火墙”,是指一种将内部网和公众访问网分开的方法,它实际上是一种隔离技术。防火墙是在两个网络通讯时执行的一种访问控制尺度,最大限度地阻止网络中的黑客来访问你的网络。

    Linux iptabls实际上由两个组件netfilter 和 iptables 组成。netfilter 组件也称为内核空间(kernelspace:即内核态),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。iptables 组件是一种工具,也称为用户空间。它使插入、修改和除去信息包过滤表中的规则变得容易,这些规则存储在表的对象中,组成防火墙所遵循和组成的规则。其最大优点是可以配置有状态的防火墙,可以从信息包的连接跟踪状态获得该信息。在决定新的信息包过滤时,防火墙所使用的这些状态信息可以增加其效率和速度。这里有四种有效状态,名称分别为 ESTABLISHED 、 INVALID 、 NEW 和 RELATED。状态 ESTABLISHED 指出该信息包属于已建立的连接,该连接一直用于发送和接收信息包并且完全有效。INVALID 状态指出该信息包与任何已知的流或连接都不相关联,它可能包含错误的数据或头。状态 NEW 意味着该信息包已经或将启动新的连接,或者它与尚未用于发送和接收信息包的连接相关联。最后, RELATED 表示该信息包正在启动新连接,以及它与已建立的连接相关联。

    netfilter/iptables 的另一个重要优点是,用户可以完全控制防火墙配置和信息包过滤。您可以定制自己的规则来满足您的特定需求,从而只允许想要的网络流量进入系统。

    3 对现有安全问题的解决办法

    为了解决网站的网络安全问题,当时的技术组人员经过充分讨论,形成了三种初步的备选方案:

    方案一:采用主流的网络安全产品,如绿盟、Juniper等,其优点明显,应用广泛、经过市场检验的、可以值得使用的,但要达到我们需求的型号价格都不便宜,有的达到30万/台,需要修改整个网站架构。

    方案二:采用最新上市的安全产品,如WebRay应用防火墙、远江Web应用防火墙产品等,满足我们需求的价格接近5万/台,价格实惠,但对我们一个正式报社的网站,这些产品还缺乏市场的认可度,不敢贸然正式采用,其方式同样要修改网站架构。

    方案三:采用开源的iptables技术,该技术是免费开源的,在互联网上广泛使用的一个成熟稳定的防火墙技术,只要在每台应用服务器上部署即可,其实很多安全产品直接使用了精简版的linux+iptables系统,缺点就是对实施人员技术要求比较高,适合有专人维护的情况。

    在充分衡量各方面情况后,结合报社要求我们确保资金尽可能少投入的约束,我建议采用方案三实现本次网站升级的安全性要求。

    4 实现方案的设计及实现

    通过讨论,我们最后选定上述的技术方案三。

    图1 Linux iptables 链表模型图

    4.1 具体实现要求

    针对本网站的运营需求,我们总结出要达到的与系统安全性相关的目标,典型例子如下:

    1. 在物理上应用服务器和数据服务器相分离。

    2 数据库服务器只开放必须的端口,比如mysql服务器,只开放3306、SSH、FTP端口允许外部TCP方式访问。

    3. WEB服务器开放的端口有80、443、SSH、FTP。

    4. 其他数据服务器开放的端口有FTP、SSH。

    5. 由于每台服务器配置了双网卡,实现内外网访问分离。为了防止IP欺骗等非法访问,外网口只允许公网IP访问,禁止保留的内网IP直接访问。

    6. 禁止TCP连接状态为INVALID的连接访问。

    7. 防范DDOS攻击脚本 防止SYN攻击。

    8. 限制每个IP对WEB服务端口的并发连接数要求。

    9. 限制每个IP连接FTP的并发连接数要求。

    10. 限制每个IP连接SSH的并发连接数要求。

    11. 默认防火墙要拒绝所有访问,只接受策略允许的访问。

    4.2 方案实现

    在编写防火墙实现脚本之前,我们有必要理清iptables的实现模型,如图1所示。iptables 采用规则堆栈的方式来进行过滤,当一个封包进入网卡,会先检查 Prerouting,然后检查目的 IP 判断是否需要转送出去,接着就会跳到 INPUT 或 Forward 进行过滤,如果封包需转送处理则检查 Postrouting,如果是来自本机封包,则检查 OUTPUT 以及 Postrouting。过程中如果符合某条规则将会进行处理,处理动作除了 ACCEPT、REJECT、DROP、REDIRECT 和 MASQUERADE 以外,还多出 LOG、DNAT、SNAT、RETURN等,其中某些处理动作不会中断过滤程序,某些处理动作则会中断同一规则炼的过滤,并依照前述流程继续进行下一个规则炼的过滤,一直到堆栈中的规则检查完毕为止。

    在充分理解其原理之后,就可动手操作了。以CentOS5.6 64位+iptables 1.3.7为例。

    4.2.1 安装linux iptables

    一般地,当前主流的linux系统都内置了iptables。如果没有,可以下载编译安装,或在线升级。由于我们采用了CentOS5.6 64位系统,有广泛的技术社区支持,我们直接采用yum的方式安装,参考代码如下:

    yum -y install iptables

    而对源代码重新编译安装方式,还需要手动配置系统内核,涉及过程比较复杂,这里就不展开讨论了。

    4.2.2 iptalbes实现

    系统具备了相应的iptables版本以后,就可动手写脚本实现控制了。Iptables语法:

    iptables [-t table] command [chain] [rules] [-j target]

    这里的Table指表名,如raw表、managle表、nat表、filter表。

    Command,对链的操作命令,如-A表示追加规则。

    Chain,链名,如input链、output链、prerouting链等。

    Rules,规则。

    Target,动作如何进行。

    还有一个命令语法:iptables [-t tables] [-L] [-vn] [-FXZ]

    以上详细参数请参考iptables手册。

    下面针对4.1章节中提出的要求,选择部分条目的实现代码来讲解,希望对即将要使用该技术的同行能起到抛砖引玉的作用。以下例子涉及到的eth0接公网,eth1接内网。

    针对2.数据库服务器只开放必须的端口,比如mysql服务器,只开放3306、SSH、FTP端口允许外部TCP方式访问,添加规则实现脚本如下:iptables -A INPUT -p tcp -m multiport --dport 21,22,3306 -j ACCEPT-A INPUT是指把本条规则添加到input链的最后一条的位置,-p tcp 指针对tcp协议,-m multiport 指支持直接指定多端口,--dport 21,22,3306指目标端口,后面是端口列表。-j ACCEPT指符合这些规则的数据包,则接受它。针对5.由于每台服务器配置了双网卡,实现内外网访问分离。为了防止IP欺骗等非法访问,外网口只允许公网IP访问,禁止保留的内网IP直接访问。比如限制192.168网段的IP直接访问公网网卡:iptables -A INPUT -i eth0 -p all -s 192.168.0.0/16 -j DROP-i eth0指从eth0网卡进来的数据,-p all指所有协议,-s 192.168.0.0/16指数据包源IP为192.168.0.0/16段的所有IP,-j DROP指符合条件的数据包全部抛弃掉不要。

    针对10.限制每个IP连接SSH的并发连接数要求。实现脚本如下:

    iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j DROP

    指超过3个符合条件的连接数就抛弃数据包。

    除了实现单条规则控制外,对于有多条规则的,必须要按一定的顺序添加规则,否则可能失效。iptables执行规则时,是从规则表中从上至下顺序执行的,如果没遇到匹配的规则,就一条一条往下执行,如果遇到匹配的规则,就执行本规则,执行后根据本规则的动作(accept, reject, log等),决定下一步执行的情况。如果所有规则都匹配不到,则由链的默认规则决定,本案例中采用DROP方式。

    5 总结及遇到的困难

    在升级前后,我们做了测试数据的记录,其中一组测试结果如表1所示。

    测试阶段

    测试结果(硬件相同,条件:模拟20000个并发压30秒时间)

    系统升级前

    Requests: 430026 susceed, 2986 failed.

    系统升级后不启动防火墙

    Requests: 629221 susceed, 0 failed.

    系统升级后启动防火墙

    Requests: 629018 susceed, 0 failed.

    表1 系统升级前后的性能测试数据

    表1数据表明,系统升级后,性能比升级前明显提高;在升级后的系统中,启动内核的iptables功能与否,对系统性能几乎没什么影响,由此也可说明其性能效率之高。

    以实施了4.1.10防火墙规则为例,用SSH工具远程连接该服务器时,当超过3个SSH请求超时后提示失败,达到了预期控制目的。

    总体上,这次网站根据提出的安全目标,整个站点顺利实现升级切换,目前系统运行良好,同时也为报社大大节约了经费。

    由于之前使用iptables技术对故障率没有明确要求,虽然能稳定运行、理论上它对系统资源占用极少,但真正在生产环境下多台服务器同时使用这套方案,还是存在很多风险的。

    在防火墙具体实现期间,由于没注意到iptables版本过低,没有及时补丁升级,导致部分功能在配置时总是无效,所以必须要注意要核查某版本所支持的功能与参数。部分功能要需要启动内核的一些参数才可以配合iptables实现控制。

    由于iptables规则控制实现的特点,随着规则的明显增加,理论上其性能会有所下降,但这点还要结合实际压力情况而定。按访问规则的命中概率高低,优化规则顺序,对性能的提升也会有很大的帮助的。

    另,受硬件资源和网络带宽的限制,遇到有人恶意进行海量DDOS攻击等,目前还没有很好的解决方法,期待有更好的技术出现来解决这种流氓行为。用lvs技术架构网站系统提供高可用性高性能可扩展负载均衡集群,或结合智能DNS解析可以改善这种情况。

    6 系统展望

    高版本的iptables还可进行字符串的匹配,启用iptables的日志功能,利用LOG参数,把需要分析的数据保存到一个日志文件,通过与psad、fwknop、fwsnort等工具的配合,制订网络访问规则,分析iptables的日志内容,可转变为应用级防火墙,达到监控流量、跟踪用户访问行为,对非法访问采用报警警告,甚至主动防御等IDS行为,这些关于入侵检测及防御方面的工作将在以后实践中逐步完善。

    其实网站安全是一个系统概念,以上只涉及到了防火墙方面的安全建设。实际上,一个网站系统的健康运行,必须要从应用程序本身的代码安全性、WEB服务安全性、操作系统的安全性、防火墙、数据安全性等各方面都要考虑进去,各因素形成水桶效应,只有每个关口都把好关,整个系统的安全性才有保障。其他方面就不在此一一展开讨论了。

    作 者:龚大丰 电子信箱:gdf78@163.com联系电话:13587544151通讯地址:浙江省温州鹿城区公园路105号温州都市报全媒体中控室 邮编:325000 编辑:中国新闻技术工作者联合会

    评论 点击评论