在RHEL/CentOS7系统中, firewalld防火墙取代了iptables 防火墙。firewalld( Dynamic Firewall
Manager of Linux systems, Linux 系统的动态防火墙管理器)服务是默认的防火墙配置管理工具,它拥
有基于 CLI(命令行界面)和基于 GUI(图形用户界面)的两种管理方式。
相较于传统的防火墙管理配置工具, firewalld 支持动态更新技术并加入了区域( zone)的概念。简单来
说,区域就是 firewalld 预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选
择合适的策略集合,从而实现防火墙策略之间的快速切换。
firewalld 中常见的区域名称(默认为 public)以及相应的策略规则
#区域 #默认策略规则
trusted 允许所有的数据包
home 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、mdns、ipp-client、amba-client与dhcpv6-client服务相关,则允许流量
internal 等同于 home 区域
work 拒绝流入的流量,除非与流出的流量数相关;而如果流量与ssh、ipp-client与dhcpv6-client 服务相关,则允许流量
public 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、dhcpv6-client 服务相关,则允许流量
external 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量
dmz 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量
block 拒绝流入的流量,除非与流出的流量相关
drop 拒绝流入的流量,除非与流出的流量相关
firewalld 配置的防火墙策略默认为运行时( Runtime)模式,又称为当前生效模式,而且随着系统的重启
会失效。如果想让配置策略一直存在,就需要使用永久( Permanent)模式。firewall-cmd 命令中使用的
参数以及作用如下表
参数作用
– – state查看防火墙的状态
– – get-default-zone查看当前的默认区域
– – set-default-zone=设置默认的区域
– – get-zones显示可用的区域
– – get-services显示预先定义的服务
– – get-active-zones显示当前正在使用的区域与网卡名称
– – add-source=将源自此 IP 或子网的流量导向指定的区域
– – remove-source=不再将源自此 IP 或子网的流量导向某个指定区域
– – add-interface=将源自该网卡的所有流量都导向某个指定区域
– – change-interface=将某个网卡与区域进行关联
– – list-all显示当前区域的网卡配置参数、资源、端口以及服务等信息
– – list-all-zones显示所有区域的网卡配置参数、资源、端口以及服务等信息
– – add-service=设置默认区域允许该服务的流量
– – add-port=设置默认区域允许该端口的流量
– – remove-service=设置默认区域不再允许该服务的流量
– – remove-port=设置默认区域不再允许该端口的流量
– – reload重新加载防火墙,中断用户的连接,将临时配置清掉,加载配置文件中的永久配置
– – complete-reload重新加载防火墙,不中断用户的连接(防火墙出严重故障时使用)
– – panic-on开启应急模式(强制关闭所有网络连接,拒绝所有包)
– – panic-off关闭应急模式(取消拒绝状态)
– – query-panic查看应急模式
1,启动并设置自动启动firewalld服务,查看状态
systemctl start firewalld
systemctl enable firewalld
systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2018-10-12 15:18:32 CST; 23s ago
Docs: man:firewalld(1)
Main PID: 12503 (firewalld)
CGroup: /system.slice/firewalld.service
└─12503 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
Oct 12 15:18:31 localhost.localdomain systemd[1]: Starting firewalld - dynamic firewall dae…..
Oct 12 15:18:32 localhost.localdomain systemd[1]: Started firewalld - dynamic firewall daemon.
Hint: Some lines were ellipsized, use -l to show in full.
2,停止、禁用firewalld服务
systemctl stop firewalld
systemctl disable firewalld
3,firewalld基本设置
firewall-cmd --version #查看版本
firewall-cmd --help #查看帮助
firewall-cmd --state #显示状态
firewall-cmd --zone=public --list-ports #查看所有打开的端口
firewall-cmd --reload #更新防火墙规则
firewall-cmd --get-active-zones #查看区域信息
firewall-cmd --get-zone-of-interface=eth0 #查看指定接口所属区域
firewall-cmd --panic-on #拒绝所有包
firewall-cmd --panic-off #取消拒绝状态
firewall-cmd --query-panic #查看是否拒绝
命令示例:
1,查看当前区域
[root@localhost ~]# firewall-cmd --get-default-zone
public
2,查看指定网络接口所在区域
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens192
public
3,查看所有可用区域
[root@localhost ~]# firewall-cmd --get-zones
block dmz drop external home internal public trusted work
4,查看public区域是否允许请求 SSH 和 HTTPS 协议的流量
[root@localhost ~]# firewall-cmd --zone=public --query-service=ssh
yes
[root@localhost ~]# firewall-cmd --zone=public --query-service=https
no
5,把网卡ens192的默认区域修改为 external,并设置为永久生效,然后查看设置
firewall-cmd --permanent --zone=external --change-interface=ens192
firewall-cmd --reload
firewall-cmd --get-zone-of-interface=ens192
6,将默认区域设置为work,并查看
firewall-cmd --set-default-zone=work
firewall-cmd --get-default-zone
7,设置允许https流量,并设置为永久生效
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload
8,设置允许80端口的TCP流量,并设置为永久生效
firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --reload
9,设置HTTP协议的流量设置为永久拒绝,并立即生效
firewall-cmd --permanent --zone=public --remove-services=http
firewall-cmd --reload
10,设置流量转发,将666端口的流量转发到22端口,并设置为永久生效
firewall-cmd --permanent --zone=public --add-forward-port= port=666:proto=tcp:toport=22:toaddr=172.16.600.100
Rich规则:
rich规则比基本的firewalld语法实现更强的功能,不仅实现允许/拒绝,还可以实现日志syslog和auditd,
也可以实现端口转发,伪装和限制速率。firewalld 中的富规则表示更细致、更详细的防火墙策略配置,它可
以针对系统服务、端口号、源地址和目标地址等诸多信息进行更有针对性的策略配置。它的优先级在所有的防
火墙策略中也是最高的。
rich规则实施顺序有以下四点:
a.该区域的端口转发,伪造规则
b.该区域的日志规则
c.该区域的允许规则
d.该区域的拒绝规则
每个匹配的规则都生效,所有规则都不匹配,该区域默认规则生效
Rich rule示例:
1,允许来自IP地址172.16.80.27/16的所有连接
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="ipaddress" accept'
firewall-cmd --reload
2,限制每分钟只有两个连接到ftp服务
firewall-cmd --permanent --zone=public --add-rich-rule='rule service name=ftp limitvalue=2/m accept'
firewall-cmd --reload
3,拒绝来自192.168.10.0/24网段的所有用户访问本机的ssh服务(22端口)
firewall-cmd --permanent --zone=public --add-rich-rule=" rule family="ipv4" source address="192.168.10.0/24" service name="ssh" reject"
firewall-cmd --reload