使用 iptables 将 ICMP 流量列入白名单

使用 iptables 将 ICMP 流量列入白名单

我正在为 Ubuntu Server VPS 配置 iptables。它运行 sshd 和各种 Dockerised Web 应用程序。它不是路由器,也不是复杂网络的一部分。

在研究了这个主题之后,我决定尊重 ICMP。

但是,我使用白名单,并且只使用ACCEPT特定的流量:

:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
# ...then ACCEPT specific incoming traffic

那么 ICMP 呢?我可以列出REJECT几种类型,并将其余类型列入白名单:

-A INPUT -p icmp -m icmp --icmp-type redirect -j REJECT
-A INPUT -p icmp -j ACCEPT

但这会破坏白名单...所以我想反过来做。

大多数 ICMPv4 类型已被弃用。因此创建白名单很容易,我只需要指导。

主要类型包括iptables -p icmp -h

 0  =  echo-reply (pong)        # indirectly accepted by ESTABLISHED,RELATED rule
 3  =  destination-unreachable  # `ACCEPT`, especially code 4
 4  =  source-quench
 5  =  redirect
 8  =  echo-request (ping)      # `ACCEPT`
 9  =  router-advertisement
10  =  router-solicitation
11  =  time-exceeded            # indirectly accepted by ESTABLISHED,RELATED rule
12  =  parameter-problem        # `ACCEPT`
13  =  timestamp
14  =  timestamp reply
17  =  address-mask-request
18  =  address-mask-reply
...    many more

我会做什么:

  • 类型 3、8、12:必须ACCEPT
  • 类型 0, 11:ACCEPT根据单独ESTABLISHED,RELATED规则自动
  • 其他类型:默认策略将REJECT(而不是DROP),并带有消息--reject-with icmp-proto-unreachable

我还应该选择哪些类型ACCEPT(我是否接受了不应该接受的类型或代码?)


更新 1

不,这不是重复的。它是关于将重要的传入 ICMP 流量列入白名单,并拒绝其余流量。

也许正如@poige 的评论所说,我的列表中的某些项目是不必要的,因为它们是响应(如 echo-r​​eply)。这是我的问题的一部分,请告诉我应该将哪些内容放入白名单。如果已经包含在白名单中,ESTABLISHED,RELATED请建议我将其从白名单中删除。


更新2

为了避免与@poige 发生更多不必要的冲突,问题简单如下:

“我使用白名单方法 - 因此默认情况下所有内容都会被丢弃。但我不想丢弃 icmp 流量。因此,我希望得到有关将哪些内容放入白名单的建议。”

答案1

我想知道哪些 ICMP 类型应该列入白名单,并列出了一些示例 -但白名单对于 icmp 来说并不理想

此规则通常在开始时添加:

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

这涵盖了大多数(所有?)现代/非弃用的 ICMPv4 类型,因为它们是对本地服务器发起的连接做出的响应。这是我没有意识到的部分,所以我的问题不是要将什么添加到白名单,而是要删除什么(几乎所有东西)。

有一个例外,echo-request它不是由本地服务器发起的。

因此我仍然使用白名单(默认丢弃,并接受特定流量),除了 ICMP 部分(拒绝某些类型,并接受其余类型):

*filter

# default drop (so can create a whitelist)
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]

# this automatically accepts all icmpv4 types other than echo-request
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# accept specific traffic...

# icmp: reject redirects and accept the rest (basically a blacklist)
-A INPUT -p icmp -m icmp --icmp-type redirect -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p icmp -j ACCEPT

# accept specific traffic...

COMMIT

相关内容