Skip to content

firewall ​

了解firewall的zone和port的概念

firewall基本操作 ​

  • 查看是否运行
bash
firewall-cmd --state

firewall 预定了9个区域 ​

public(公共区域)	默认只允许ssh、dhcp协议数据包传入
home(家庭区域)	默认只允许ssh、dhcp、samba、mdns协议数据包传入
work(工作区域)	默认只允许ssh、dhcp协议数据包传入
internal(内部区域)	默认只允许ssh、dhcp、samba、mdns协议数据包传入
external(外部区域)	默认只允许ssh协议数据包传入,传出数据包会做地址伪装转换(MASQUERADE)
dmz(隔离区域也称为非军事区域)	非军事区域,默认只允许ssh协议数据包传入
trusted(信任区域)	允许所有的传入流量
block(限制区域)	拒绝所有,有响应消息
drop(丢弃区域)	丢弃所有,无响应消息

firewall zone ​

区域对 firewall 很重要, 如果该区域没有被激活, 则无法生效

下面命令时获取当前已经激活的区域

bash
firewall-cmd --get-active-zones

查看当前使用的默认区域

bash
firewall-cmd --get-default-zone

删除 docker1 的区域

bash
firewall-cmd --delete-zone=docker1 --permanent

firewall port ​

查看暴露端口

bash
firewall-cmd --zone=public --list-ports

增加规则, --permanent 参数可以使得该命令重启后依然生效

bash
firewall-cmd --add-port=3000/tcp --zone=public --permanent

删除规则

bash
firewall-cmd --remove-port=3000/tcp --zone=public --permanent

重载服务, 修改规则后 reload 操作

bash
firewall-cmd --reload

firewall service ​

列出开放服务,开放服务相当于默认了端口,不必要重新在port中增加端口开放

bash
firewall-cmd --list-services

添加服务http服务,暴露80端口

bash
firewall-cmd --zone=public --add-service=http --permanent

删除http服务

bash
firewall-cmd --zone=public --remove-service=http --permanent

记得最后都要执行 firewall-cmd --reload

查看完整区域配置 ​

bash
firewall-cmd --zone=public --list-all

firewall 常见问题 ​

  • Failed to start firewalld - dynamic firewall daemon.
bash
# 尝试kill掉 process 再启动
systemctl stop firewalld
pkill -f firewalld
systemctl start firewalld