返回首页DA系统C#IDE文件同步服务屏保 今天是: 2026-05-05    "立夏"  夏季的第一个节气,表示盛夏时节的正式开始

搜索
热搜: linux 技术
Hi~登录注册
查看: 2559|回复: 0

[转载] 【转载】firewalld讲解及实际案例

[复制链接]
发表于 2021-6-8 18:57:33 | 显示全部楼层 |阅读模式
本帖最后由 da11 于 2021-6-8 20:15 编辑
firewalld讲解及实际案例


联合转载,转载地址如下:






firewalld防火墙详解


众所周知,在RHEL7系统中,firewalld防火墙取代了iptables防火墙。我们都知道iptables的防火墙策略是交由内核层面的netfilter网络过滤器来处理的,而firewalld则是交由内核层面的nftables包过滤框架来处理。

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

表1:firewalld中常用的区域名称及策略规则:





一、终端管理工具
firewalld的参数一般都是以“长格式”来提供的,但是在RHEL7系统里支持部分命令的参数补齐,其中就包括firewall-cmd命令,也就是说可以用Tab键来补齐长格式参数,很酷吧。
表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关闭应急状况模式
firewalld配置的防火墙策略默认为运行时(Runtime)模式,又称为当前生效模式,而且随着系统的重启会失效。如果想让配置策略一直存在,就需要使用永久(Permanent)模式了,方法就是在firewall-cmd命令后面添加–permanent参数,这样配置的防火墙策略就可以永久生效了。但是,永久生效模式有一个“不近人情”的特点,就是使用它设置的策略只有在系统重启后才会生效。如果想让配置的永久策略立即生效,需要手动执行firewall-cmd --reload命令。







注:remove掉ssh服务或者ssh端口,当前远程登陆会话不会断开,退出后就无法远程连接了。


firewalld服务启动、重启、停止
systemctl start firewalld
systemctl restart firewalld
systemctl stop firewalld

常用命令:
重新加载防火墙配置
firewall-cmd --reload

查看firewalld的运行状态
firewall-cmd --state

查看默认当前使用的区域
firewall-cmd --get-default-zone

查看系统默认活动区域名称、来源地址和关联的网卡
firewall-cmd --get-active-zones



查看所有可用区域
firewall-cmd --get-zones

查看区域的所有设置
firewall-cmd --zone=internal --list-all   # 查看指定区域设置
firewall-cmd --list-all   # 查看默认区域设置

如图所示:


图上各项参数详解:
Target:目标
icmp-block-inversion:ICMP协议类型黑白名单开关(yes/no)
Interfaces:关联的网卡接口
sources:来源,可以是IP地址,也可以是mac地址
services:允许的服务
ports:允许的目标端口,即本地开放的端口
protocols:允许通过的协议
masquerade:是否允许伪装(yes/no),可改写来源IP地址及mac地址
forward-ports:允许转发的端口
source-ports:允许的来源端口
icmp-blocks:可添加ICMP类型,当icmp-block-inversion为no时,这些ICMP类型被拒绝;当icmp-block-inversion为yes时,这些ICMP类型被允许。
rich rules:富规则,即更细致、更详细的防火墙规则策略,它的优先级在所有的防火墙策略中也是最高的。

查看所有预设的服务
firewall-cmd --get-services
此时将会列出/usr/lib/firewalld/services/目录中所有的服务名称。

查看所有区域的设置
firewall-cmd --list-all-zones

查看指定网卡所在的区域
firewall-cmd --get-zone-of-interface=ens32

把firewalld的当前默认区域设置为drop,此为永久设置
firewall-cmd --set-default-zone=drop

把ens32网卡关联的区域修改为drop
firewall-cmd --permanent --zone=drop --change-interface=ens32   # 永久设置
firewall-cmd --zone=drop --change-interface=ens32   # 当前生效



在drop区域开放https服务
firewall-cmd --zone=drop --add-service=https

取消开放https服务,即禁止https服务
firewall-cmd --zone=drop --remove-service=https

开放22端口
firewall-cmd --zone=drop --add-port=22/tcp

取消开放22端口
firewall-cmd --zone=drop --remove-port=22/tcp

开放8080和8081端口
firewall-cmd --zone=drop --add-port=8080-8081/tcp

查询drop区域开放了哪些端口
firewall-cmd --zone=drop --list-ports

允许icmp协议流量,即允许ping
firewall-cmd --zone=drop --add-protocol=icmp

取消允许icmp协议的流量,即禁ping
firewall-cmd --zone=drop --remove-protocol=icmp

查询drop区域开放了哪些协议
firewall-cmd --zone=drop --list-protocols

将原本访问本机888端口的流量转发到本机22端口
firewall-cmd --zone=drop --add-forward-port=port=888:proto=tcp:toport=22

将原本访问本机888端口的流量转发到ip为192.168.2.208的主机的22端口,需要开启masquerade
firewall-cmd --zone=drop --add-masquerade
firewall-cmd --zone=drop --add-forward-port=port=888:proto=tcp:toport=22:toaddr=192.168.2.208


测试端口转发功能是否生效
在客户端尝试访问192.168.2.210主机的888端口,连上去后发现实际连接的是192.168.2.208主机,测试OK。








防火墙内的拒绝策略动作有DROP和REJECT两种,区别如下:
1、DROP动作只是简单的直接丢弃数据,并不反馈任何回应。需要Client等待超时,Client容易发现自己被防火墙所阻挡。
2、REJECT动作则会更为礼貌的返回一个拒绝(终止)数据包(TCP FIN或UDP-ICMP-PORT-UNREACHABLE),明确的拒绝对方的连接动作。连接马上断开,Client会认为访问的主机不存在。REJECT在IPTABLES里面有一些返回参数,参数如下:ICMP port-unreachable、ICMP echo-reply 或是 tcp-reset(这个封包会要求对方关闭联机),进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。

至于使用DROP还是REJECT更合适一直未有定论,因为的确二者都有适用的场合。REJECT是一种更符合规范的处理方式,并且在可控的网络环境中,更易于诊断和调试网络/防火墙所产生的问题;而DROP则提供了更高的防火墙安全性和稍许的效率提高,但是由于DROP不很规范(不很符合TCP连接规范)的处理方式,可能会对你的网络造成一些不可预期或难以诊断的问题。因为DROP虽然单方面的中断了连接,但是并不返回任何拒绝信息,因此连接客户端将被动的等到tcp session超时才能判断连接是否成功,这样早企业内部网络中会有一些问题,例如某些客户端程序或应用需要IDENT协议支持(TCP Port 113, RFC 1413),如果防火墙未经通知的应用了DROP规则的话,所有的同类连接都会失败,并且由于超时时间,将导致难以判断是由于防火墙引起的问题还是网络设备/线路 故障。

一点个人经验,在部署防火墙时,如果是面向企业内部(或部分可信任网络),那么最好使用更绅士REJECT方法,对于需要经常变更或调试规则的网络也是如此;而对于面向危险的Internet/Extranet的防火墙,则有必要使用更为粗暴但是安全的DROP方法,可以在一定程度上延缓网络攻击的进度(和难度,至少,DROP可以使他们进行TCP-Connect方式端口扫描时间更长)。









本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册成为修仙之旅的少年~

x
 楼主| 发表于 2021-6-8 20:19:08 | 显示全部楼层
firewalld富规则

1.富规则语法
  1. [root@web02 ~]# man firewalld.richlanguage
  2. rule
  3.   [source]
  4.   [destination]
  5.   service|port|protocol|icmp-block|icmp-type|masquerade|forward-port|source-port
  6.   [log]
  7.   [audit]
  8.   [accept|reject|drop|mark]
  9.   
  10. rule [family="ipv4|ipv6"]
  11. source [not] address="address[/mask]"|mac="mac-address"|ipset="ipset"
  12. destination [not] address="address[/mask]"
  13. service name="service name"
  14.     port port="port value" protocol="tcp|udp"
  15.     protocol value="protocol value"
  16.     forward-port port="port value" protocol="tcp|udp" to-port="port value" to-addr="addr
  17. ess"
  18.     source-port port="port value" protocol="tcp|udp"
  19. [accept|reject|drop|mark]

  20. #富语言规则相关命令
  21. --add-rich-rule='<RULE>'        #在指定的区域添加一条富语言规则
  22. --remove-rich-rule='<RULE>'     #在指定的区删除一条富语言规则
  23. --query-rich-rule='<RULE>'      #找到规则返回0,找不到返回1
  24. --list-rich-rules               #列出指定区里的所有富语言规则
复制代码

2.富规则实例一
允许10.0.0.1主机能够访问http服务,允许172.16.1.0/24能访问111端口
  1. #允许10.0.0.1主机能够访问http服务
  2. [root@web02 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.0.0.1 service name=http accept'
  3. success

  4. #允许172.16.1.0/24能访问111端口
  5. [root@web02 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.16.1.0/24 port port=111 protocol=tcp accept'
  6. success
复制代码


3.富规则实例二
默认public区域对外开放所有人能通过ssh服务连接,但拒绝172.16.1.0/24网段通过ssh连接服务器
  1. [root@web02 ~]# firewall-cmd --add-service=ssh

  2. #但拒绝172.16.1.0/24网段通过ssh连接服务器
  3. 1.方式一:
  4. [root@web02 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.16.1.0/24 service name=ssh reject'
  5. success
  6. #连接返回结果
  7. [root@web01 ~]# ssh 172.16.1.8 22
  8. ssh: connect to host 172.16.1.8 port 22: Connection refused

  9. 2.方式二:
  10. [root@web02 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.16.1.0/24 service name=ssh drop'
  11. success
  12. #连接返回结果
  13. [root@web01 ~]# ssh 172.16.1.8 22
  14. ssh: connect to host 172.16.1.8 port 22: Connection timed out

  15. #drop和reject区别
  16. reject直接拒绝,返回拒绝
  17. drop是丢弃,直到超时
复制代码


4.富规则实例三
当用户来源IP地址是10.0.0.1主机,则将用户请求的5555端口转发至后端172.16.1.7的22端口
  1. [root@web02 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.0.0.1 forward-port port=5555 protocol=tcp to-port=22 to-addr=172.16.1.7'
  2. success

  3. [root@web02 ~]# firewall-cmd --add-masquerade
  4. success
复制代码


5.防火墙配置网站禁ping
  1. [root@web02 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 protocol value=icmp drop'
  2. success
复制代码








回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-8 20:27:23 | 显示全部楼层
初始化后开启防火墙流程



linux centos7  默认防火墙是关闭的,设置了开启端口后一定要重启防火墙,否则端口开启会不起作用


查看已开启的端口

firewall-cmd --list-ports


查看防火墙状态

firewall-cmd --state


开启防火墙

systemctl start firewalld


开启80端口(永久)(默认public区域)

firewall-cmd --zone=public --add-port=80/tcp --permanent


配置富规则限制某ip网段无法访问某端口

firewall-cmd --add-rich-rule='rule family="ipv4" source address="102.200.0.0/16" port port="443" protocol="tcp" drop' --permanent
firewall-cmd --add-rich-rule='rule family="ipv4" source address="102.200.0.0/16" port port="80" protocol="tcp" drop' --permanent
firewall-cmd --add-rich-rule='rule family="ipv4" source address="105.104.0.0/16" port port="80" protocol="tcp" drop' --permanent
firewall-cmd --add-rich-rule='rule family="ipv4" source address="109.104.0.0/16" port port="443" protocol="tcp" drop' --permanent

网段填写详情:https://www.swztdza.cn/dalt/forum.php?mod=viewthread&tid=227


重启防火墙生效

firewall-cmd --reload


查看已开启的端口
firewall-cmd --list-ports

查看已生效的富规则
firewall-cmd --list-rich-rules





回复 支持 反对

使用道具 举报

游客
回复
*滑块验证:

DA论坛飞机票来了~
快速回复 返回顶部 返回列表