CentOS7系列之Firewalld防火墙常用命令操作

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= 设置网络连接或接口的默认区域
--get-active-zones 显示已激活的所有区域
--get-zone-of-interface= 显示指定接口绑定的区域
--zone= --add-interface= 为指定的区域绑定网络接口
--zone= --change-interface= 为指定的区域更改绑定的网络接口
--zone= --remove-interface= 为指定的区域解除绑定的网络接口
--list-all-zones 显示所有的区域及其规则
[--zone=] --list-all 显示指定区域的所有规则,省略时--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=] --list-services 显示指定区域内允许访问的所有服务
[--zone=] --add-service= 为指定区域设置允许访问的某项服务
[--zone=] --remove-service= 删除指定区域已设置的允许访问的某项服务
[--zone=] --list-ports 显示指定区域内允许访问的所有端口号
[--zone=] --add-port=[-]/ 为指定区域设置允许访问的某个/某段端口号(包括协议名)
[--zone=] --remove-port=[-]/ 删除指定区域已设置的允许访问的端口号(包括协议名)
[--zone=] --list-icmp-blocks 显示指定区域内拒绝访问的所有ICMP类型
[--zone=] --add-icmp-block= 为指定区域设置拒绝访问的某项ICMP类型
[--zone=] --remove-icmp-block= 删除指定区域已设置的拒绝访问的某项ICMP类型

省略--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= --list-forward-ports 显示指定区域内设置的IPv4端口转发
[--zone= --add-forward-port=port=[-]:proto=[:toport=[-]][:toaddr=
[/]]
为指定区域设置IPV4端口转发
[--zone= --remove-forward-port=port=[-]:proto=[:toport=[-]][:toaddr=
[/]]
为指定区域删除IPV4端口转发的设置
[--zone=] --query-masquerade 查看指定的区域是否启用了IP伪装(IPV4)
[--zone=] --add-masquerade 为指定的区域启用IP伪装(IPv4)
[--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常用命令操作到此结束,非常感谢各位技术同仁能够阅读此博文,多多指教。

你可能感兴趣的:(CentOS,Linux,运维,linux,centos)