firewalld

firewalld介绍

firewalld是一个可以配置和监控系统防火墙规则的守护进程。涵盖了iptables, ip6tables和ebtables的设置。

firewalld特点

  • 实现了动态防火墙功能
  • 可以通过DBus消息系统与 firewalld通信,以请求打开网络端口从而动态管理防火墙规则
  • 使用XML文件存储防火墙规则,实现配置持久化。

firewalld安装

一般安装完CentOS7 Linux系统以后,默认自带firewalld防火墙服务。如果没有,请执行以下命令安装:

# yum -y install   firewalld
# systemctl  start firewalld
# systemctl enable  firewalld

firewalld预定义区域说明

区域

说明

trusted

允许所有传入流量

public

除非与传出流量相关或与ssh等预定义服务匹配,否则拒绝传入流量。新网络接口的默认区域

work

除非与传出流量相关或与ssh等预定义服务匹配,否则拒绝传入流量.

home

除非与传出流量相关或与ssh,samba-client等预定义服务匹配,否则拒绝传入流量

internel

初始状态与home区域相同

external

除非与传出流量相关或与ssh预定义服务匹配,否则拒绝传入流量。通过此区域转发的IPV4传出流量将进行伪装,使其看起来是来自传出网络接口的IPv4地址而不是主机的源IP

dmz

除非与传出流量相关或与ssh预定义服务匹配,否则拒绝传入流量

block

除非与传出流量相关,否则拒绝所有传入流量

drop

除非与传出流量相关,否则丢弃所有传入流量

firewalld配置方法

  • 使用图形工具firewall-config
  • 使用命令行工具firewalld-cmd
  • 直接编辑/etc/firewalld/目录中的配置文件

firewall-cmd命令

  1. 检查firewalld服务是否正在运行
# systemctl  status firewalld  | grep 'Active:'
# firewall-cmd  --state
  1. 获取预定义信息

firewall-cmd预定义信息包括可用的区,可用的服务名,可用的ICMP阻塞类型。

firewall-cmd命令显示预定义信息的选项说明

选项

说明

--get-zones

显示预定义的区域

--get-services

显示预定义的服务

--get-icmptypes

显示预定义的ICMP阻塞类型

配置文件在/etc/firewalld/{zones,services,icmptypes}目录下生成相应的XML配置文件自定义自己的区域,服务,ICMP阻塞类型。

使用firewall-cmd命令显示预定义信息

  • 显示预定义区
# firewall-cmd   --get-zones
  • 显示预定义的服务
# firewall-cmd  --get-services
  • 显示预定义的ICMP类型
# firewall-cmd  --get-icmptypes  | fmt -5
  1. 区域管理

使用firewall-cmd命令获取和管理区域, 为指定区域绑定网络接口等.
firewall-cmd命令区域管理选项说明

选项

说明

--get-default-zone

显示网络连接或接口的默认区域

--set-default-zone=<zone>

设置网络连接或接口的默认区域

--get-active-zones

显示已激活的所有区域

--get-zone-of-interface=<interface>

显示指定接口绑定的区域

--zone=<zone> --add-interface=<interface>

为指定的区域绑定网络接口

--zone=<zone> --change-interface=<interface>

为指定的区域更改绑定的网络接口

--zone=<zone> --remove-interface=<interface>

为指定的区域解除绑定的网络接口

--list-all-zones

显示所有的区域及其规则

[--zone=<zone>] --list-all

显示指定区域的所有规则,省略时--zone=<zone>时表示对默认区域操作

  • 显示默认区域
# firewall-cmd  --get-default-zone
  • 显示默认区域的所有规则
# firewall-cmd  --list-all
  • 显示网络接口ens33对应的区域
# firewall-cmd  --get-zone-of-interface=ens33
  • 更改网络接口ens33对应的区域
# firewall-cmd  --zone=internal  --change-interface=ens33
# firewall-cmd  --zone=internal  --list-interfaces
# firewall-cmd  --get-zone-of-interface=ens33
  • 显示已激活的所有区域
# firewall-cmd --get-active-zones
  1. 管理区域中的服务
  • 对于每个区,可以配置允许访问的服务.
  • 对于预定义的服务firewall-cmd --get-services, 可以使用服务名或端口号配置。
  • 对于非预定义的服务只能使用端口号配置。

firewall-cmd命令区域中服务管理的选项说明

选项

说明

[--zone=<zone>] --list-services

显示指定区域内允许访问的所有服务

[--zone=<zone>] --add-service=<service>

为指定区域设置允许访问的某项服务

[--zone=<zone>] --remove-service=<service>

删除指定区域已设置的允许访问的某项服务

[--zone=<zone>] --list-ports

显示指定区域内允许访问的所有端口号

[--zone=<zone>] --add-port=<portid>[-<portid>]/<protocol>

为指定区域设置允许访问的某个/某段端口号(包括协议名)

[--zone=<zone>] --remove-port=<portid>[-<portid>]/<protocol>

删除指定区域已设置的允许访问的端口号(包括协议名)

[--zone=<zone>] --list-icmp-blocks

显示指定区域内拒绝访问的所有ICMP类型

[--zone=<zone>] --add-icmp-block=<icmptype>

为指定区域设置拒绝访问的某项ICMP类型

[--zone=<zone>] --remove-icmp-block=<icmptype>

删除指定区域已设置的拒绝访问的某项ICMP类型

省略--zone=<zone>时表示对默认区域进行操作

  1. 为默认区域设置允许访问的服务或端口号
# firewall-cmd  --list-services
# firewall-cmd --add-service=http
  1. 为internal区域设置允许访问的服务或端口号
# firewall-cmd  --zone=internal  --add-service=mysql
# firewall-cmd  --zone=internal  --remove-service=samba-client
# firewall-cmd  --zone=internal --list-services
# firewall-cmd  --zone=internal --add-port=8080/tcp
# firewall-cmd  --zone=internal --list-ports
  1. 为默认区域设置禁止访问的ICMP类型
# firewall-cmd  --add-icmp-block=source-quench
# firewall-cmd --list-icmp-blocks
  1. IP伪装与端口转发
  • firewalld支持SNAT和DNAT配置。
  • 可以使用firewall-cmd方便地配置IP伪装(一种SNAT)和端口转发(一种DNAT)
    firewall-cmd命令区域的IP伪装与端口转发

选项

说明

[--zone=<zone> --list-forward-ports

显示指定区域内设置的IPv4端口转发

[--zone=<zone> --add-forward-port=port=<portid>[-<portid>]:proto=<protocol>[:toport=<portid>[-<portid>]][:toaddr=<address>[/<mask>]]

为指定区域设置IPV4端口转发

[--zone=<zone> --remove-forward-port=port=<portid>[-<portid>]:proto=<protocol>[:toport=<portid>[-<portid>]][:toaddr=<address>[/<mask>]]

为指定区域删除IPV4端口转发的设置

[--zone=<zone>] --query-masquerade

查看指定的区域是否启用了IP伪装(IPV4)

[--zone=<zone>] --add-masquerade

为指定的区域启用IP伪装(IPv4)

[--zone=<zone>] --remove-masquerade

为指定的区域禁用IP伪装(IPv4)

使用firewall-cmd命令设置IP伪装和端口转发

  • 为默认区域开启IP伪装
# firewall-cmd  --add-masquerade
# firewall-cmd  --query-masquerade
  • 为默认区域设置端口转发
// 对public区域的80端口的访问重定向到3128端口
# firewall-cmd --add-forward-port=port=80:proto=tcp:toport=3128
// 对public区域的21端口的访问重定向到192.0.2.155的21端口
# firewall-cmd --add-forward-port=port=21:proto=tcp:toaddr=192.0.2.155
// 对public区域的22155端口的访问重定向到192.0.2.155的22端口
# firewall-cmd --add-forward-port=port=22155:proto=tcp:toport=22:toaddr=192.0.2.155
// 对public区域的22166端口的访问重定向到192.0.2.166的22端口
# firewall-cmd --add-forward-port=port=22166:proto=tcp:toport=22:toaddr=192.0.2.166 
// 显示默认区域设置的转发端口
# firewall-cmd  --list-forward-ports
// 删除默认区域已设置的端口转发规则
# firewall-cmd --remove-forward-port=port=80:proto=tcp:toport=3128
# firewall-cmd --remove-forward-port=port=22166:proto=tcp:toport=22:toaddr=192.0.2.166
# firewall-cmd --list-forward-ports
  1. 两种配置模式
    firewall-cmd分为两种配置模式:
  • 运行时模式(Runtime mode): 表示当前内存中运行的防火墙配置。
  • 持久性模式(Permanent mode): 表示重启防火墙或重新加载防火墙规则时的配置。

firewall-cmd命令与配置模式相关的选项说明

选项

说明

--reload

重新加载防火墙规则并保持状态信息,即将持久配置应用为运行时配置

--permanent

带有此选项的命令用于设置持久化规则,这些规则只有重新启动firewalld或重新加载防火墙规则时才会生效; 不带此参数的命令用于设置运行时规则

--runtime-to-permanent

将当前的运行时配置写入规则配置文件使之成为持久性配置

若用户想同时配置运行时规则和持久性规则,有以下3种方法:

  • 方法1: 独立设置运行时规则和持久性规则
# firewall-cmd --zone=public --add-service=https
# firewall-cmd --zone=public --add-service=https --permanent
  • 方法2:设置持久性规则,而后重新加载配置使之成为运行时规则
# firewall-cmd --zone=public --add-service=https --permanent
# firewall-cmd --reload
  • 方法3: 设置运行时规则,而后将其写入配置文件使之成为持久化规则。
# firewall-cmd --zone=public  --add-service=https
# firewall-cmd --runtime-to-permanent
  1. 高级配置
    firewall-cmd还支持两种高级配置方法:
  • 使用复杂规则(Rich Rule)
    使用–add-rich-rule='rule’选项指定复杂规则,其中的rule需要使用特定的语法。
// 添加一条复杂规则允许源自192.166.0.0/24网络访问本机的MySQL服务
# firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.166.0.0/24" service name="mysql" accept'
// 显示复杂规则
# firewall-cmd --list-rich-rules
// 删除已定义的复杂规则
# firewall-cmd --remove-rich-rule='rule family="ipv4" source address="192.166.0.0/24" service name="mysql" accept'
  • 使用直接接口(Direct Interface)
    使用firewall-cmd命令的–direct选项可以直接使用iptables ip6tables和ebtables的命令语法.
// 在filter表的IN_public_allow链首插入一条规则允许访问本机的666端口.
# firewall-cmd --direct --add-rule ipv4 filter IN_public_allow 0 -m tcp -p tcp --dport 666 -j ACCEPT
// 显示filter表IN_public_allow的链规则
# firewall-cmd --direct --get-rules  ipv4  filter IN_public_allow
// 删除filter表IN_public_allow链中已定义的规则
# firewall-cmd --direct --remove-rule ipv4 filter IN_public_allow 0 -m tcp -p tcp --dport 666 -j ACCEPT

使用firewall-cmd --permanent --direct命令配置的规则将写入单独的配置文件/etc/firewalld/direct.xml.

  1. 使用恐慌(Panic)模式
    当服务器遭受严重的网络攻击时,可以启用Panic模式,进入此模式后会丢弃所有的入站和出站流量并丢弃已建立的连接包.
# firewall-cmd --panic-on

关闭Panic模式

# firewall-cmd --panic-off

显示当前是否处于Panic模式

# firewall-cmd --query-panic

firewall-cmd常用命令操作到此结束,非常感谢各位技术同仁能够阅读此博文,多多指教。