跑步时
[root@host ~]# firewall-cmd --get-active-zones
[root@host ~]#
[root@host ~]# firewall-cmd --get-default-zone
public
Run Code Online (Sandbox Code Playgroud)
我没有得到任何活动区域。如何激活区域?
我正在尝试使用 FirewallD 来限制网络上其他机器对 CentOS 服务器的访问。它有一个单一的网络接口,并且在公共区域中运行。假设此服务器的 IP 地址为 10.10.1.20。
我想要做的是只允许 IP 地址为 10.10.1.125 和 10.10.1.126 的机器能够连接(ssh 和 https)到该服务器。其他任何 ip 地址都不应该能够连接到该服务器(甚至知道它存在)。
我尝试使用 FirewallD 的丰富规则如下(10.10.1.20)
sudo firewall-cmd --add-rich-rule 'rule family="ipv4" source address="10.10.1.0/24" drop'
sudo firewall-cmd --add-rich-rule 'rule family="ipv4" source address="10.10.1.125" accept'
sudo firewall-cmd --add-rich-rule 'rule family="ipv4" source address="10.10.1.126" accept'
Run Code Online (Sandbox Code Playgroud)
但它似乎不起作用。我无法从 10.10.1.125 或 10.10.1.126 建立到 10.10.1.20 的 ssh 连接。
我尝试以相反的顺序输入规则,但它仍然不起作用。
有人可以帮我吗?在应用我上面写的规则之前,我是否需要将区域从公共区域更改为更严格的区域,例如 drop ?
我在这台机器上安装了 Fedora,它完全是一个网关/防火墙系统。
安装后,我运行了 ' yum upgrade
',所以它应该是最新的 Fedora 21 - 我故意有点落后(不是 Fedora 22),所以任何问题都有望得到解决(现在意识到可能我应该有去 Fedora 20 了吗?!)...
一启动,我就用它们各自的 IP 地址配置了盒子中的两个 NIC,重新启动,确认它们没问题,然后开始“防火墙”设置。首先,我跑了:
# firewall-cmd --list-all-zones
Run Code Online (Sandbox Code Playgroud)
我确认 firewalld 使用的接口名称与其他工具一致(与 Fedora 的过去版本不同,例如 19 - 请参阅请求的 FC19 FirewallD 调试帮助:端口不转发)
为了将接口放入正确的区域,我然后运行:
firewall-cmd --permanent --zone=external --change-interface=enp2s0
firewall-cmd --permanent --zone=internal --change-interface=enp5s4
Run Code Online (Sandbox Code Playgroud)
..然后继续尝试设置端口转发等。有几个步骤,例如打开端口,然后转发它。然而,这些都没有奏效。经过一番挖掘,我找到了这篇文章,日期仅在几天前,所以我认为它是最新的 - http://www.certdepot.net/rhel7-get-started-firewalld/ - 并按照其建议进行编辑/etc/sysctl.conf
和添加一行阅读net.ipv4.ip_forward=1
并用 激活它# sysctl -p
,然而,不幸的是,事情实际上“倒退了”......
以前,尝试与转发端口的连接挂起,但现在它们正在返回:
ssh: connect to host 167.101.97.2 port 6543: No route to host
Run Code Online (Sandbox Code Playgroud)
所以,我试图通过取消端口转发和对 sysctl.conf 的编辑来恢复正常,但事情并没有回到“原始”!
令人难以置信的是,我重新启动了,一切都设置为默认值,只是尽可能地安装条件 - 除了那些区域更改;他们会造成什么伤害?!但是当系统恢复时,接口已经回到默认区域!
然后我又重新尝试了一遍。不!无论我做什么,重新启动后接口都停留在“FedoraServer”区域。我已经在命令行中的几个不同位置尝试了 --permanent 。每次响应都是“成功”,然而,每次结果都是它在重新启动后无法生存,即使这是重新启动之间在系统上所做的唯一事情。 …
正如我在该主题的评论中所问的那样:使用 firewalld 阻止除少数 ips 之外的所有 ips
我正在寻找一种方法来拒绝所有公共 IP,但我在 firewalld 的公共区域中除外。
目前,我的公共区域只有 ssh/http/https 服务,并且我指定了整个互联网所需的源 IP。
问题是我不明白为什么 firewalld 没有按要求过滤源 IP?
通常,根据我的理解,将源 IP 指定给区域,要求 Firewalld 丢弃除来自指定 IP 的请求之外的所有请求。
但是在我的机器上它不起作用,因为我可以在家中连接到不是指定源 IP 之一的机器。
有人建议创建一个名为“内部/其他”的新区域,因为服务器不在私有局域网上,所以我只有一个公共接口,所以我为什么要创建/使用另一个区域,因为公共区域应该删除所有 IP来源清单上指定的除外。
Firewalld 公共区域是否会自动向世界开放添加在其上的服务?
如果我创建第二个名为 internal 的区域,只有 ssh 服务和源 IP,然后将此区域链接到我的 eth0,firewalld 会阻止所有非“源”IP 吗?
当然,执行这样的过程会假设我从公共区域服务的服务中删除 ssh 服务。
我的防火墙是:
[root@groot ~]# firewall-cmd --list-all-zones
block
interfaces:
sources:
services:
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
dmz
interfaces:
sources:
services: ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
drop (default)
interfaces:
sources:
services:
ports:
masquerade: …
Run Code Online (Sandbox Code Playgroud) 我正在尝试用 3 台机器配置一个简单的测试环境:
环境的一个小表示:
|Kali|------------------(ens160) |Firewalld| (ens192)------------------- |Web Server|
10.99.0.2 10.99.0.1 | 10.4.1.1 10.4.1.2
Run Code Online (Sandbox Code Playgroud)
我可以从 10.99.0.2 ping 10.4.1.2,但是,只有当防火墙激活时,我无法从 10.99.0.2 获取 10.4.1.2 上的默认网页。
我尝试在固件上执行 tcpdump,我可以看到从 kali 到firewalld 的 http 请求,但随后firewalld 用 ICMP 数据包进行响应:ICMP host 10.4.1.2 unreachable - admin prohibited
。据我所知,如果请求被阻止,则此 icmp 消息是从防火墙发送的。
这是两个区域的配置:public 和 dmz
public (active)
target: default
icmp-block-inversion: no
interfaces: ens160
sources:
services: http https
ports: 443/tcp 80/tcp
protocols:
masquerade: yes
forward-ports:
sourceports: …
Run Code Online (Sandbox Code Playgroud)