使用iptables,我需要阻止我的服务器上的所有出站stream量,除了:
任何人都可以给我看一套合适的规则吗?
谢谢。
iptables -I OUTPUT -d <remote_ip> -p tcp --dport 22 -j ACCEPT iptables -I INPUT -s <remote_ip> -p tcp --sport 22 -j ACCEPT iptables -I OUTPUT -d <remote_ip> -p tcp --dport 443 -j ACCEPT iptables -I INPUT -s <remote_ip> -p tcp --sport 443 -j ACCEPT iptables -P INPUT DROP iptables -P OUTPUT DROP
您需要为每个IP添加前4条规则。 但是请注意,因为您必须通过本机上的控制台login; 所有其他访问将被阻止。
现在我明白你的问题的背景,试试:
iptables -P OUTPUT DROP iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp -s 8.8.8.8 --dport 53 -j ACCEPT iptables -A OUTPUT -p udp -s 8.8.8.8 --dport 53 -j ACCEPT iptables -A OUTPUT -p tcp -s 10.11.12.13/24 --dport 22 -j ACCEPT iptables -A OUTPUT -p tcp -s 10.11.12.13/24 --dport 443 -j ACCEPT
等等。 这将设置默认策略为DROP,然后只允许IP地址(或范围)列出访问权限。 第二行允许相关stream量(例如,正在进行的SSH会话的出站数据包),第三个和第四个DNS查找示例。
不要忘记,您需要一条类似于第2行的INPUT规则。
上述post将实现阻止除SSH和HTTPS外的所有传出stream量,但他们不会满足您的上述(在评论中)所述的目标:
我希望通过SSHlogin的用户无法从本机发送数据。
考虑以下几点:如果我可以通过SSH访问您的邮箱,我可以简单地使用SSH隧道将任何数据上传到不受信任的位置,然后通过其中一个允许传出stream量的目的地。 因此,如果您希望敏感数据不以任何方式复制到您的networking之外,我认为只有通过包含敏感数据的主机上的iptable规则才能解决问题。