我正在尝试使用 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
是用于允许的所有其他访问的生产接口。
我希望这是有意义的,并欢迎任何意见或建议。
干杯,
缺口