IPTABLES:为什么我的脚本没有被应用?

IPTABLES:为什么我的脚本没有被应用?

我正在使用 Ubuntu 16.04 LTS 安装一个全新的 VPS(来自 linode.com,如果重要的话)。我为 iptables 编写了以下脚本:

#!/bin/sh

iptables -F

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT

iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

iptables -A INPUT -j DROP
iptables -A OUTPUT -j DROP
iptables -A FORWARD -j DROP

该脚本应仅允许 22、80 和 443。它还允许传出 DNS 解析。

我以root身份创建并命名了这个脚本iptables.sh然后把它放进去/etc/network/if-pre-up.d。我也这么做了chmod +x

现在,重启后,这个脚本似乎没有被应用。我通过执行来验证这一点iptables -S,结果如下:

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

我该如何继续?我现在很困惑。

更新

我不知道为什么,但在重命名为 后uptables.shiptables重启后我无法再登录我的服务器。这让我想到现在脚本在启动过程中实际上已经执行(当它具有.sh文件扩展名时,为什么没有执行?)并且我的脚本中存在错误。我太困惑了。

答案1

NEW 是单独的,RELATED、ESTABLISHED 是一起的。当您通过 ssh 连接时,目标可能是端口 22,但源端口是随机的,这就是为什么输出中的规则 #2 确实按预期运行。

iptables -I INPUT 1 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -I OUTPUT 1 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

一旦这些规则到位,您的 DNS 请求将成为 RELATED、ESTABLISHED 流量的一部分,并且您可以删除端口 53 引用。

相关内容