IPTables规则允许传入的SSH连接


11

该脚本的目的是仅允许通过VPN的流量,但localhost <-> localhost和传入的SSH流量除外。但是,当我通过SSH运行脚本时,我已断开连接并被迫重新启动vm。我的脚本有什么问题?

#!/bin/bash
iptables -F

#Allow over VPN
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A OUTPUT -o tun+ -j ACCEPT

#Localhost
iptables -A INPUT -s 127.0.0.1/8 -j ACCEPT
iptables -A OUTPUT -d 127.0.0.1/8 -j ACCEPT

#VPN
iptables -A INPUT -s 123.123.123.123 -j ACCEPT
iptables -A OUTPUT -d 123.123.123.123 -j ACCEPT

#SSH
iptables -A INPUT -p tcp --dport ssh -j ACCEPT

#Default Deny
iptables -A INPUT -j DROP
iptables -A OUTPUT -j DROP

Answers:


10

输出链负责任何发送出去的数据包。

您的脚本仅允许出站数据包到位于123.123.123.123的隧道接口,本地主机和远程主机。

如果以要求SSH守护程序将数据包发送到除上述方法之一以外的目标的方式连接到服务器,将不允许流量流出。

要允许从SSH守护程序到SSH客户端的出站数据包,您需要添加以下规则:

iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

如果仅从单个位置进行连接,则可能还需要将目标IP条件添加到上述规则中。对于输出链,此规则必须先于最终的“ DROP anyother”规则。


+1与使用已建立的相关规则相比,此方法将更有效,更具体(根据情况而定或多或少有用)。
goldilocks 2014年

这两个好答案,我学到了很多东西!我测试了@SkyDan答案,效果很好!
史蒂文

Nitpick:输出链不负责转发的数据包。
比约恩·林德奎斯特(BjörnLindqvist)

13

您的#SSH规则意味着ssh是一种单向通信形式,不是。数据正在发送返回。

由于您事先无法知道客户端的端口号,因此处理此问题的正常方法是允许被认为已建立连接“已建立”或“相关”的连接。为此,您需要:

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

在您的DROP规则之前(最好是在顶部,因为规则是按顺序处理的,并且这两个规则将适用于大多数数据包)。

还有如何建立TCP连接开始建立的解释在这里 ; 从本质上讲,服务器对您的#SSH INPUT规则所允许的数据包进行了回复。


1
这是行不通的。在成立手段包方向对于给定的TCP连接已经看到。如果仅添加此规则,则第一个出站数据包仍将被阻止。
hellodanylo

2
@SkyDan 这是一个参考。注意在图中,当服务器在收到打开的syn后将syn / ack发送回客户端时,建立连接意味着iptables将使该回复数据包通过:“一旦看到一个数据包(SYN),它就会认为该连接为NEW。一旦看到返回数据包(SYN / ACK),便将连接视为已建立。” ->再次:iptables 看到服务器要发送的返回数据包,将连接设置为已建立,并允许回复通过。
goldilocks 2014年

1
好的,我知道为什么会起作用。有点晦涩,因为iptables男人只谈论双向查看数据包,而没有谈及TCP握手数据包是一个例外。感谢您的参考!
hellodanylo

2
@SkyDan实际上,该逻辑不仅适用于tcp --p tcp在这种意义上做任何改变我都错了,请看该页面上UDP的后续说明(相同)。关键是服务器在不知道iptables是否允许的情况下进行答复,并且当iptables从本地系统上的服务器接收到该答复时,它现在已经看到了双向流量(即使客户端尚未),建立连接,并允许答复。这里的“技术性”取决于位于两方中间的防火墙。
goldilocks 2014年

1
你是对的。有人可能应该将此信息包括到iptables男子中。
hellodanylo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.