使用 iptables 拒绝所有传入连接?

使用 iptables 拒绝所有传入连接?

我想制定一些简单的 iptables 规则来拒绝所有传入连接并允许传出连接。我该怎么做?

答案1

使用 root 权限尝试此操作:

请注意,这将残忍地切断所有正在运行的连接- 这包括您可能用来管理服务器的 SSH 连接等内容。仅当您有权访问本地控制台时才使用此功能。

请参阅 Miphix 的回答,了解如何为 SSH 添加例外。

# Set default chain policies
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Accept on localhost
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Allow established sessions to receive traffic
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

答案2

如果您通过 SSH 远程工作,您可能需要添加此项(-I将其插入到所有其他规则之前INPUT):

iptables -I INPUT -p tcp --dport 22 -j ACCEPT

如果您的 SSH 服务正在监听另一个端口,则您必须使用该端口而不是22

否则,您可能会意外失去访问权限。

答案3

请注意,其他答案不涵盖 IPv6!如果您的系统接受 IPv6 流量,则没有一条 iptables 规则适用于 ipv6 流量。

我建议不要直接使用 iptables/ip6tables,而是使用 iptables-restore 和 save。这些工具允许指定具有多个规则的 iptables 配置,并使用一个命令轻松加载它。

创建一个文件(我将其命名为 iptables.rules),内容如下:

*filter

# drop forwarded traffic. you only need it of you are running a router
:FORWARD DROP [0:0]

# Accept all outgoing traffic
:OUTPUT ACCEPT [623107326:1392470726908]


# Block all incoming traffic, all protocols (tcp, udp, icmp, ...) everything.
# This is the base rule we can define exceptions from.
:INPUT DROP [11486:513044]

# do not block already running connections (important for outgoing)
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# do not block localhost
-A INPUT -i lo -j ACCEPT

# do not block icmp for ping and network diagnostics. Remove if you do not want this
# note that -p icmp has no effect on ipv6, so we need an extra ipv6 rule
-4 -A INPUT -p icmp -j ACCEPT
-6 -A INPUT -p ipv6-icmp -j ACCEPT

# allow some incoming ports for services that should be public available
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

# commit changes
COMMIT

请注意,如果您想允许 ICMP 和流量到特定端口,我添加了一些额外的示例。

现在你可以用以下命令加载它:

iptables-restore < iptables.rules
ip6tables-restore < iptables.rules

现在您的规则也涵盖了 ipv6 并且易于管理。

Debian 用户需注意:如果您对规则满意,您可以apt install iptables-persistent在重启后恢复规则。规则不会在关机时自动保存,因此请运行netfilter-persistent save以更新持久规则。

答案4

拒绝特定网站:

# iptables -A OUTPUT -p tcp -d www.twitter.com --dport 443 -j DROP
# iptables -A OUTPUT -p tcp -d twitter.com --dport 443 -j DROP
# service iptables save
# service iptables restart
# iptables -L

参考

相关内容