rhel 4 中作nat,iptables中的一处始终不明白
在redhat linux 9中。做nat,我的步骤是:
1 修改/etc/sysctl.conf,改net.ipv4.ip_forward = 1,然后service network restart
2 在/etc/sysconfig/iptables中最前面,加上:
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -o eth0 -s 192.168.1.0/255.255.255.0 -j MASQUERADE
COMMIT
然后service iptables restart
就ok了
但在rhel 4中,这样做不行,因为filter段中的倒数第二行内容是:
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
可能是指所有不符合上面(这行之上的)规则的请求将被拒绝,并且返回“主机禁止访问”的错误信息
我只要把这行注释掉就ok了
但是,为什么这一行会使得nat段不能正常运作?是因为nat段中的“:OUTPUT ACCEPT [0:0]”?
我不大清楚
望各位指点,谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
真正的做法,是不对 INPUT 和 FORWARD 进行汇总处理,各处理各的
CU 有很多例子,可以参考一下
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
这一句确实阻挡了FORWARD链,导致nat无法到达client
如果改成
-A INPUT -j REJECT --reject-with icmp-host-prohibited
是可以的
或者在不改这一句,在filter段中加入:
-A RH-Firewall-1-INPUT -s 192.168.1.0/255.255.255.0 -j ACCEPT
也可以
但是总觉得这两个方法都不怎么样,哪位有其他方法?谢谢指点
明白了,你的问题起因是将 INPUT 和 FORWARD 放到一起统一处理造成的
我始终不明白为什么 REDHAT 会这样做,这样做会存在很多问题的,包括对各种状态的匹配与处理等
下面是iptables-save的内容,是因为nat规则在filter之后的原因?
# Generated by iptables-save v1.2.11 on Thu Jun 15 13:46:26 2006
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [59066:15800176]
: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 8 -j DROP
-A RH-Firewall-1-INPUT -p icmp -m icmp ! --icmp-type 8 -j ACCEPT
-A RH-Firewall-1-INPUT -p ipv6-crypt -j ACCEPT
-A RH-Firewall-1-INPUT -p ipv6-auth -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 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 6881:6999 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m state --state NEW -m udp --dport 6881:6999 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m state --state NEW -m udp --dport 18352 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 139 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m multiport --dports 25,110,143 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 3128 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 1863 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 111 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m state --state NEW -m udp --dport 111 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 119 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 9000:9010 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m state --state NEW -m udp --dport 123 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Thu Jun 15 13:46:26 2006
# Generated by iptables-save v1.2.11 on Thu Jun 15 13:46:26 2006
*nat
:PREROUTING ACCEPT [49:4035]
:POSTROUTING ACCEPT [605:48408]
:OUTPUT ACCEPT [605:48408]
-A POSTROUTING -s 192.168.1.0/255.255.255.0 -o eth0 -j MASQUERADE
COMMIT
# Completed on Thu Jun 15 13:46:26 2006
谢谢.但是
禁止ping是(/etc/sysconfig/iptables)
-A RH-Firewall-1-INPUT -p icmp --icmp-type echo-request -j DROP
-A RH-Firewall-1-INPUT -p icmp --icmp-type ! echo-request -j ACCEPT
只能ping出,不能ping入
这个问题不是命令
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
的问题(问之前我也试过,2种方法,写配置文件或脚本,这个问题最可能是阻止了先前的一条规则,但不是这条)
明天贴上iptables-save的结果.谢谢各位的指教
另,不改配置文件,直接写脚本是可以的.只是这个脚本没有类似于-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited的规则:
echo "1" > /proc/sys/net/ipv4/ip_forward
modprobe ip_tables
#modprobe ip_nat_ftp
#modprobe ip_nat_irc
modprobe ip_conntrack
#modprobe ip_conntrack_ftp
#modprobe ip_conntrack_irc
/sbin/iptables -F
/sbin/iptables -X
/sbin/iptables -Z
/sbin/iptables -F -t nat
/sbin/iptables -X -t nat
/sbin/iptables -Z -t nat
/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT
/sbin/iptables -t nat -P PREROUTING ACCEPT
/sbin/iptables -t nat -P POSTROUTING ACCEPT
/sbin/iptables -t nat -P OUTPUT ACCEPT
/sbin/iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.1.0/24 -j MASQUERADE
[ 本帖最后由 kelela 于 2006-6-14 23:26 编辑 ]
需要理解 iptables-save 的结果
不妨贴出来我给你改一下好了(我只会改,只会用 iptables 命令添加策略,不会直接写成那样的东西)
我觉得-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited的意思是禁止ICMP的PING。
可以尝试一下iptables命令,
格式是
iptables -t table option pattern -j target
如iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
在这里-t项代表是对nat的修改。-A是添加。