Firewalld 防火墙

iptables现如今非常流行,使用范围也非常广泛,一般用途的防火墙,以iptables的端口转发和IP伪装为基础开发的LVS负载均衡;以NAT为基础的路由器网关等等。
但是,iptables却不是没有缺点的,大量的iptables规则会拖慢速度,更改一个规则可能需要重载所有的规则,于是便有了nf-HiPAC和ipset,保证效率

另外,iptables 也不能算得上是一款现代意义上的防火墙,设计之初并没有考虑不同的场景下需要加载不同的规则,比如公共场所,家里,和办公室等,

相比之下,类似的概念从 win7 时代的防火墙就有了,(win7的正式发布时间是2009年)

firewalld,考虑到了 iptables 这些问题,整合了iptables、ip6tables、ipset,加入了区域的概念,使其成为了一款现代意义上的防火墙。

但是,firewalld 并不属于新一代防火墙,只能算是 iptables 的衍生品,因为其核心仍旧基于iptables。真正的下一代防火墙是 nftables,关于 nftables 超出了本文的内容,略过不谈。

 

firewalld有图形化的的 firewall-config 工具,也有命令行工具 firewall-cmd。

firewalld 是动态防火墙,而非静态的。改变防火墙规则后,所有部分并不需要都重新加载。提供临时和永久两种状态,临时状态即刻生效,永久状态需重载防火墙,实际上是重新加载改变的部分,这也是动态防火墙的由来。

firewalld引入了区域和服务的概念,区域是为了应对不同的场景,服务是为了便于直观的理解

区域分为以下几种:

drop(丢弃)
任何接收的网络数据包都被丢弃,没有任何回复。仅能有发送出去的网络连接。
block(限制)
任何接收的网络连接都被 IPv4 的 icmp-host-prohibited 信息和 IPv6 的 icmp6-adm-prohibited 信息所拒绝。
public(公共)
在公共区域内使用,不能相信网络内的其他计算机不会对您的计算机造成危害,只能接收经过选取的连接。
external(外部)
特别是为路由器启用了伪装功能的外部网。您不能信任来自网络的其他计算,不能相信它们不会对您的计算机造成危害,只能接收经过选择的连接。
dmz(非军事区)
用于您的非军事区内的电脑,此区域内可公开访问,可以有限地进入您的内部网络,仅仅接收经过选择的连接。
work(工作)
用于工作区。您可以基本相信网络内的其他电脑不会危害您的电脑。仅仅接收经过选择的连接。
home(家庭)
用于家庭网络。您可以基本信任网络内的其他计算机不会危害您的计算机。仅仅接收经过选择的连接。
internal(内部)
用于内部网络。您可以基本上信任网络内的其他计算机不会威胁您的计算机。仅仅接受经过选择的连接。
trusted(信任)
可接受所有的网络连接。
firewalld 初始 默认区域为 public。
由于不同的区域概念,你可以预设每个区域的规则,开放的服务,端口等等,和 wifi 的 SSID 及有线的网络进行绑定。比如,你连上咖啡厅的wifi,或是家中的wifi,防火墙会自动切换为 public 或 home。相当方便。(使用 NetworkManager 可以实现,其它网络管理程序如 networkd 是否支持不太清楚)

 


#查看 firewalld 状态
firewall-cmd --state
#查看当前规则
firewall-cmd --list-all #这一项包含了以下四项
################################
#查看当前激活的区域
firewall-cmd --get-active-zones
#查看开放的端口
firewall-cmd --list-ports
#查看开放的服务
firewall-cmd --list-services
#查看当前的富规则
firewall-cmd --list-rich-rules
###############################

##########区域##########
#查看默认区域
firewall-cmd --get-default-zone
firewall-cmd --set-default-zone=public # 设置默认区域为public
#查看激活的区域
firewall-cmd --get-active-zones
#查看预定义的区域
firewall-cmd --get-zones
#查看网卡所在区域
firewall-cmd --get-zone-of-interface=eno33
#查看所有区域当前的状态
firewall-cmd --list-all-zones
#获取区域的target(同iptables的target)
firewall-cmd --get-target
firewall-cmd --set-target=ACCEPT|DROP|REJECT
#查看指定区域的状态
firewall-cmd --info-zone=public
#为网卡指定区域
firewall-cmd --zone=trusted --add-interface=eno33
firewall-cmd --zone=public --add-interface=eno33
#改变网卡的所属区域
firewall-cmd --zone=home --change-interface=eno33


##########添加端口##########
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --permanent --zone=public --add-port=100-500/tcp --permanent
#查询端口是否被加入到当前规则
firewall-cmd --query-port=100-500/tcp --permanent
#删除端口
firewall-cmd --zone=public --remove-port=3306/tcp --permanent
firewall-cmd --zone=public --remove-port=100-500/tcp --permanent


##########服务##########
#查看当前区域启用的服务
firewall-cmd --list-services
#查看预定义的服务
firewall-cmd --get-services
#添加服务
firewall-cmd --add-service=http
# 查看http是否属于默认区域
firewall-cmd --query-service=http
#删除服务
firewall-cmd --query-service=ssh


##########富规则##########
#列出富规则
firewall-cmd --list-rich-rules
#添加富规则
firewall-cmd --zone=public --permanent --add-rich-rule="rule family="ipv4" source address="114.114.114.0/28" accept" #为 114.114.114.0/28 开放全部端口
firewall-cmd --zone=public --permanent --add-rich-rule="rule family="ipv4" source address="114.114.114.114" port port="80" protocol="tcp" accept" # 为指定IP开放指定端口,指定协议为TCP
#删除富规则
firewall-cmd --zone=public --permanent --remove-rich-rule="rule family="ipv4" source address="114.114.114.0/28" accept"
#查询富规则
firewall-cmd --zone=public --permanent --query-rich-rule="rule family="ipv4" source address="114.114.114.0/28" accept"


##########重启##########
firewall-cmd --reload
firewall-cmd --complete-reload #彻底重启(丢掉现有连接)

##########其它实用规则##########
#防暴力破解
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT_direct 0 -p tcp --dport 22 -m state --state NEW -m recent --set
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT_direct 1 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 30 --hitcount 4 -j REJECT --reject-with tcp-reset
firewall-cmd --reload

 

相关链接:https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/security_guide/sec-using_firewalls#sec-Introduction_to_firewalld

发表评论

电子邮件地址不会被公开。 必填项已用*标注