请教一个关于 iptables 的问题

2017-01-05 16:32:16 +08:00
 xiaoz

假如 ss 端口监听为 9000 , iptables 放行 9000 后, telnet 测试 9000 正常,但是 ss 连接超时,那么 service iptables stop 关闭后, ss 连接正常,应该就是 iptables 规则导致,但是又无法找到具体原因。完整规则如下:

*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:syn-flood - [0:0]
-A INPUT -p udp -m state --state NEW -m udp --dport 9000:9999 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 9000:9999 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 20000:50000 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 20000:50000 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -p icmp -m limit --limit 1/sec --limit-burst 10 -j ACCEPT
-A INPUT -f -m limit --limit 100/sec --limit-burst 100 -j ACCEPT
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j syn-flood
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A syn-flood -p tcp -m limit --limit 3/sec --limit-burst 6 -j RETURN
-A syn-flood -j REJECT --reject-with icmp-port-unreachable
COMMIT


再次说明一下,端口 telnet 是正常的,但是 ss 无法使用,关闭 iptables 后正常。

3163 次点击
所在节点    Linux
29 条回复
julyclyde
2017-01-07 11:18:53 +08:00
@iCyMind -m 肯定没错的。只是被-p 给隐含了而已
-m tcp 是 match tcp
xiaoz
2017-01-07 11:30:36 +08:00
@iCyMind 但是我这样写 telnet 端口的确是通的
iCyMind
2017-01-07 11:42:29 +08:00
@xiaoz 如果找到问题所在, 请 @ 我.
我也想知道原因在哪

@julyclyde 嗯, 你是对的. 刚试了下, 就算是执行
iptables -A INPUT -p tcp --dport 9000 -j ACCEPT
iptables -S 出来的结果都是
-A INPUT -p tcp -m tcp --dport 9000 -j ACCEPT
xiaoz
2017-01-09 16:46:31 +08:00
@iCyMind 原来是规则顺序问题导致,好坑呀,按照 7 楼的办法修改了下规则顺序,然后启动 iptables ,居然可以了。
xiaoz
2017-01-09 16:46:57 +08:00
@kuretru 非常感谢,按照您说的,修改了下顺序居然可以了。是什么原因呢?
iCyMind
2017-01-09 16:58:02 +08:00
@xiaoz 顺序应该不是问题所在, 我把
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
改到了最后面, 一样能连上.

你是不是用了 docker?
xiaoz
2017-01-09 17:01:31 +08:00
@iCyMind 不对,刚刚可能幻觉了,试了下还是不行,应该不是顺序导致。我是 docker ,就是 centos 部署的 ss
xiaoz
2017-01-09 17:01:45 +08:00
@xiaoz 不是 docker
iCyMind
2017-01-09 17:03:46 +08:00
@xiaoz 这些规则不行?
iptables -F
iptables -X
iptables -Z
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport 9000 -j ACCEPT
iptables -A INPUT -p udp --dport 9000 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/332448

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX