我们都知道,出于安全性的考虑,只要主机连接在Internet上,就应该有一个防火墙阻止恶意的信息访问主机。设置防火墙时,首先决定哪一些服务可以通过Internet访问,然后关闭所有其它的服务。
因为UDP是一个无状态协议,iptables连接跟踪维护一个状态表,并且只对源自内部网的信息作出响应。Iptables防火墙脚本接受向内的连接并且根据下面所列的规则在连接跟踪数据库中加入一个新的连接:
# ACCEPT inbound TCP connections for various
# services found in /etc/services
for service in ftp ssh smtp domain
http auth ldap https; do
iptables -t filter INPUT -m state
--state NEW,ESTABLISHED -i $EXT_IFACE
-p tcp -d $IP --dport $service -j ACCEPT
done |
我们可以通过查看/proc/net/ip_conntrack文件来查看连接跟踪。
以下iptables规则允许在TCP端口20上有主动模式的FTP连接请求:
# ACCEPT active FTP data connections on firewall
iptables -t filter -A INPUT -m state --state RELATED
-i $EXT_IFACE -p tcp -d $IP --dport 1024:
--sport ftp-data -j ACCEPT |
在网络内部的连接,FORWARD规则会通过NAT把连接进行伪装。使用NAT,大部分协议都可以正常工作,只有很少一部分需要一个重写IP地址的模块。对于主动模式的FTP连接,需要一个辅助程序来通过防火墙。你可以使用modprobe命令加载ip_masq_ftp(ipchains)或者ip_nat-ftp(iptables)模块,以实现对主动FTP连接的伪装。这样,处于主动的FTP连接的远程机器,为了传输数据,会要求连接本地机。这时,ip_masq_ftp模块会重新修改FTP连接中的数据包,使得内部机器看起来就像是直接连接在Internet上一样。对于被动模式的FTP连接,可以使用TCP端口21来传输数据,以避开这个问题。值得注意的是,因为FTP的密码在网络上是以文本的形式传输的,所以并不安全。要建一个安全的FTP站点,可以使用sftp,它在通信时使用的是安全的套接字。Sftp随着OpenSSH客户端工具起发行。
对于各种应用程序的伪装模块,可以在/lib/modules/'uname -r'/ipv4 (ipchains) 或者/lib/modules/'uname -r'/ kernel/net/ipv4/netfilter/ (iptables)目录中找到。
FORWARD使用以下的iptables规则来伪装通过防火墙的数据包:
# ACCEPT new outbound traffic (stateful firewall)
iptables -t filter -A FORWARD -m state —state NEW,ESTABLISHED
-i $INT_IFACE -s $INT_NET -j ACCEPT
# ACCEPT return traffic (stateful firewall)
iptables -t filter -A FORWARD -m state —state NEW,ESTABLISHED,RELATED
-i $EXT_IFACE -s ! $INT_NET -j ACCEPT
# Pass Internet traffic to internal network unmodified
iptables -t nat -A POSTROUTING -o $INT_IFACE -j ACCEPT
# Masquerading outbound connections from internal network
iptables -t nat -A POSTROUTING -o $EXT_IFACE -j MASQUERADE |