wget在CentOS 5.5和iptables 1.3.5中被iptables阻止

这个规则我不能使用wget到外部地址或通过外部SMTP服务器发送电子邮件:

#!/bin/bash # Flush all current rules from iptables iptables -F # Allow SSH iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT # Set access for localhost iptables -A INPUT -i lo -j ACCEPT # Accept packets belonging to established and related connections iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Allow incoming web traffic iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT # Save settings /sbin/service iptables save 

但是,如果我添加这个,它的工作原理:

 iptables -A INPUT -p udp -m udp --sport 53 -j ACCEPT iptables -A INPUT -p tcp --sport 80 -j ACCEPT 

下面的规则不应该允许任何来自以前请求的传入连接吗?

 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 

编辑:当我运行脚本我得到2错误:

 iptables: Unknown error 4294967295 iptables: Unknown error 4294967295 

我正在使用CentOS 5.5和iptables 1.3.5。 挖掘更多我发现这个版本有一个错误: http : //bugs.centos.org/view.php?id= 3632这可能是问题的原因?

编辑2:如果我运行demsg我得到相同的消息重复:

 ip_tables: udp match: only valid for protocol 17 

编辑3:运行iptables -L INPUT -v -n成功wget后显示:

 # iptables -L INPUT -v -n Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 31 2020 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 4 938 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp spt:53 12 11439 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp spt:80 

编辑4:运行sh -x脚本显示:

  # sh -x firewall.conf + iptables -F + iptables -A INPUT -p tcp --dport 22 -j ACCEPT + iptables -P INPUT DROP + iptables -P FORWARD DROP + iptables -P OUTPUT ACCEPT + iptables -A INPUT -i lo -j ACCEPT + iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables: Unknown error 4294967295 + iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables: Unknown error 4294967295 + iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables: Unknown error 4294967295 + iptables -A INPUT -p tcp --dport 80 -j ACCEPT + iptables -A INPUT -p tcp --dport 443 -j ACCEPT + /sbin/service iptables save Saving firewall rules to /etc/sysconfig/iptables: [ OK ] 

在OUTPUT链中没有任何规则,并且默认策略是DROP,所以当您尝试打开http或smtp连接时,系统发送的初始tcp数据包将被丢弃。 你需要添加这样的规则来允许出站http和smtp的wget和电子邮件:

iptables -A OUTPUT -p tcp –dport 80 -m state –state NEW -j ACCEPT

iptables -A OUTPUT -p tcp –dport 25 -m state –state NEW -j ACCEPT

您可以使用多端口将它们合并为一个规则:

iptables -A OUTPUT -p tcp -m多端口 – 输出25,80 -m状态 – 状态NEW -j ACCEPT

你有没有尝试过

 iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT 

这可能与“状态”模块/内核扩展缺失/有问题/玩心灵游戏(?)有关。

可能值得一试。

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

这只是对跨越input链的数据进行连接跟踪。 您的连接尚未build立,您仍在进行三方握手(TCP三次握手)。 所以conntrack正在否认连接。

iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

应该修复它。

我想你应该更新你的iptables ; 我的版本是1.4.10。

例如,“未知错误4294967295”已在1.3.6中修复: http : //ftp.netfilter.org/pub/iptables/changes-iptables-1.3.6.txt

当然,这很可能需要内核更新。

你应该在INPUT和OUTPUT之间“配对”

由于传出wget正在请求使用端口21,80和/或443 TCP OUTPUT,并且需要来自源端口20,21,80和/或443的“incoming INPUT”的许可,请尝试以下操作:

 # rule OUT first : iptables -A OUTPUT -p tcp -o ethX -d 0/0 -m multiport --dport 21,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT # rule for "coming back" from OUT to INPUT : iptables -A INPUT -p tcp -i ethX -s 0/0 -m multiport --sport 20,21,80,443 -m state --state ESTABLISHED -j ACCEPT 

ethX是你的外部eth接口(eth0 eth1或其他)

通过外部SMTP发送邮件的规则? 做同样的事情,只要改变上面的每条规则的运动和运动

我希望有所帮助,这对我有用。

顺便说一句,我的iptables是v1.3.5,我的默认INPUT OUTPUT FORWARD策略设置为DROP 🙂