iptables 删除 1.ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED,为啥 ssh 不能登录了?

2017-03-25 13:24:31 +08:00
 liashui
centos7

$:iptables -nL --line-number

Chain INPUT (policy DROP)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22


$:iptables-save
*filter
:INPUT DROP [24:3588]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [197:32015]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
7178 次点击
所在节点    程序员
13 条回复
liashui
2017-03-25 13:27:09 +08:00
疑问:
1.第三条规则是 lo 的,这个可以不用考虑
2.难道 ssh 除了“ state NEW tcp dpt:22 ”这块的数据,还有 “ state RELATED,ESTABLISHED ”这块的数据,所以需要两条配合起来?
mytsing520
2017-03-25 13:30:28 +08:00
NEW 说明这个包是我们看到的第一个包。意思就是,这是 conntrack 模块看到的某个连接第一个包,它即将被匹配了。比如,我们看到一个 SYN 包,是我们所留意的连接的第一个包,就要匹配它。第一个包也可能不是 SYN 包,但它仍会被认为是 NEW 状态。这样做有时会导致一些问题,但对某些情况是有非常大的帮助的。例如,在我们想恢复某条从其他的防火墙丢失的连接时,或者某个连接已经超时,但实际上并未关闭时。

ESTABLISHED 已经注意到两个方向上的数据传输,而且会继续匹配这个连接的包。处于 ESTABLISHED 状态的连接是非常容易理解的。只要发送并接到应答,连接就是 ESTABLISHED 的了。一个连接要从 NEW 变为 ESTABLISHED ,只需要接到应答包即可,不管这个包是发往防火墙的,还是要由防火墙转发的。 ICMP 的错误和重定向等信息包也被看作是 ESTABLISHED ,只要它们是我 们所发出的信息的应答。

RELATED 是个比较麻烦的状态。当一个连接和某个已处于 ESTABLISHED 状态的连接有关系时,就被认为是 RELATED 的了。换句话说,一个连接要想是 RELATED 的,首先要有一个 ESTABLISHED 的连接。这个 ESTABLISHED 连接再产生一个主连接之外的连接,这个新的连接就是 RELATED 的了,当然前提是 conntrack 模块要能理解 RELATED 。 ftp 是个很好的例子, FTP-data 连接就是和 FTP-control 有 RELATED 的。还有其他的例子,比如,通过 IRC 的 DCC 连接。有了这个状态, ICMP 应 答、 FTP 传输、 DCC 等才能穿过防火墙正常工作。注意,大部分还有一些 UDP 协议都依赖这个机制。这些协议 是很复杂的,它们把连接信息放在数据包里,并且要求这些信息能被正确理解。

INVALID 说明数据包不能被识别属于哪个连接或没有任何状态。有几个原因可以产生这种情况,比如,内存溢出,收到不知属于哪个连接的 ICMP 错误信息。一般地,我们 DROP 这个状态的任何东西。

以上来自 http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=1990048&page=2 ,仅供参考。
liashui
2017-03-25 13:30:42 +08:00
求不要沉,伟大的 e2vx
oaix
2017-03-25 13:31:01 +08:00
state 是指 tcp 连接状态, state NEW 指客户新建一个到 22 端口的连接,你 accept 了,但是连接建立后,后续的包被 reject 了。
julyclyde
2017-03-25 13:32:47 +08:00
为什么你会问“难道”这种话呢?看 NEW 和 ESTABILISHED 这俩词的意思还不明白?
luojiyin87
2017-03-25 13:36:11 +08:00
CentOS7 不是用 firewalld 管理的?
jasontse
2017-03-25 14:06:40 +08:00
你只放过了 state 是 NEW 的包啊,当 TCP 连接建立变成 Established 就被 DROP 了啊。
pagxir
2017-03-25 14:12:22 +08:00
难道只有我一个人看到 input 链所有包被 drop 么。其实 你用 iptables -nxvL 就知道哪来被 match 了。
digimoon
2017-03-25 14:46:39 +08:00
policy DROP 不符合规则的默认全部 drop ,然后你还去掉了 ESTABILISHED 的 accept ,那除了 NEW 的以外不就 drop 了么?
liashui
2017-03-25 14:57:19 +08:00
@mytsing520 @oaix @julyclyde @jasontse @digimoon 你们是对的,我没有对 new , ESTABILISHED 没有理解
liashui
2017-03-25 14:57:48 +08:00
@luojiyin87 我禁止了 firewalld ,使用了 iptables
shiji
2017-03-26 00:18:32 +08:00
哈哈, LZ 学习了就好, iptables 和 ip route 里面的坑不少,一个不小心服务器就连不上了。。
另外建议把这几个的默认规则都设为 Accept ,在最后一行把所有剩下的 drop 就行。否则小手一抖,给 iptables flush 了,服务器就和互联网失联了。
julyclyde
2017-03-26 21:31:39 +08:00
@shiji 说的很对。-P 是个大坑

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

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

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

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

© 2021 V2EX