如何使用 iptables 阻止除 80,443 之外的所有端口?

如何使用 iptables 阻止除 80,443 之外的所有端口?

封锁所有端口(进出)很容易,但用“除外”这个词很难。我不知道有什么规则可以满足这个条件。

PS:我知道这个问题并不新鲜。但事实上,我没有找到任何有用的信息。所以,请帮帮我!

答案1

首先,“!” 是“非”符号。

iptables -A INPUT -p tcp -m tcp -m multiport ! --dports 80,443 -j DROP

其次,您编写的规则可能不会产生预期的结果。您会丢弃所有内容,包括对端口 80 上的连接的响应。因此,您将无法连接到它(例如,对于 Web 服务器而言)。

这些规则允许 RELATED 和 ESTABLISHED 连接,因此 Web 服务器应该可以运行(如果这确实是您想要做的)。

iptables -A INPUT -p tcp -m tcp -m multiport --dports 80,443 -j ACCEPT
<insert further allowed list here>
iptables -A INPUT -m conntrack -j ACCEPT  --ctstate RELATED,ESTABLISHED
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j DROP
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j DROP
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -j DROP

现在是 2022 年,我想我会简要地更新一下。

iptables -A INPUT -p tcp -m tcp -m multiport --dports 80,443 -j ACCEPT
<insert further allowed list here>
iptables -A INPUT -m conntrack -j ACCEPT  --ctstate RELATED,ESTABLISHED
iptables -A INPUT -j DROP
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j DROP
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -j DROP

本次更新承认“-m state”已被弃用。

答案2

# Set the default policy of the INPUT chain to DROP
iptables -P INPUT DROP

# Accept incomming TCP connections from eth0 on port 80 and 443
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT

这应该能满足你的需求

答案3

您可以将默认操作设置为 DROP,然后创建例外规则以允许 80 和 443,如下所示:

# Setting default policies:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Exceptions to default policy
iptables -A INPUT -p tcp --dport 80 -j ACCEPT       # HTTP
iptables -A INPUT -p tcp --dport 443 -j ACCEPT      # HTTPS

iptables 将检查“例外”列表,直到找到匹配项。然后它将执行参数指定的操作-j(在本例中为 ACCEPT)。如果找不到匹配项,它将恢复默认策略并丢弃数据包。

笔记使用此解决方法,任何子域都将被锁定。例如,使用此方法,您可以顺利在 www.mydomain.com 上运行,但您的子域(假设 www.sub.mydomain.com)将因 DNS 错误而无法打开。

相关内容