防火墙简介
CentOS7中防火墙已经成为一个非常强大的功能,它对Iptables防火墙进行了升级;
firewalld是一款动态防火墙管理工具。所谓动态防火墙,是指firewalld在运行时,任何规则的变更都不需要对防火墙规则列表进行重新加载,只需要将变更部分保存并更新运行即可。
firewalld支持针对网络区域(zone)、服务(service)、端口(port)、网桥(eth)及富规则(rich-role)进行防火墙规则配置;同时支持支持IPv4和IPv6设置以及临时或永久规则配置;
Zone
Zone一般翻译为网络区域,是firewalld引入的一个新的概念,网络区域定义了网络链接的可信级别;
firewalld内置了9种区域:
- drop:翻译为丢弃区域,丢弃所有传入流量,并且不产生包含ICMP的错误响应;
- block:翻译为限制区域,拒绝所有传入流量,并给予回复;
- public:翻译为公共区域,允许与ssh或dhcpv6-client预定义服务匹配的传入流量,其余均拒绝;public是网卡的默认区域
- external:翻译为外部区域,允许与 ssh 预定义服务匹配的传入流量,其余均拒绝。 默认将通过此区域转发的IPv4传出流量将进行地址伪装,可用于为 路由器启用了伪装功能的外部网络;
- dmz:翻译为隔离区或非军事区,该区域公开提供外部访问,允许与 ssh 预定义服务匹配的传入流量进入内部网络,其余均拒绝;
- work:翻译为工作区域,允许与 ssh、ipp-client、dhcpv6-client 预定义服务匹配的传入流量,其余均拒绝;
- home:翻译为家庭区域,允许与ssh、ipp-client、mdns、samba-client或dhcpv6-client预定义服务匹配的传入流量,其余均拒绝;
- internal:翻译为内部区域,默认值时与home区域相同;
- trusted:翻译为信任区域,可接受所有网络请求;
防火墙数据处理流程
firewalld对于进入系统的数据包,会根据数据包的源IP地址或传入的网络接口等条件,将数据流量转入相应区域的防火墙规则。对于进入系统的数据包,首先检查的就是其源地址;
- 若源地址关联到特定的区域(即源地址或接口绑定的区域有冲突),则执行该区域所制定的规则
- 若源地址未关联到特定的区域(即源地址或接口绑定的区域没有冲突),则使用传入网络接口的区域并执行该区域所制定的规则
- 若网络接口也未关联到特定的区域(即源地址或接口都没有绑定特定的某个区域),则使用默认区域并执行该区域所制定的规则
- rich-rule规则:
- priority规则
- 日志规则
- drop/reject规则
- accept规则
iptables规则优先级为按照精确匹配优先,上下顺序优先规则;与firewalld优先级区别较大;
firewalld管理
# 服务安装与启动
yum install -y firewalld
systemctl umask firewalld
systemctl start firewalld
# 显示防火墙状态
firewall-cmd state
# 查看全部配置
firewall-cmd --list-all
# 重新加载防火墙规则
firewall-cmd --reload
# 设置默认区域
firewall-cmd --set-default-zone=home
# 修改网卡默认区域
firewall-cmd --zone=external --change interface=eno16777728
# 添加服务规则 默认为临时规则
firewall-cmd --zone=public --add-service=http
# 添加端口规则,指定permanent参数添加永久规则,未指定zone则添加至默认zone中
firewall-cmd --permanent --add-port=8080/tcp
# 移除端口规则
firewall-cmd --permanent --remove-port=8080/tcp
# 端口转发规则 将tcp协议888端口流量转发至192.168.10.10主机tcp协议22端口
firewall-cmd --permanent --add-forwardport=port=888:proto=tcp:toport=22:toaddr=192.168.10.10
# 添加富规则,拒绝192.168.10.0/24网段ipv4协议ssh服务请求
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.10.0/24" service name="ssh" reject"
# 添加富规则 接受192.168.10.0/24网段ipv4协议1024-2000端口请求
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.10.0/24" port protocol="tcp" port="1024-2000" accept"
# 当前防火墙规则转为永久规则
firewall-cmd --runtime-to-permanent
案例说明
- 80端口仅允许集群内部访问,其他端口完全开放
# 设置默认public区域,开放所有端口,添加富规则指定80端口仅允许集群访问 firewall-cmd --permanent --add-port="1-65535" firewall-cmd --add-rich-role='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="80" accept'