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

use*_*169 20 linux android port iptables blocking

阻止所有端口(进出)很容易,但“除了”这个词很难。我不知道任何满足条件的规则。

PS:我知道这个问题并不新鲜。但事实上,我没有发现任何帮助。所以,请帮帮我!

cyb*_*ard 30

首先!是 NOT 符号。

iptables -A INPUT -p tcp -m tcp -m multiport ! --dports 80,443 -j DROP
Run Code Online (Sandbox Code Playgroud)

其次,你写的规则可能没有预期的结果。您丢弃了所有内容,包括对端口 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
Run Code Online (Sandbox Code Playgroud)

  • @MohammadShahid 规则不是自动永久的,重新启动它就会消失,您可以登录。如果要保持 ssh 连接,则需要将 22 添加到端口列表中。 (3认同)
  • 如果使用 Bash shell,难道不应该像这样转义 `!` 吗? (2认同)
  • @cybernard,是的,你说得对。普通的`!` 不需要转义。对误报感到抱歉。 (2认同)

Faz*_*r87 6

# 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
Run Code Online (Sandbox Code Playgroud)

这应该给你你需要的

  • 请记住,如果您通过 SSH 连接,则应打开 TCP 端口 22 (6认同)