2.2. Iptables工具的安装和编译
Iptables是Linux Netfilter框架的用户端程序,负责接收用户的命令,并且将用户命令添加到内核中。Iptables一般是一个*.tar.gz的软件包,下载以后使用如下命令序列将其展开:
[test /root]# pwd/root[test /root]# tar zxvf iptables-2.6.tar.gz[test /root]# cd iptables-2.6[test /root]# make[test /root]# make install
好了,现在可以直接在命令行方式下使用该命令了。该命令的语法后面介绍。
2.3. NetFilter框架和Iptables使用方法概述
Linux根据数据包在内核中的不同处理,将整个IP包在内核中的生存周期划分为三个:PREROUTING、FORWARD、 POSTROUTING。其他还有两个LOCAL_INPUT和LOCAL_OUTPUT(一般简写成INPUT和OUTPUT),分别对应送入本机上层协议栈的数据包和本机发送出的数据包。如果想要保护本机的安全性,那么只需关注INPUT和OUTPUT方向的数据包就可以了。其他几个不需要关心。
这五个方向对应着内核中五条不同的规则链和三个不同的规则表。
Linux中规则链被组织在三个不同的规则表中:Filter 、NAT、Mangle。其中Filter针对过滤系统,NAT针对地址转换系统,Mangle针对策略路由和特殊应用。规则链分配如下:
· Filter:INPUT、FORWARD、OUTPUT
· NAT:PREROUTING、POSTROUTING
· Mangle:PREROUTING、POSTROUTING
针对主机的安全性主要集中在Filter表中的INPUT和OUTPUT规则链,这两个关键字在添加规则的时候会使用到。
在内核编译了NetFilter系统以后,系统会自动建立这五个规则链和三个规则表。
我们在使用的时候主要要使用到的规则表是Filter表,规则链是INPUT和OUTPUT链。添加的主要规则都集中在这两个链上。用图示表示如下:
2.4. 使用Iptables增强主机的安全性How-To
1. 取消不必要的服务监听端口
使用Linux下的Setup命令,进入ASCI图形界面,限制主机提供的常用服务,例如FTP、Daytime、Echo、Telnet、WEB、syslog remote等等一系列不需要的服务。
然后使用下列命令序列重启Xinetd:
[test /root]# cd /etc/init.d[test /root]# ./xinted restart
使用netstat -na命令观察系统中是否有不期望的端口正在监听。如果自己需要什么服务,利用Setup工具打开服务,并且重启Xinetd就可以了。
如果没有不期望的端口被打开,可以进入下一步。
2. 修改INPUT和OUTPUT规则链的默认策略
使用下列命令序列:
[test /root]# iptables -P INPUT DROP[test /root]# iptables -P OUTPUT DROP
这样以来,任何未经同意的数据包都会被系统拒绝。
添加如下命令控制访问主机:
iptables -A INPUT -p PROTO -state ESTABLISHED ,RELATED -j ACCEPT
本条命令的含义是凡是属于已经建立连接的数据包,或者关联性连接的数据包都允许通过。注意将命令行中的"PROTO"换成真正的协议名称tcp、 udp、 或者 icmp
iptables -A INPUT -s A.B.C.D/32 -p PROTO -dport PORT -j ACCEPT
这条命令的含义是允许从IP地址为A.B.C.D主机来的,协议为PROTO的IP包,访问本主机的PORT端口的数据包允许通过。例如可以将PORT换成80 ,表示WEB服务,换成22,表示SSH服务等等。注意将PROTO换成tcp或者udp。
好了,只有经过上述命令添加的IP地址的主机,才能访问该主机。
为了防止IP地址冒充,我们可以将IP地址和MAC地址进行绑定,使用如下命令:
arp -s A.B.C.D aa:bb:cc:dd:ee:ff
表示A.B.C.DIP地址对应的MAC地址是aa:bb:cc:dd:ee:ff。
上述命令完成以后,主机的安全访问就在NetFilter的控制之下了。
例如,允许10.0.0.41的主机访问该服务器的SSH服务,使用如下命令:
iptables -A INPUT -s 10.0.0.41/32 -p tcp -dport 22 -j ACCEPT
允许10.0.0.0/24网段访问news服务:
iptables -A INPUT -s 10.0.0.0/24 -p tcp -dport 532 -j ACCEPT
同时绑定内部主机的MAC地址和IP地址的对应关系。
最后可以使用下列命令观察一下是否所有需要的规则都被完全的加入了内核中:
iptables -L