NetFilter/iptables防火墙设置(上)
2007-02-23 12:39:38 来源:WEB开发网核心提示: iptables -t nat -A PREROUTING -i $IF_PUB -d $IP_PUB -p tcp --dporthttp -j DNAT --to 192.168.1.253iptables -A FORWARD -m state --state NEW,ESTABLI
iptables -t nat -A PREROUTING -i $IF_PUB -d $IP_PUB -p tcp --dport
http -j DNAT --to 192.168.1.253
iptables -A FORWARD -m state --state NEW,ESTABLISHED,RELATED -i $IF_PUB -p tcp --dport
http -j ACCEPT
每个服务有2个规则,一个执行地址转换而另一个是允许数据包的路由。DNAT规则被添加到NAT表的PREROUTING链中。它应用于那些到达公网接口的、以防火墙公网IP地址为目的地的数据传输上。对于目的端口是smtp(25)的tcp协议传输,系统执行DNAT转换将传输导向内网上地址为192.168.1.254的目的地。第二条规则规定,已经建立的会话的新连接和传输到达公网接口并且目的端口是smtp的tcp协议数据包时允许它们经过路由器。http情况与之类似只是目的端口变为http(80)。注意,我们可以使用/etc/services命名端口(smtp,http,等等)。尽管转发规则规定了 NEW,ESTABLISHED,RELATED只有NEW和ESTABLISHED 两个状态对smtp和http有意义。
你可以重复使用这些范例来处理其他协议,比如mail服务器的pop3协议:
iptables -t nat -A PREROUTING -i $IF_PUB -d $IP_PUB -p tcp --dport
pop3 -j DNAT --to 192.168.1.254
iptables -A FORWARD -m state --state NEW,ESTABLISHED,RELATED -i $IF_PUB -p tcp --dport
pop3 -j ACCEPT
记录其余的信息
由于以上就是所有我想要允许通行的,这样的话,了解防火墙拦截了什么是很有必要的。我们可以添加一个记录规则如下:
iptables -A INPUT -i $IF_PUB -j LOG --log-prefix="INPUT "
iptables -A OUTPUT -o $IF_PUB -j LOG --log-prefix="OUTPUT "
iptables -A FORWARD -j LOG --log-prefix="FORWARD "
之前那些规则没有处理的任何数据包,都将被根据它们是在filter表中的哪个链被发现的来分别记录。Filter表中没有单独的记录规则。由于所有不匹配的数据包都会到达filter表中的一个链,因此没有必要在其他表中放置记录规则。这些规则会给记录正文加上以它登录进来的链的名称所做的前缀。记录文件是/var/log/firewall,当它变得很大的时候会自动循环。前一个记录会被重命名为firewall-date,并且进行压缩。记录正文每项一行,下面的就是我的记录中的2行:Oct 25 16:46:46 firewallhostname kernel: INPUT IN=eth1 OUT=
MAC=00:03:47:af:35:9f:00:d0:88:01:00:95:08:00 SRC=10.0.0.155 DST=10.0.0.1 LEN=48 TOS=0x00
PREC=0x00 TTL=127 ID=31207 DF PROTO=TCP SPT=1645 DPT=135 WINDOW=64240 RES=0x00 SYN URGP=0
Oct 25 16:46:47 firewallhostname kernel: INPUT IN=eth1 OUT=
MAC=00:03:47:af:35:9f:00:d0:88:01:00:95:08:00 SRC= 10.0.0.155 DST= 10.0.0.1 LEN=48
TOS=0x00 PREC=0x00 TTL=127 ID=31307 DF PROTO=TCP SPT=1645 DPT=135 WINDOW=64240 RES=0x00
SYN URGP=0
这句显示10.0.0.155的主机两次试图连接到我的防火墙的tcp/135(Windows网络)端口。这两段都将被记录在filter表的INPUT链中。而filter表中的-j ACCEPT规则阻止包含那条规则的链继续处理该数据包,-j LOG规则则不然。数据包将被记录并且它会在当前链中继续被处理。
更多精彩
赞助商链接