002、firewalld
本文最后更新于 257 天前,其中的信息可能已经过时,如有错误请发送邮件到wuxianglongblog@163.com

firewalld

1.防火墙基本概述

RHEL/CentOS 7系统中集成了多款防火墙管理工具,其中firewalld(Dynamic Firewall Manager of Linux systems, Linux系统的动态防火墙管理器)服务是默认的防火墙配置管理工具,它拥有基于CLI(命令行界面)和基于GUI(图形用户界面)的两种管理方式

image-20240225161909769

相较于传统的Iptables防火墙管理工具firewalld支持动态更新,并加入了区域zone的概念。
简单来说,区域就是firewalld预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。
注意
一个zone区域仅能绑定一个网卡, 设定不同的匹配规则
一个zone区域又可以针对不同的源地址设定不同的规则

image-20240225161922776

Firewalld相关配置文件:
默认定义的模板配置文件/usr/lib/firewalld
存储规则配置文件 /etc/firewalld/

2.防火墙区域概述

image-20240225161946527

3.防火墙基本指令参数

为了能够使用firwalld服务和相关工具去管理防火墙,必须启动firwalld服务,并且需要禁用以前旧防火墙相关服务, firewall-config(图形界面), firewall-cmd
firewalld的规则分两种状态:
-runtime运行时: 修改规则马上生效,但是临时生效 [不建议]
-permanent持久配置: 修改后需要reload重载才会生效 [强烈推荐]
firewall-cmd命令分类:

image-20240225162007463

4.防火墙区域配置策略
1.为了能正常使用firwalld服务和相关工具去管理防火墙,必须启动firwalld服务, 同时关闭以前旧防火墙相关服务

//禁用旧版防火墙服务
[root@liyanzhao ~]# systemctl mask iptables
[root@liyanzhao ~]# systemctl mask ip6tables
//启动firewalld防火墙, 并加入开机自启动服务
[root@liyanzhao ~]# systemctl start firewalld
[root@liyanzhao ~]# systemctl enable firewalld
//备份firewalld相关配置文件(重要)
[root@Firewalld ~]# cp -r /etc/firewalld/ /etc/firewalld_backup

2.zone区域相关指令

//查看当前默认区域
[root@liyanzhao ~]# firewall-cmd --get-default-zone public
//将当前默认区域修改为work
[root@liyanzhao ~]# firewall-cmd  --set-default-zone=work
//work区域允许所有人访问http服务 
[root@liyanzhao ~]# firewall-cmd --permanent --add-service=http --zone=work
//将网络接口切换至work区域
[root@liyanzhao ~]# firewall-cmd --change-interface=eth0 --zone=work

3.将某网段IP路由至home区域, 由该区域规则进行匹配决定是否放行

[root@Firewalld ~]# firewall-cmd --permanent --add-source=192.168.56.0/24 --zone=home
[root@Firewalld ~]# firewall-cmd --permanent --add-port=9000/tcp --zone=home
success
[root@Firewalld ~]# firewall-cmd --reload
success
//检查相关规则
[root@Firewalld ~]# firewall-cmd --get-active-zoneshome
  sources: 192.168.56.0/24public
  interfaces: eth0 br0 vnet0

4.查询firewald相关规则

//查看当前处于活动的区域
[root@Firewalld ~]#  firewall-cmd --get-active-zoneshome  //数据包的源IP是192.168.69网段走home区域
  sources: 192.168.69.0/24work  //默认区域, eth0接口流量都由work区域过滤
  interfaces: eth0 br0 vnet0
//查看指定区的明细
[root@liyanzhao ~]# firewall-cmd  --list-all --zone=workwork (active)
  target: defaulticmp-block-inversion: nointerfaces: eth0
  sources:
  services: ssh dhcpv6-client 'http'ports:
  protocols:
  masquerade: noforward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

5.查询public区域是否允许请求SSH HTTPS协议的流量

[root@Firewalld ~]# firewall-cmd --zone=public --query-service=sshyes
[root@Firewalld ~]# firewall-cmd --zone=public --query-service=httpsno

5.防火墙服务访问策略

1.配置防火墙, 允许请求http https协议的流量设置为永久允许,并立即生效

[root@Firewalld ~]# firewall-cmd --permanent --add-service=http --add-service=https
success
//重启加载生效
[root@Firewalld ~]# firewall-cmd --reloadsuccess
//检查相关配置
[root@Firewalld ~]# firewall-cmd --list-servicesssh dhcpv6-client 'http https'

2.配置防火墙, 允许请求php-fpm服务的流量设置为永久允许,并立即生效

[root@Firewalld ~]# cd /usr/lib/firewalld/services///拷贝相应的xml文件[
root@Firewalld services]# cp http.xml php-fpm.xml//修改端口为9000
[root@Firewalld services]# cat php-fpm.xml <?xml version="1.0"encoding="utf-8"?>
<service>
  <short>PHP-FPM</short>
  <description> php-fpm </description>
  <port protocol="tcp"port="9000"/>
</service>
//增加
[root@Firewalld ~]# firewall-cmd --permanent --add-service=php-fpm//查看
[root@Firewalld ~]# firewall-cmd --list-servicesssh dhcpv6-client 'http https php-fpm'//安装php-fpm, 并监听9000端口, 注意修改php-fpm端口监听在本网段
[root@Firewalld ~]# yum install php-fpm -y
[root@Firewalld ~]# systemctl start php-fpm//外网telnet端口检测
~ telnet  192.168.56.119000
Trying 192.168.56.11...
Connected to 192.168.56.11.
Escape character is'^]'.

3.配置防火墙, 请求https协议的流量设置为永久拒绝,并立即生效

[root@Firewalld ~]# firewall-cmd --permanent --remove-service=https --remove-service=php-fpm --zone=publicsuccess
[root@Firewalld ~]# firewall-cmd --reloadsuccess
//检查当前活动服务
[root@Firewalld ~]# firewall-cmd --list-servicessh dhcpv6-client http

6.防火墙端口访问策略

1.配置防火墙, 访问8080/tcp 8080/udp端口的流量策略设置为永久允许, 并立即生效

//添加firewalld规则
[root@Firewalld ~]# firewall-cmd --permanent --add-port=8080/udp --add-port=8080/tcp//动态加载
[root@Firewalld ~]# firewall-cmd --reloadsuccess
//检查端口规则
[root@Firewalld ~]# firewall-cmd --list-ports8080/tcp 8080/udp
2.配置防火墙, 访问8080/udp的端口流量设置为永久拒绝,并立即生效
[root@Firewalld ~]# firewall-cmd --permanent --remove-port=8080/udpsuccess
[root@Firewalld ~]# firewall-cmd --reload && firewall-cmd --list-portssuccess
8080/tcp

7.防火墙端口转发策略

端口转发是指传统的目标地址映射,实现外网访问内网资源
流量转发命令格式为

firewall-cmd --permanent --zone=<区域> --add-forward-port=port=<源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标IP地址>

1.把访问本机555/tcp端口的流量转发到22/tcp端口,要求当前和长期有效

[root@Firewalld ~]# firewall-cmd --permanent --zone=public --add-forward-port=port=555:proto=tcp:toport=22:toaddr=192.168.56.11success
[root@Firewalld ~]# firewall-cmd --reloadsuccess

2.把访问本机6666/tcp端口的流量转发到80/tcp端口,要求当前和长期有效

[root@Firewalld ~]# firewall-cmd --permanent --add-port=80/tcp[root@Firewalld ~]# firewall-cmd --permanent --zone=public --add-forward-port=port=6666:proto=tcp:toport=80:toaddr=192.168.56.11success
[root@Firewalld ~]# firewall-cmd --reloadsuccess

3.移除本地555/tcp端口转发策略, 要求当前和长期有效

[root@Firewalld ~]# firewall-cmd --remove-forward-port=port=555:proto=tcp:toport=22:toaddr=192.168.56.11success
[root@Firewalld ~]# firewall-cmd --reloadsuccess

8.防火墙富规则策略

firewalld中的富规则表示更细致、更详细的防火墙策略配置,它可以针对系统服务、端口号、源地址和目标地址等诸多信息进行更有针对性的策略配置, 优先级在所有的防火墙策略中也是最高的。
富规则帮助手册

man firewall-cmd
man firewalld.richlanguage
           rule
             [source]
             [destination]
             service|port|protocol|icmp-block|masquerade|forward-port
             [log]
             [audit]
             [accept|reject|drop]
rule [family="ipv4|ipv6"]
sourceaddress="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"] [limitvalue="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       //列出指定区里的所有富规则
--list-all 和 --list-all-zones 也能列出存在的富规则

1.允许来自于192.168.69.113/32主机请求8081-8083端口, 当前和永久生效

[root@Firewalld ~]# firewall-cmd --zone=public --permanent \--add-rich-rule='rule family=ipv4 source address=192.168.69.113/32 port port=8081-8083 protocol=tcp accept'success
[root@Firewalld ~]# firewall-cmd --reloadsuccess

2.拒绝来自192.168.69.113/32主机所有的请求, 当前和永久生效

[root@Firewalld ~]# firewall-cmd --permanent --zone=public \--add-rich-rule='rule family=ipv4 source address=192.168.69.113/32 reject'success
[root@Firewalld ~]# firewall-cmd --reloadsuccess

3.拒绝来自于192.168.69.0/24网段请求ssh服务, 当前和永久生效

[root@Firewalld ~]# firewall-cmd --permanent --zone=public \--add-rich-rule='rule family=ipv4 source address=192.168.69.0/24 service name=ssh reject'success
[root@Firewalld ~]# firewall-cmd --reloadsuccess

4.限制所有请求ftp服务流量, 每分钟1个并发, 当前和永久生效

[root@Firewalld ~]# firewall-cmd --permanent --zone=public \--add-rich-rule='rule service name=ftp log prefix="ftp " level=notice limit value=1/m accept'success 
[root@Firewalld ~]# firewall-cmd --reloadsuccess
//开启多个ftp连接, 查看日志
[root@Firewalld ~]# tail -f /var/log/messageApr 2111:16:04kvm-node1 kernel: ftp IN=br0 OUT= MAC=00:0c:29:72:6a96:00:50:56:c0:00:02:08:00SRC=192.168.56.1DST=192.168.56.11LEN=64TOS=0x00PREC=0x00TTL=64ID=21160DF PROTO=TCP 
SPT=57050DPT=21WINDOW=65535RES=0x00SYN URGP=0

5.防止规则设定错误导致网络连接断开,用于调试,规则在300秒后失效

[root@Firewalld ~]# firewall-cmd \--add-rich-rule='rule family=ipv4 source address=192.168.69.113/32 service name=ssh reject'--timeout=300

6.将192.168.69.113/32主机访问443/tcp的数据包转发到本机的22/tcp端口, 当前和永久生效

//端口转发规则
[root@Firewalld ~]# firewall-cmd --permanent --zone=public \--add-rich-rule='rule family=ipv4 source address=192.168.56.1/32 forward-port port=443 protocol=tcp to-port=22'success
[root@Firewalld ~]# firewall-cmd --reloadsuccess

7.允许192.168.69.113/32访问httpd, 并且记录日志, 日志级别为notice,日志前缀为NEW HTTP, 限制每秒最多3个并发, 当前和永久生效

# yum install httpd# systemctl start httpd# systemctl enable httpd
[root@Firewalld soft]# firewall-cmd --permanent --zone=public \--add-rich-rule='rule family=ipv4 source address=192.168.69.113/32 service name=http,https log level=notice prefix="New Http " limit value="3/s" accept'success
[root@Firewalld soft]# firewall-cmd --reloadsuccess

Centos7防火墙配置rich-rule实现IP端口限制访问

最初配置3306端口允许访问,后来根据业务需求,需要严格限制仅允许指定IP访问3306端口。
可以通过防火墙配置rich-rule实现。

Step1:删除原有的3306端口访问规则

firewall-cmd --permanent --remove-port=3306/tcp

Step2:添加规则

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address=" 192.168.1.100" port protocol="tcp" port="3306" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="127.0.0.1" port protocol="tcp" port="3306" accept"

Step3:生效规则

firewall-cmd --reload

Step4:查看结果

firewall-cmd --list-all

附:如果需要删除规则,参考

firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address=" 192.168.1.100" port protocol="tcp" port="3306" accept"
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="127.0.0.1" port protocol="tcp" port="3306" accept"
谨此笔记,记录过往。凭君阅览,如能收益,莫大奢望。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇