CentOS7 Firewalld
FirewallD (firewall daemon) 作为 iptables 服务的替代品,已经默认被安装到了 CentOS7 上面。
管理
服务启动/停止
启动服务并设置自启动:
sudo systemctl start firewalld |
停止服务并禁用自启动:
sudo systemctl stop firewalld |
检查运行状态
sudo firewall-cmd --state |
服务重启
有两种办法可以重启 FirewallD:
- 重启 FirewallD 服务
sudo systemctl restart firewalld |
- 重载配置文件(不断开现有会话与连接)
sudo firewall-cmd --reload |
建议使用第二种方法。
配置
FirewallD 使用两个配置集:「运行时配置集」以及「持久配置集」。
- 在 FirewallD 运行时:
- 对运行时配置的更改会即时生效
- 对持久配置集的更改不会被应用到本次运行中
- 在 FirewallD 重启(如系统重启或服务重启)或重载配置时:
- 运行时配置集的更改不会被保留
- 持久配置集的更改会作为新的运行时配置而应用
默认情况下,使用 firewall-cmd
命令对防火墙做出的更改都将作用于运行时配置集,但如果添加了 permanent
参数则可以将改动持久化。如果要将规则同时添加到两个配置集中,有两种方法:
- 将规则同时添加到两个配置集中
sudo firewall-cmd --zone=public --add-service=http --permanent |
- 将规则添加到持久配置集中,并重载
sudo firewall-cmd --zone=public --add-service=http --permanent |
区域
区域(Zone)是 FirewallD 的核心特性,其它所有特性都与 Zone 相关,Zone 可以理解为场景、位置等,我们可以给不同的 Zone 定义不同的规则集。
FirewallD 的默认配置中预定义了几个 Zone,按照可信度作升序排序依次为:drop
-> block
-> public
-> external
-> dmz
-> work
-> home
-> internal
-> trusted
,其中 public
是默认值。
相关指令:
# list all zones |
端口
使用 --add-port
参数来打开一个端口以及指定它的协议,zone 如果不指定的话则为当前的默认值。例如,通过以下命令来允许 HTTP 以及 HTTPS 协议的网络流量进入:
sudo firewall-cmd --zone=public --permanent --add-port=80/tcp --add-port=443 |
通过 info 指令可以查看刚才添加的端口:
sudo firewall-cmd --info-zone public |
使用 --remove-port
参数来阻止或关闭一个端口:
sudo firewall-cmd --zone=public --permanent --remove-port=80/tcp --remove-port=443/tcp |
服务
使用 --add-service
以及 --remove-service
来启用、禁用服务。
# enable |
端口转发
# 启用 ip masquerade |