iptables 明确允许策略

iptables 明确允许策略

我正在尝试在我的 20.04 Ubuntu Web 服务器上设置显式允许策略。通过运行以下命令:

iptables -P INPUT DROP

还添加了 ssh、http 和 https 规则。 产生以下规则集:

Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

一切按预期运行。但是,当尝试通过 snap 安装 certbot 或克隆 github repo 时。连接被阻止。通过暂时允许所有 INPUT 进行验证:

iptables -P INPUT DROP

我的问题是,我该如何确定要创建哪些 INPUT 规则来支持这些操作?或者将来的任何其他操作?

我知道我可能需要端口号,但我不知道如何确定它是什么。或者是否只需允许来自该源的所有 INPUT(即,https://api.snapcract.iohttps://github.com)?

在此先感谢您的帮助。

答案1

您需要允许响应您启动的任何传出会话的数据包。需要此规则:

sudo iptables -A INPUT -i $EXTIF -s $UNIVERSE -d $EXTIP -m state --state ESTABLISHED,RELATED -j ACCEPT

其中:$EXTIF 是您的接口名称;$UNIVERSE 是 0.0.0.0/0(或省略);$EXTIP 是您的 IP 地址(也可以省略)。

为了帮助确定服务器正常运行可能需要哪些额外的 INPUT 规则,请在控制传递到默认 DROP 策略之前添加一条日志记录规则作为最后的 INPUT 链规则。

sudo iptables -A INPUT -j LOG --log-prefix "INPUT DROP:" --log-level info

请小心,因为它可能会生成大量日志条目。默认情况下,日志条目/var/log/syslog将以/var/log/kern.log

此外,您没有本地接口 ACCEPT 规则(除非您列出的规则没有接口,请使用sudo iptables -xvnL)。您需要一个(在上述规则之前):

sudo iptables -A INPUT -i lo -j ACCEPT

相关内容