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