我们建议在centos配置防火墙时,用iptables命令结合脚本文件的方式。
例如,下面的命令:
iptables -A INPUT -i eth0 -p udp -s 60.195.252.110 --dport 1000 -j ACCEPT
这种并没有错。也是好用的。
但是在centos系统中,其主要的防火墙设置都在RH-Firewall中了。
例如:
复制代码 代码示例:
[root@jbxue ~]# iptables -L -n
输出
Chain INPUT (policy ACCEPT)
target prot opt source destination
RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT udp -- 60.195.252.110 0.0.0.0/0 udp dpt:161
Chain FORWARD (policy ACCEPT)
target prot opt source destination
RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain RH-Firewall-1-INPUT (2 references)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 255
ACCEPT esp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT ah -- 0.0.0.0/0 0.0.0.0/0
ACCEPT udp -- 0.0.0.0/0 224.0.0.251 udp dpt:5353
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:631
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:631
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:10020
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
注意第4行,
ACCEPT udp -- 60.195.252.110 0.0.0.0/0 udp dpt:161
此规则在下面这条规则之后了。
RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0
在对应的
Chain RH-Firewall-1-INPUT (2 references)
文本后面的最后一行,我们发现有如下条目:
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
其实,这里这条就是拒绝一切请求。所以你配置的规则因为发生在其后,所以是无法起作用的。
为此,我们不能这么设置,我们需要让我们的配置进入到RH-Firewall的配置中。
于是,使用如下命令:
iptables -A RH-Firewall-1-INPUT -i eth0 -p udp -s 60.195.252.110 --dport 1000 -j ACCEPT
这里把对应的Chain的名字改成了RH-Firewall对应的。所以,我们现在可以得到如下情况:
复制代码 代码示例:
Chain INPUT (policy ACCEPT)
target prot opt source destination
RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
target prot opt source destination
RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain RH-Firewall-1-INPUT (2 references)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 255
ACCEPT esp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT ah -- 0.0.0.0/0 0.0.0.0/0
ACCEPT udp -- 0.0.0.0/0 224.0.0.251 udp dpt:5353
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:631
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:631
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:10020
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
ACCEPT udp -- 60.195.252.110 0.0.0.0/0 udp dpt:161
最后一条加入了,但是这不是,还是发生在拒绝之后,不会起作用?
对的。所以,绕了这么一圈,我们现在终于要拿出杀手锏了!
# vim /etc/sysconfig/iptables
此命令,会直接调用防火墙配置文件,完全可以让我们灵活配置。内容如下:
复制代码 代码示例:
# Generated by iptables-save v1.3.5 on Sun Feb 5 00:11:13 2012
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1100:159219]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p esp -j ACCEPT
-A RH-Firewall-1-INPUT -p ah -j ACCEPT
-A RH-Firewall-1-INPUT -d 224.0.0.251 -p udp -m udp --dport 5353 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 10020 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -s 60.195.252.110 -i eth0 -p udp -m udp --dport 161 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Sun Feb 5 00:11:13 2012
注意此处:
-A RH-Firewall-1-INPUT -s 60.195.252.110 -i eth0 -p udp -m udp --dport 161 -j ACCEPT
是添加进去的项,添加在REJECT之前,这样它就可以起作用了。
注意,此处可以如果没有起租用,可以执行service iptables restart。
另外,如果刚才执行了service iptables save的话,上面这条信息,会出现在REJECT之后,此时,只要调整下次序就行,而不用添加。