Firewall简述

在CentOS7之后,系统默认已经是firewall防火墙。Firewalld提供了动态托管的防火墙,并支持定义网络连接或接口的信任级别的网络/防火墙区域。它支持IPv4,IPv6防火墙设置,以太网桥和IP集。运行时和永久配置选项分开。它还为服务或应用程序提供了一个接口,以直接添加防火墙规则。

运行时和永久配置的分离使得可以在运行时进行评估和测试。运行时配置仅在下一次重新加载和重新启动服务或重新引导系统之前才有效。然后,将再次加载永久配置。使用运行时环境,可以将运行时用于仅在有限时间内激活的设置。

特别提醒:

  • firewalld和iptables冲突,需要禁用其中一个。
  • 受内核限制,端口转发功能仅可用于IPv4。
  • 各区域的默认配置文件存储路径/usr/lib/firewalld/zones/
  • 用于防火墙配置工具firewall-cmd,firewall-config和firewall-applet
  • add/remove,添加/移除;permanent,永久有效;reject/accept,拒绝/接受
  • firewalld默认规则已经放行SSH服务(22端口),但如果您修改过SSH端口,则必须先放行,否则一旦启用firewalld将被阻挡在外。修改配置文件/etc/firewalld/zones/public.xml 或者 firewall-offline-cmd --zone=public --add-port=5000/tcp

常用汇总

1、安装(默认是安装好的)

yum install -y firewalld firewall-config ##安装firewalld

##相关命令
systemctl start firewalld ##启动服务
systemctl stop firewalld ##停止服务
systemctl status firewalld ##服务运行状态

systemctl enable firewalld ##开机启动
systemctl disable firewalld ##取消开机启动

systemctl stop iptables ##停止iptables服务
systemctl mask iptables ##禁用iptables服务
systemctl unmask iptables 


firewall-cmd --version ##查看Firewalld版本
firewall-cmd --list-all-zones ##显示所有安全区域
firewall-cmd --get-active-zone ##查看激活的安全域
firewall-cmd --list-ports ##查看开放的端口
firewall-cmd --list-services ##查看开放的服务
firewall-cmd --zone=public --list-rich-rules ##查看添加的规则
firewall-cmd --get-services 或者 ll /usr/lib/firewalld/services/ ##查看支持的服务
firewall-cmd --reload ##Firewalld添加完规划后需要重载配置才能生效


firewall-cmd --zone=public --add-port=80/tcp --permanent ##开放单个端口
firewall-cmd --zone=public --add-port=8080-8088/tcp --permanent ##开放端口范围
firewall-cmd --permanent --zone=public --add-service=https ##开放指定服务
firewall-cmd --zone=public --add-protocol=icmp --permanent ##开放指定协议

firewall-cmd --zone=public --remove-port=80/tcp --permanent ##关闭单个端口
firewall-cmd --zone=public --remove-port=8080-8088/tcp --permanent ##关闭端口范围
firewall-cmd --permanent --zone=public --remove-service=https ##关闭指定服务
firewall-cmd --zone=public --remove-protocol=icmp --permanent ##关闭指定协议


##对单个地址开放一个端口
firewall-cmd --permanent --zone=public --add-rich-rule=’
> rule family=“ipv4”
> source address=“192.168.0.186/32”
> port protocol=“tcp” port=“80” accept’

##拒绝单个IP地址访问某个端口
firewall-cmd --permanent --zone=public --add-rich-rule=’
> rule family=“ipv4”
> source address=“8.8.8.8/32”
> port protocol=“tcp” port=“53” reject’

##开放全部端口给IP
firewall-cmd --permanent --zone=public --add-rich-rule=’
> rule family=“ipv4”
> source address=“192.168.0.186/32” accept’

##开放全部端口给网段
firewall-cmd --permanent --zone=public --add-rich-rule=’
>rule family=“ipv4”
>source address=“192.168.0.0/16” accept’

##阻止某个IP连接
irewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=123.57.22.204 reject"


##将80端口的流量转发至8080
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080

##将80端口的流量转发至192.168.0.1
firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.0.1

##将80端口的流量转发至192.168.0.1的8080端口
firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.0.1:toport=8080

2、常用firewall-cmd命令参数及说明

参数

说明

–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

让“永久生效”的配置规则立即生效,并覆盖当前的配置规则

–panic-on

开启应急状况模式

–panic-off

关闭应急状况模式

3、默认区域及规则

区域(zones)

默认规则策略

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

拒绝进入的流量,除非与出去的流量相关

相较于iptables防火墙而言,firewalld支持动态更新技术并加入了区域(zone)的概念。简单来说,区域就是firewalld预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。