防火墙--firewalld
一、firewalld基本概述
1)RHEL/CentOS 7
系统中集成了多款防火墙管理工具,其中firewalld(Dynamic Firewall Manager of Linux systems
, Linux
系统的动态防火墙管理器)服务是默认的防火墙配置管理工具,它拥有基于CLI(命令行界面)和基于GUI(图形用户界面)的两种管理方式。
2)相较于传统的Iptables
防火墙,firewalld
支持动态更新,并加入了区域zone
的概念。简单来说,区域就是firewalld
预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。
3)Firewalld
规则配置,从外访问服务器内部如果没有添加规则默认是阻止,从服务器内部访问服务器外部默认是允许
二、防火墙区域管理策略
划分不同的区域,制定出不同区域之间的访问控制策略来控制不同程序区域间传送的数据流。
“区域”是针对给定位置或场景(例如家庭、公共、受信任等)可能具有的各种信任级别的预构建规则集。不同的区域允许不同的网络服务和入站流量类型,而拒绝其他任何流量。 首次启用 FirewallD 后,public 将是默认区域。
区域也可以用于不同的网络接口。例如,要分离内部网络和互联网的接口,你可以在 internal 区域上允许 DHCP,但在 external区域仅允许 HTTP 和 SSH。未明确设置为特定区域的任何接口将添加到默认区域。
zone区域相关指令:
#显示总共可用的区域 [root@firewall ~]# firewall-cmd --get-zones block dmz drop external home internal public trusted work #显示默认的区域 [root@firewall ~]# firewall-cmd --get-default-zone public #显示获取的区域 [root@firewall ~]# firewall-cmd --get-active-zones #设置默认的区域 [root@firewall ~]# firewall-cmd --set-default-zone="dmz" success [root@firewall ~]# firewall-cmd --set-default-zone="public" success #得到特定区域的所有配置 [root@firewall ~]# firewall-cmd --zone=public --list-all public target: default icmp-block-inversion: no interfaces: sources: services: dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: # 查看zone所有打开的端口: firewall-cmd --zone=dmz --list-ports # 加入一个端口到区域: firewall-cmd --zone=dmz --add-port=8080/tcp
三、防火墙端口访问策略
使用firewalld允许客户请求的服务器的80/tcp端口,仅临时生效,如添加--permanent重启后则永久生效
#临时添加允许放行单个端口 [root@firewall ~]# firewall-cmd --add-port=80/tcp success #临时添加放行多个端口 [root@firewall ~]# firewall-cmd --add-port={80/tcp,8080/tcp} success #永久添加多个端口,需要添加--permanent,并且需要重载firewalld [root@firewall ~]# firewall-cmd --add-port={80/tcp,8080/tcp} --permanent success [root@firewall ~]# firewall-cmd --list-ports [root@firewall ~]# firewall-cmd --reload success [root@firewall ~]# firewall-cmd --list-ports 80/tcp 8080/tcp #通过--list-ports检查端口放行情况 [root@firewall ~]# firewall-cmd --list-ports 80/tcp 8080/tcp #移除临时添加的端口规则 [root@firewall ~]# firewall-cmd --remove-port={80/tcp,8080/tcp} success
四、防火墙服务访问策略
使用firewalld允许客户请求服务器的http https协议,仅临时生效,如添加--permanent重启后则永久生效
#临时添加允许放行单个服务 [root@firewall ~]# firewall-cmd --add-service=http success [root@firewall ~]# firewall-cmd --list-services dhcpv6-client http ssh #临时添加放行多个服务 [root@firewall ~]# firewall-cmd --add-service={http,https} success #永久添加多个服务,需要添加--permanent,并且需要重载firewalld [root@firewall ~]# firewall-cmd --add-service={http,https} --permanent success [root@firewall ~]# firewall-cmd --list-services dhcpv6-client ssh [root@firewall ~]# firewall-cmd --reload success [root@firewall ~]# firewall-cmd --list-services dhcpv6-client http https ssh #通过--list-services检查服务放行情况 [root@firewall ~]# firewall-cmd --list-services dhcpv6-client http https ssh #移除临时添加的http https协议 [root@firewall ~]# firewall-cmd --remove-service={http,https} success [root@firewall ~]# firewall-cmd --list-services dhcpv6-client ssh
五、防火墙端口转发策略
端口转发是指传统的目标地址映射,实现外网访问内网资源,流量转发命令格式为:
firewall-cmd --permanent --zone=<区域> --add-forward-port=port=<源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标IP地址>
如果需要将本地的10.0.0.61:5555端口转发至后端172.16.1.9:22端口:
#1、开启masquerade,实现地址转换 [root@Firewalld ~]# firewall-cmd --add-masquerade --permanent #2、配置转发规则 [root@Firewalld ~]# firewall-cmd --permanent --zone=public --add-forward-port=port=5555:proto=tcp:toport=22:toaddr=172.16.1.9 [root@Firewalld ~]# firewall-cmd –reload
六、防火墙富规则策略
firewalld中的富规则表示更细致、更详细的防火墙策略配置,它可以针对系统服务、端口号、源地址和目标地址等诸多信息进行更有针对性的策略配置, 优先级在所有的防火墙策略中也是最高的,帮助信息如下:
[root@Firewalld ~]# man firewall-cmd # 帮助手册 [root@Firewalld ~]# man firewalld.richlanguage # 获取富规则手册 rule [source] [destination] service|port|protocol|icmp-block|masquerade|forward-port [log] [audit] [accept|reject|drop] rule [family="ipv4|ipv6"] source address="address[/mask]" [invert="True"] destination address="address[/mask]" invert="True" service name="service name" port port="port value" protocol="tcp|udp" protocol value="protocol value" forward-port port="port value" protocol="tcp|udp" to-port="port value" to-addr="address" log [prefix="prefix text"] [level="log level"] [limit value="rate/duration"] accept | reject [type="reject type"] | drop #富规则相关命令 --add-rich-rule=‘<RULE>‘ #在指定的区添加一条富规则 --remove-rich-rule=‘<RULE>‘ #在指定的区删除一条富规则 --query-rich-rule=‘<RULE>‘ #找到规则返回0 ,找不到返回1 --list-rich-rules #列出指定区里的所有富规则
1)允许10.0.0.1主机能够访问http服务,允许172.16.1.0/24能访问10050端口
[root@firewall ~]# firewall-cmd --add-rich-rule=‘rule family=ipv4 source address=10.0.0.1/32 service name=http accept‘ success [root@firewall ~]# firewall-cmd --add-rich-rule=‘rule family=ipv4 source address=172.16.1.0/24 port port="10050" protocol="tcp" accept‘ success [root@firewall ~]# firewall-cmd --list-rich-rules rule family="ipv4" source address="10.0.0.1/32" service name="http" accept rule family="ipv4" source address="172.16.1.0/24" port port="10050" protocol="tcp" accept
2)默认public区域对外开放所有人能通过ssh服务连接,但拒绝172.16.1.0/24网段通过ssh连接服务器
[root@firewall ~]# firewall-cmd --add-rich-rule=‘rule family=ipv4 source address=172.16.1.0/24 service name="ssh" drop‘ success
3)允许所有人能访问http,https服务,但只有10.0.0.1主机可以访问ssh服务
[root@firewall ~]# firewall-cmd --add-service={http,https} success [root@firewall ~]# firewall-cmd --add-rich-rule=‘rule family=ipv4 source address=10.0.0.1/32 service name=ssh accept‘ success
4)当用户来源IP地址是10.0.0.1主机,则将用户请求的5555端口转发至后端172.16.1.9的22端口
[root@firewall ~]# firewall-cmd --add-masquerade success [root@firewall ~]# firewall-cmd --add-rich-rule=‘rule family=ipv4 source address=10.0.0.1/32 forward-port port="5555" protocol="tcp" to-port="22" to-addr="172.16.1.6"‘ success
5)查看设定的规则,如果没有添加--permanent参数则重启firewalld会失效。富规则按先后顺序匹配,按先匹配到的规则生效
[root@firewall ~]# firewall-cmd --list-rich-rules rule family="ipv4" source address="10.0.0.1/32" service name="http" accept rule family="ipv4" source address="172.16.1.0/24" port port="10050" protocol="tcp" accept rule family="ipv4" source address="172.16.1.0/24" service name="ssh" drop rule family="ipv4" source address="10.0.0.1/32" service name="ssh" accept rule family="ipv4" source address="10.0.0.1/32" forward-port port="5555" protocol="tcp" to-port="22" to-addr="172.16.1.6"
原文:https://www.cnblogs.com/hujinzhong/p/12603348.html