Iptables:使用 Iptables 将所有流量限制到一个静态 IP 和环回,从而保护 Linux 系统的安全

Iptables:使用 Iptables 将所有流量限制到一个静态 IP 和环回,从而保护 Linux 系统的安全

我有一个静态 IP(在我的家庭电脑上),使用以下规则是否足以保护远程服务器供我自己使用(从我的家庭、静态 IP 到远程服务器)?

# Allow all loopback (lo0) traffic and reject traffic
# to localhost that does not originate from lo0.
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -s 127.0.0.0/8 -j REJECT

#Allow traffic from address $STATIC_IP
-A INPUT -s $STATIC_IP -j ACCEPT
-A OUTPUT -d $STATIC_IP -j ACCEPT

#Reject everything else
-A INPUT -j REJECT
-A FORWARD -j REJECT
-A OUTPUT -j REJECT

COMMIT

编辑:这是我最后的 Iptables叶戈尔·瓦西里耶夫回答

正常使用的iptables(没有 dns,没有 https,没有 http 到外部 ip,仅到我的静态 ip XXXX)

# Allow all loopback (lo0) traffic and reject traffic
# to localhost that does not originate from lo0.
-A INPUT -i lo -j ACCEPT
-A OUTPUT -i lo -j ACCEPT

#Allow traffic from address X.X.X.X
-A INPUT -s X.X.X.X -j ACCEPT
-A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

#Reject everything else
-A INPUT -j REJECT
-A FORWARD -j REJECT
-A OUTPUT -j REJECT

COMMIT

编辑:添加了允许 DNS、HTTP、HTTPS 的规则(从发行版镜像下载新包以及将主机名解析为 IP 所需)

请注意环回的附加规则,以防止欺骗(请参阅讨论以下)

-A INPUT ! -i lo -s 127.0.0.0/8 -j REJECT

用于更新和安装软件包的 Iptables 规则

*filter

#Allow all loopback (lo0) traffic and reject traffic
#to localhost that does not originate from lo0.
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -s 127.0.0.0/8 -j REJECT
-A OUTPUT -o lo -j ACCEPT

#Allow traffic from address X.X.X.X
-A INPUT -i eth0 -s X.X.X.X -j ACCEPT
-A OUTPUT -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

#Allow DNS
-A OUTPUT -o eth0 -p udp --dport 53 -j ACCEPT
-A INPUT -i eth0 -p udp --sport 53 -m conntrack --ctstate ESTABLISHED -j ACCEPT

#Allow HTTP
-A OUTPUT -o eth0 -p tcp --dport 80 -j ACCEPT
-A INPUT -i eth0 -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT

#Allow HTTPS
-A OUTPUT -o eth0 -p tcp --dport 443 -j ACCEPT
-A INPUT -i eth0 -p tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

#Reject everything else
-A INPUT -j DROP
-A FORWARD -j DROP
-A OUTPUT -j DROP

COMMIT

目前,我的解决方案是在这 2 个规则之间交替使用,使用第一个规则进行正常使用,并更改为第二个规则(使用 DNS、HTTP 和 HTTPS)来更新和安装软件包。

答案1

这是服务器规则吗?如果是的话:

你不需要这个规则

-A INPUT ! -i lo -s 127.0.0.0/8 -j REJECT

该规则是反欺骗保护。您只允许流量您的电脑,如果您信任您的电脑,则不需要此规则

需要环回地址的应用程序将无法正常工作

您对所有人都有默认策略REJECT,并且没有允许OUTPUT环回流量的规则。将此规则添加到您的脚本中:

-A OUTPUT -i lo -j ACCEPT

您的服务器可以将任何流量发送到您的电脑

如果这是您所需要的,那么您的规则就是正确的。如果仅有的您的电脑需要启动数据交换,您的规则不正确。

替换这条规则:

-A OUTPUT -d $STATIC_IP -j ACCEPT

对此:

-A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

答案2

这限制服务器仅接收其发送的流量,并且仅向其自身发送流量。使用此规则集,即使您自己使用,您也无法从其他任何地方访问该服务器。虽然这可以保护服务器,但也会使其无法使用,因此您可能不想这样做。

相关内容