Firewalld:仅允许来自特定 IP 的 ICMP 和 SSH

Firewalld:仅允许来自特定 IP 的 ICMP 和 SSH

我正在尝试使用 Firewalld 来限制对 Linux 服务器的访问

环境

  • Linux 服务器有一个网络接口:ens160

要求

  • 它应仅允许具有 IP 地址的机器192.168.3.0/24使用 SSH 和 ICMP 访问此 Linux 服务器
  • 任何其他 IP 地址或服务都不应能够访问此 Linux 服务器

已完成配置

sudo firewall-cmd --set-default-zone=internal
sudo firewall-cmd --zone=internal --add-interface=ens160 –permanent
sudo firewall-cmd --permanent --zone=internal --add-rich-rule='rule family="ipv4" \
    source address="192.168.3.0/24" service name="ssh" accept'
sudo firewall-cmd --zone=internal --add-icmp-block={echo-request,echo-reply} \
    --permanent
sudo firewall-cmd --permanent --zone=internal --add-rich-rule='rule family="ipv4" \
    source address="192.168.3.0/24" icmp-type name="echo-request" accept'
sudo firewall-cmd --permanent --zone=internal --add-rich-rule='rule family="ipv4" \
    source address="192.168.3.0/24" icmp-type name="echo-reply" accept'

配置状态

user@server:~$ sudo firewall-cmd --list-all

internal (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens160
  sources:
  services:
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks: echo-reply echo-request
  rich rules:
        rule family="ipv4" source address="192.168.3.0/24" service name="ssh" accept
        rule family="ipv4" source address="192.168.3.0/24" icmp-type name="echo-request" accept
        rule family="ipv4" source address="192.168.3.0/24" icmp-type name="echo-reply" accept

验证结果

它适用于 SSH:

  • 以外的IP地址192.168.3.0/24无法使用SSH连接Linux服务器。

它似乎不适用于 ICMP:

  • IP 地址 192.168.3.0/24 无法 ping 通 Linux 服务器

我知道问题可能出在“ icmp-blocks: echo-reply echo-request”上,它阻止了所有 ICMP 流量,以及两个 icmp rich 规则。我在 Google 上搜索了很多,但就是找不到正确的解决方案。

有人能帮我吗?非常感谢。

答案1

我意识到这是一篇旧帖子,但我正在经历自己的防火墙学习曲线,并认为这可能会对偶然发现这个问题的其他人有所帮助。

我发现 OP 原始帖子中的命令很有用,我认为它不起作用的原因可能是因为icmp-block-inversion仍然设置为no,也可能--reload没有完成,以下命令应该可以解决这个问题:

$ sudo firewall-cmd --permanent --zone=internal --add-icmp-block-inversion

$ sudo firewall-cmd --reload

我对以下评论感到好奇:“丰富的规则并不是实现这一目标的好方法......“, 为什么?

我的具体要求是阻止所有主机使用ping,是的,我知道这不会增加多少安全性,但你试着告诉安全 PM,唉。但是,我发现当 Oracle 服务器尝试启动备份时,NetBackup 服务器ping出于某种原因使用,并且备份失败,因为它被阻止了。所以我对区域进行了以下更改,这些更改似乎有效(.0.50 地址是 NB 服务器):

$ sudo firewall-cmd --permanent --zone=internal --add-icmp-block-inversion

$ sudo firewall-cmd --permanent --zone=internal --add-rich-rule='family="ipv4" source address="192.168.0.50/32" icmp-type name="echo-request" accept'

$ sudo firewall-cmd --permanent --zone=internal --add-rich-rule='family="ipv4" source address="192.168.0.50/32" icmp-type name="echo-reply" accept'

$ sudo firewall-cmd --reload

我是不是搞错了方向,因为评论中关于丰富规则的链接似乎暗示仅为 NetBackup 服务器设置一个唯一的区域,但它尝试的接口ping是用于允许的所有其他访问的生产接口。

我希望这是有意义的,并欢迎任何意见或建议。

干杯,

缺口

相关内容