最近在工作中需要对服务器进行来源访问的限制,之前一直没学过centos的防火墙配置方法,终于完整的对firewalld防火墙配置进行了一次完整的学习。以前在使用centos服务器的时候,直接一上来就systemctl stop firewalld
,直接将防火墙关闭,在真实生产环境中不得不使用firewalld进行端口来源的限制,也就不能直接关闭了。
1. 概念
firewalld和iptables均属于防火墙管理工具,真正进行过滤的是系统内核的netfilter网络过滤器来进行处理。在centos7以前的版本中,采用的是iptables进行防火墙管理,在centos7及以后的版本中,采用的是firewalld进行管理,本文主要关注firewalld的相关知识。
firewalld添加了区域(zone)的概念,区域是firewalld内置的几套策略目标,用户可以根据不同的使用场景,套用对应的策略模板。在centos中默认的区域是public,该区域拒绝所有入站流量,仅允许ssh和dhcpv6-client相关流量。
以下是摘抄的几个区域的相关规则
区域 | 策略规则 |
---|---|
trusted | 允许所有的数据包 |
home | 拒绝入站流量,放行ssh、mdns、ipp-client、amba-client、dhcpv6-client的流量 |
internal | 与home相同 |
work | 拒绝入站流量,放行ssh、ipp-client、dhcpv6-client的流量 |
public | 拒绝入站流量,放行ssh、ipp-client的流量 |
external | 拒绝入站流量,放行ssh的流量 |
dmz | 拒绝入站流量,放行ssh流量 |
block | 拒绝入站流量 |
drop | 拒绝入站流量 |
2. firewalld常用使用方法
配置firewalld防火墙一般使用firewall-cmd
命令进行配置,配置的类型一般为:
- 选定区域确定默认的规则
- 绑定协议或者端口决定是否允许放行
- 端口转发
- 富规则的配置
firewall-cmd在配置好后,都需要进行reload操作,操作命令为firewall-cmd --reload
添加规则的时候,如果没有--permanent
则为临时规则,reload后失效,添加了该参数后,reload后,配置仍然存在。
1、区域的相关操作
区域与端口、连接、接口是多对一的关系,所以一个端口、连接、接口只能属于一个区域。
firewall-cmd --get-default-zone
:获取目前默认的区域名称。
firewall-cmd --set-default-zone=public
:设置默认的区域
firewall-cmd --get-zones
:显示可用的区域
firewall-cmd --list-all-zones
:显示所有区域的配置
firewall-cmd --zone=public --list-all
: 显示指定区域
firewall-cmd --get-zone-of-interface=ens19
:显示网卡所绑定的区域
firewall-cmd --permanent --zone=external --change-interface=ens19
:修改网卡所在的默认区域
2、流量协议操作
firewall-cmd --zone=public --query-service=ssh
:查看协议是否放行
firewall-cmd --permanent --zone=public --add-service=https
:将协议添加到放行
firewall-cmd --permanent --zone=public --remove-service=https
:将协议从放行中删除
3、端口操作
firewall-cmd --zone=public --list-ports
:查看当前区域放行的端口
firewall-cmd --zone=public --add-port=8000/tcp
:当前区域放行端口
firewall-cmd --zone=public --remove-port=8000/tcp
:删除放行端口
4、端口转发
目的是将某个端口的访问流量转发到另一个端口,前提必须将两个端口同时放行
firewall-cmd --zone=public --add-forward-port=port=9000:proto=tcp:toport=8000:toaddr=192.168.100.54
:在访问9000端口的时候,防火墙会将访问流量转发到8000上面
firewall-cmd --zone=public --remove-forward-port=port=9000:proto=tcp:toport=8000:toaddr=192.168.100.54
:删除规则
5、富规则
相当于更加底层的人工规则,能够更加细致的设置防火墙规则,使用--add-rich-rule
、--list-rich-rules
、--remove-rich-rule
来进行管理富规则。
firewall-cmd --remove-rich-rule 'rule family="ipv4" source address="192.168.100.89" port port="8000" protocol="tcp" accept'
:删除这条富规则
firewall-cmd --list-rich-rules
:列出所有的富规则
firewall-cmd --zone=public --add-rich-rule="rule family='ipv4' source address='192.168.100.10' port port=22 protocol=tcp reject"
:禁止192.168.100.10访问本机的22端口
firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 source address=10.1.0.3 forward-port port=80 protocol=tcp to-port=6532'
:允许来自主机 10.1.0.3 到 80 端口的 IPv4 的 TCP 流量,并将流量转发到 6532 端口上。