关于 iptables 的问题

2016-01-04 17:59:38 +08:00
 Counter

开机成功执行脚本 iptables.sh ,脚本内容如下:
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

这里并未开启 SSH 端口,为何可以 SSH 连接?哪里出问题了吗?

3775 次点击
所在节点    Linux
29 条回复
ayouwei
2016-01-05 11:56:36 +08:00
以前没有接触过 net_speeder , 刚才看了一下 net_speeder 的原理, 我理解问题是出在 net_speeder 的机制上, 如果说错了请大家打脸。

net speeder 原理就是把网卡收到或者发出去的包根据规则过滤出来复制一份再写入协议栈;

在你这个场景下, 收到的 ssh syn 包会被复制。 原始的 syn 包经过协议栈, 而复制的包是通过了的。

原因就是复制出来的包是本地复制的, 所以再进入协议栈时是通过 loopback 进入;

所以先匹配到 iptables -A INPUT -i lo -j ACCEPT

而之后的包无论是匹配 state 还是匹配 loopback interface 都会被放过;
Counter
2016-01-05 12:41:11 +08:00
@ayouwei 应该是这样没错,复制的包被当做本地的包处理了
另外基于 iptables 的 UFW 也有此问题 https://www.v2ex.com/t/244523
Counter
2016-01-05 14:44:08 +08:00
@ayouwei
@ryd994
把 iptables -A INPUT -i lo -j ACCEPT 分拆为两条
iptables -A INPUT -i lo -p tcp ! --syn -j ACCEPT
iptables -A INPUT -i lo -p udp -j ACCEPT
搞定了,哈哈
ayouwei
2016-01-05 15:07:21 +08:00
恭喜,但是你这样会有个问题,就是无法再访问本地服务了。拒掉前先放过本地流量
-A INPUT -i lo -p tcp --src 127.0.0.1/8 -j ACCEPT
-A INPUT -i lo -p tcp ! --syn -j ACCEPT
Mithrandir
2016-01-05 15:18:36 +08:00
看了下 net_speeder ,感觉并没有使用这个的必要啊
helihuo
2016-01-06 01:32:07 +08:00
@ayouwei 没用。我试过了,你这招照样能连上
Counter
2016-01-06 08:51:13 +08:00
@helihuo 我现在直接把这条 iptables -A INPUT -i lo -j ACCEPT 去掉,然后再配合协议( tcp/udp )或端口(--sport/--dport )开白名单,毕竟不是全部流量都需要 net_speeder
Counter
2016-01-06 08:55:46 +08:00
@helihuo 说错,不是所有流量都需要 lo
Devin
2016-01-20 22:29:25 +08:00

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

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

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

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

© 2021 V2EX