这个规则我不能使用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 🙂