我在静态 IP 上设置了专用网络,并配置了路由器,192.168.1.1
将端口 XX 转发到本地服务器上的端口 22,以允许 ssh 访问。我可以使用此配置顺利进行 ssh 访问,但后来我开始思考 - 为什么允许我这样做?我对防火墙还不太熟悉,但我发现我可以输入sudo firewall-cmd --list-all-zones
,以便查看我在每个区域中打开的各种端口和服务。
然而,令我沮丧的是,即使从所有区域删除了 ssh 服务并完全删除了端口 22,我仍然可以通过键入 通过互联网 ssh 到我的本地服务器。ssh -p XX [email protected]
我尝试在谷歌上搜索“如何使用firewalld完全禁用ssh访问”,但所有结果都是指阻止服务除了一个或几个特定 IP。为了测试我的网络的安全性,我希望能够完全禁止 ssh 访问我的服务器。但是,鉴于端口 22 和 ssh 服务完全不在我的防火墙配置中,防火墙怎么会不工作呢?为什么我仍然能够 ssh 访问?
编辑:这是我输入时的输出sudo firewall-cmd --list-all-zones
:
block
target: %%REJECT%%
icmp-block-inversion: no
interfaces:
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
dmz
target: default
icmp-block-inversion: no
interfaces:
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
drop
target: DROP
icmp-block-inversion: no
interfaces:
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
external
target: default
icmp-block-inversion: no
interfaces:
sources:
services:
ports:
protocols:
masquerade: yes
forward-ports:
source-ports:
icmp-blocks:
rich rules:
home
target: default
icmp-block-inversion: no
interfaces:
sources:
services: mdns samba-client dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
internal
target: default
icmp-block-inversion: no
interfaces:
sources:
services: mdns samba-client dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s25 wlp3s0
sources:
services:
ports: 8545/tcp 5001/tcp 33/tcp
protocols: tcp udp
masquerade: no
forward-ports:
source-ports: 5001/tcp
icmp-blocks:
rich rules:
trusted
target: ACCEPT
icmp-block-inversion: no
interfaces:
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
work
target: default
icmp-block-inversion: no
interfaces:
sources:
services: dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
如您所见,该ssh
服务在我的任何区域中都不可用。但它却运行良好。我假设有人假设端口 22 默认是开放的,即使它没有明确说明?还是我遗漏了什么?
-保罗
答案1
通常“用户友好”的工具(例如firewalld
/firewall-cmd
和)也ufw
只会显示由该工具创建和管理的规则集。
这些工具通常不会显示直接插入到正在运行的防火墙配置中的附加规则,无论是通过iptables
直接运行命令(iptables-restore
在启动时使用或从脚本或手动使用iptables
),还是由其他工具生成的规则(例如,docker 可以发布端口,fail2ban 将添加规则来阻止端口)。
iptables-save
通常,您可以通过使用或 使用iptables -L -v -n
以及来转储完整规则集来发现此类情况iptables -L -v -n -t nat
。
例如,使用firewalld,我通常会期望 ssh 的端口由firewalld 管理,例如在IN_public_allow
链中,因此链中端口 22 的规则INPUT
将是一个危险信号。
答案2
我最终通过使用ufw
而不是获得了预期的行为firewalld
。运行时sudo systemctl stop firewalld && sudo ufw enable && sudo reboot
,我无法再通过 ssh 进入该计算机。但是,运行 之后sudo ufw allow ssh
,它又开始正常工作,正如预期的那样。