[摘 要] Iptables 是一种基于Linux 2.4.1以上内核的网络包过滤管理工具,其核心是netfilter(Linux核心中一个通用架构)技术。本文探讨了netfilter 技术的基本原理及在电力MIS系统中如何运用iptables 技术实现子系统网络信息安全。
[关键词] 电力信息网 数据包 防火墙
1 概述
电力行业一直致力于通过电子信息化建设改造传统生产经营管理模式,如今,电力信息网络已不仅是单一的局域网络,已建设成为包括财务管理网、人事管理网、用电营销网、调度自动化网等的大型企业管理信息平台。各子网络系统运行相对独立,有着相对敏感的信息,但与MIS主网又有必要的信息交互。如何保护子系统的信息安全,保障网络系统安全高效地运行,是企业信息工作的首要任务。
通常的解决办法是在子系统网络与MIS主网接口处加装专业防火墙,但对于电力MIS系统与其众多的子系统来说,是高效但并不经济的方法。我们这里介绍一种基于RedHat Linux 7.2的iptables包过滤型防火墙系统,用来隔离MIS网络和子系统网络,保护子系统信息安全。
2 原理
iptables是一个管理内核包过滤的工具,利用它可以追加、插入或删除包过滤规则。实际上真正来执行这些过虑规则的是netfilter及其相关模块(如iptables模块和nat模块)。netfilter是Linux 核心中一个通用架构,它提供了一系列的"表"(tables),每个表由若干"链"(chains)组成,而每条链中可以有一条或数条规则(rule)组成。我们可以这样来理解,netfilter是表的容器,表是链的容器,而链又是规则的容器(如图一所示)。
系统缺省的表为"filter",该表中包含了INPUT、FORWARD和OUTPUT 3个链。每一条链中可以有一条或数条规则,每一条规则都是这样定义的“如果数据包头符合这样的条件,就这样处理这个数据包”。当一个数据包到达一个链时,系统就会从第一条规则开始检查,看是否符合该规则所定义的条件: 如果满足,系统将根据该条规则所定义的方法处理该数据包; 如果不满足则继续检查下一条规则。最后,如果该数据包不符合该链中任一条规则的话,系统就会根据该链预先定义的策略来处理该数据包。
数据包在filter表中的流程如图二所示。当有数据包进入系统时,系统首先根据路由表决定将数据包发给哪一条链,则可能有三种情况:
1.如果数据包的目的地址是本机,则系统将数据包送往INPUT链,如果通过规则检查,则该包被发给相应的本地进程处理; 如果没通过规则检查,系统就会将这个包丢掉;
2.如果数据包的目的地址不是本机,也就是说,这个包将被转发,则系统将数据包送往FORWARD链,如果通过规则检查,则该包被发给相应的本地进程处理; 如果没通过规则检查,系统就会将这个包丢掉;
3.如果数据包是由本地系统进程产生的,则系统将其送往OUTPUT链,如果通过规则检查,则该包被发给相应的本地进程处理; 如果没通过规则检查,系统就会将这个包丢掉。
我们的包过滤型防火墙使用了FORWARD链。
3 实现方法
3.1系统需求
一台安装双网卡的机器(根据网络流量具体决定配置),操作系统选择RedHat Linux 7.2或以上(可从www.redhat.com上获得ISO光盘映像)。
3.2安装方法
将PC机的一块网卡(eth0)接192.168.1.0/24网段,另一块网卡(eth1)接192.168.2.0/24网段(见图三)。安装RedHat Linux 7.2时,安全级别需选择中级或高级。安装完成后,还需重新编译内核以支持netfilter (若安装的是RedHat Linux 8.0,安装时安全级别选择了中级或高级,则不需要重新编译内核)。在编译新内核时,要求选择和netfilter相关的项目。这些项目通常都是位于“Networking options”子项下。我们应该修改的项有: (表示载入Linux 内核)
[y] Packet socket
[y] Kernel/User netlink socket
[y] Netlink device emulation
[y] Socket Filtering
[y] Network packet filtering (replaces ipchains)
[y] ip:multicasting
[y] ip:advanced router
然后,在“IP: Netfilter Configuration ---->”子项中选中:
[y] Connection tracking (required for masq/NAT)
[y] FTP protocol support
[y] IRC protocol support
[y] IP tables support (required for filtering/masq/NAT)
[y] limit match support
[y] MAC address match support
[y] Netfilter MARK match support
[y] Multiple port match support
[y] TOS match support
[y] Connection state match support
[y] Packet filtering
[y] REJECT target support
[y] Full NAT
[y] MASQUERADE target support
[y] REDIRECT target support
[y] Packet mangling
[y] TOS target support
[y] MARK target support
[y] LOG target support
(如何编译及应用内核请参考Linux相关文档)
3.3 生成防火墙脚本
在建立脚本前要根据具体的网络安全及业务需要制定相应的规则。我们这里的规则是: 允许子网用户访问MIS网的WEB服务器,允许MIS主网上的192.168.2.2主机访问子网上192.168.1.10主机的1433端口(Microsoft SQL Server服务),禁止除此之外的所有行为。
建立名为firewall.sh防火墙脚本,内容如下(括号内的为注释):
echo 1 > /proc/sys/net/ipv4/ip_forward (打开IP包转发功能)
/sbin/iptables -F INPUT (清空输入链)
/sbin/iptables -F FORWARD (清空转发链)
/sbin/iptables -P FORWARD DROP (改变FORWARD的缺省规则为丢弃)
/sbin/iptables -I FORWARD 杝 192.168.1.0/24 杁 192.168.2.0/24 杍 DROP (丢弃来自于子网的IP包)
/sbin/iptables -I FORWARD 杝 192.168.2.0/24 杁 192.168.1.0/24 杍 DROP (丢弃来自于主网的IP包)
/sbin/iptables -I FORWARD -p tcp 杝 192.168.1.0/24 杁 192.168.2.0/24 梥yn 梔estination-port 80 -j ACCEPT (允许子网访问外网的WEB服务器)
/sbin/iptables -I FORWARD -p tcp 杝 192.168.2.2 杁 192.168.1.10 梥yn 梔estination-port 1433 -j ACCEPT (允许192.168.2.2访问子网主机192.168.1.10的Microsoft SQL Server数据库)
也可禁止一个网中的恶意用户(ip为x.x.x.x,mac为a:b:c:d:e:f)访问另一个网。
/sbin/iptables -I FORWARD 杝 x.x.x.x -m mac 梞ac-source a:b:c:d:e:f -j DROP
(最后插入的规则为FORWARD链中第一条规则)
将firewall.sh的属性改为可执行,并在/etc/rc.local中加入 firewall.sh,使其开机就能执行。这样一个按我们要求定制的包过滤型防火墙就建好了,它即保护了子网信息安全,又允许受限的信息交流。
4 结束语
iptables是一个功能十分强大的工具,利用它可以实现防火墙,也可以用作路由器、透明代理等,我们甚至利用它做了一个小区宽带网管理系统。有兴趣的读者不妨进一步探讨。
Iptables 详细语法请参阅Linux 2.4 Packet Filtering HOWTO。