Iptables:在各个端口规则之前冗余输出 ctstate ESTABLISHED、RELATED 规则

Iptables:在各个端口规则之前冗余输出 ctstate ESTABLISHED、RELATED 规则

Iptables使用静态IP连接到VPSX.X.X.X 并允许VPS更新和安装软件包

*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

问题:为什么有这样的规定

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

不必要?

另外3个输出规则,

-A OUTPUT -o eth0 -p udp --dport 53 -j ACCEPT

-A OUTPUT -o eth0 -p tcp --dport 80 -j ACCEPT

-A OUTPUT -o eth0 -p tcp --dport 443 -j ACCEPT

用于--ctstate ESTABLISHED且仅用于端口53,80,443

RELATED添加后有区别吗ctstate

如果更新仅来自mirrors.linode.com,我可以使用进一步改进规则-s mirrors.linode.com吗?如果hostname ip几个月后发生变化怎么办?

答案1

你不需要这个规则

-A INPUT -i eth0 -p udp --sport 53 -m conntrack --ctstate ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

它们必须替换为单个:

-A INPUT -i eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

说明:需要此规则来接收来自以下连接的流量你的主机已启动。该规则不会申请由以下发起的连接远程主机

Iptables 规则按照您定义的特定顺序应用于数据包

如果数据包进入主机,它们就会放置在 INPUT 链中,并且 iptables 应用 INPUT 规则。让我们通过链转换您的规则:

*filter

-A INPUT -i eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -s 127.0.0.0/8 -j REJECT
-A INPUT -i eth0 -s X.X.X.X -j ACCEPT

-A OUTPUT -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o eth0 -p udp --dport 53 -j ACCEPT
-A OUTPUT -o eth0 -p tcp --dport 80 -j ACCEPT
-A OUTPUT -o eth0 -p tcp --dport 443 -j ACCEPT

-A INPUT -j DROP
-A FORWARD -j DROP
-A OUTPUT -j DROP

COMMIT

我删除了所有评论以减少答案。


回答您的问题。

这条规则

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

当远程主机发起连接时,允许从本地系统到远程主机的所有流量。换句话说:此规则允许您的主机应答远程连接。正常工作需要这条规则。

在其他允许的会话内发起的新连接需要 RELATED。 (例如具有动态端口范围的被动 ftp 连接)。

在 iptables 规则中输入 DNS 名称是个坏主意- 加载 iptables 规则时会发生一次名称解析。还有其他原因...

相关内容