rhel 4 中作nat,iptables中的一处始终不明白

发布于 2022-07-20 09:08:26 字数 662 浏览 13 评论 7

在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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

2022-07-24 12:48:56

真正的做法,是不对 INPUT 和 FORWARD 进行汇总处理,各处理各的
CU 有很多例子,可以参考一下

つ可否回来 2022-07-24 12:48:38

-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
也可以

但是总觉得这两个方法都不怎么样,哪位有其他方法?谢谢指点

樱花落人离去 2022-07-24 12:44:00

明白了,你的问题起因是将 INPUT 和 FORWARD 放到一起统一处理造成的
我始终不明白为什么 REDHAT 会这样做,这样做会存在很多问题的,包括对各种状态的匹配与处理等

终遇你 2022-07-24 09:50:00

下面是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

不念旧人 2022-07-24 05:32:37

原帖由 zhangzijian 于 2006-6-14 22:31 发表

我觉得-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited的意思是禁止ICMP的PING。

可以尝试一下iptables命令,
格式是
iptables -t table option pattern -j target

如iptables - ...

谢谢.但是
禁止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 编辑 ]

怀念你的温柔 2022-07-22 15:22:17

需要理解 iptables-save 的结果
不妨贴出来我给你改一下好了(我只会改,只会用 iptables 命令添加策略,不会直接写成那样的东西)

蓝颜夕 2022-07-22 10:58:36

原帖由 kelela 于 2006-6-14 21:48 发表
在redhat linux 9中。做nat,我的步骤是:
1 修改/etc/sysctl.conf,改net.ipv4.ip_forward = 1,然后service network restart
2 在/etc/sysconfig/iptables中最前面,加上:
*nat
REROUTING ACCEPT [0:0]
...

我觉得-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是添加。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文