跳转至

firewalld 管理防火墙

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

创建时间: 2022.12.20 21:42:02

更新时间: 2023.07.28 23:08:26

关于firewalld

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

firewalld

服务管理

Bash
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. 默认配置文件位置:/usr/lib/firewalld
  2. 用户配置文件位置:/etc/firewalld
  3. 用户目录结构如下:
    Bash
    /etc/firewalld
    ├── firewalld.conf  # 默认配置文件,默认区域为 public,对应 zones下的 public.xml
    ├── helpers
    ├── icmptypes
    ├── ipsets
    ├── lockdown-whitelist.xml
    ├── services
    └── zones  # 区域规则
        ├── public.xml
        └── public.xml.old
    

firewall-cmd命令管理

提示

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

基本命令

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

Bash
firewall-cmd --reload
查看当前防火墙的状态
Bash
firewall-cmd --state
查看默认zone的设置
Bash
firewall-cmd --list-all

端口管理

查看开放的端口列表

Bash
firewall-cmd --list-ports
新增端口/协议(TCP/UDP)
Bash
firewall-cmd --add-port=8000/tcp
移除端口/协议(TCP/UDP)
Bash
firewall-cmd --remove-port=8000/tcp

协议管理

查看允许的协议列表

Bash
firewall-cmd --list-protocols
允许网络协议
Bash
firewall-cmd --add-protocol=icmp  # 允许ping操作
拒绝网络协议
Bash
firewall-cmd --remove-protocol=icmp  # 拒绝ping操作

IP管理

允许指定IP全部流量

Bash
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.1.10" accept"
允许指定IP访问指定端口
Bash
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.1.10" port protocol="tcp" port="22" accept"
允许指定IP访问指定服务
Bash
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访问特定服务或端口

应急操作

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

Bash
firewall-cmd --panic-on
取消应急模式,重启firewalld服务后方可再次远程ssh连接
Bash
firewall-cmd --panic-off
查看当前是否为应急模式
Bash
firewall-cmd --query-panic

参考

  1. CentOS 7 中firewall-cmd命令 - 简书
  2. Centos7 防火墙 firewalld 实用操作 - 晓晨Master - 博客园