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