在CentOS 7上,使用firewall-cmd相关命令管理网络防火墙规则。


firewalld是CentOS 7起自带的防火墙管理工具,相比于iptables防火墙工具,frewalld可以动态修改单条规则后刷新单个规则集使之生效,而iptables则需要全部刷新。另一方面,firewalld默认拒绝,而iptables则默认允许。最后,firewalld和iptables本质上都是防火墙规则管理工具,真正根据规则建立防火墙的是内核组件netfilter

1 firewalld

1.1 服务管理

1
2
3
4
5
6
7
8
yum install firewalld -y             # 安装firewalld

systemctl start firewalld.service    # 开启防火墙
systemctl status firewalld.service   # 查看防火墙状态
systemctl stop firewalld.service     # 关闭防火墙
systemctl restart firewalld.service  # 重启防火墙
systemctl enable firewalld.service   # 开启开机自启动
systemctl disable firewalld.service  # 关闭开机自启动

1.2 配置管理

  1. 默认配置文件位置:/usr/lib/firewalld
  2. 用户配置文件位置:/etc/firewalld
  3. 用户目录结构如下:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
/etc/firewalld
├── firewalld.conf  # 默认配置文件,默认区域为 public,对应 zones下的 public.xml
├── helpers
├── icmptypes
├── ipsets
├── lockdown-whitelist.xml
├── services
└── zones  # 区域规则
    ├── public.xml
    └── public.xml.old

2 firewall-cmd命令管理

注意

  1. 下面 2.2-2.4 小节的命令加上--permanent参数表示永久有效,否则重启后失效
  2. 如果要指定特定zone,加上--zone=public类似的参数即可
  3. 示例,永久生效开放8000-8010端口的TCP协议连接:
1
firewall-cmd --permanent --zone=public --add-port=8000-8010/tcp

2.1 基本命令

重新载入修改后的防火墙规则:

1
firewall-cmd --reload

查看当前防火墙的状态:

1
firewall-cmd --state

查看默认zone的设置:

1
firewall-cmd --list-all

2.2 端口管理

查看开放的端口列表:

1
firewall-cmd --list-ports

新增端口/协议(TCP/UDP):

1
firewall-cmd --add-port=8000/TCP

移除端口/协议(TCP/UDP):

1
firewall-cmd --remove-port=8000/TCP

2.3 协议管理

查看允许的协议列表:

1
firewall-cmd --list-protocols

允许网络协议:

1
firewall-cmd --add-protocol=icmp  # 允许ping操作

拒绝网络协议:

1
firewall-cmd --remove-protocol=icmp  # 拒绝ping操作

2.4 IP管理

允许指定IP全部流量:

1
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.1.10" accept"

允许指定IP访问指定端口:

1
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.1.10" port protocol="tcp" port="22" accept"

允许指定IP访问指定服务:

1
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.1.10" service name="ssh" accept"

注意:

  1. 将上述命令的accept改为reject,即可拒绝特定IP
  2. 将上述命令的source address设置为形如192.168.1.10/30,即表示允许此网段IP访问特定服务或端口

2.5 应急操作

打开应急模式,拒绝所有流量接入本机,远程连接也会断开,仅能本地登录服务器:

1
firewall-cmd --panic-on

取消应急模式,重启firewalld服务后方可再次远程ssh连接:

1
firewall-cmd --panic-off

查看当前是否为应急模式:

1
firewall-cmd --query-panic

参考资料

  1. Centos7 防火墙 firewalld 实用操作: https://www.cnblogs.com/stulzq/p/9808504.html
  2. CentOS 7 中firewall-cmd命令:https://www.jianshu.com/p/411274f96492