在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