Last failed login: Tue Mar 22 09:34:03 CST 2022 from 61.177.173.26 on ssh:notty There were 4284 failed login attempts since the last successful login.Last login: Mon Mar 21 21:33:12 2022 from 106.55.203.10[root@VM-16-5-centos ~]# uname -a //命令查询系统情况Linux VM-16-5-centos 3.10.0-1160.59.1.el7.x86_64 #1 SMP Wed Feb 23 16:47:03 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux [root@VM-16-5-centos ~]# cat /etc/re cat: /etc/re: No such file or directory [root@VM-16-5-centos ~]# cat /etc/re redhat-release resolv.conf cat: /etc/re: No such file or directory cat: redhat-release: No such file or directory cat: resolv.conf: No such file or directory [root@VM-16-5-centos ~]# cat /etc/redhat-release //查询系统版本号 CentOS Linux release 7.9.2009 (Core) [root@VM-16-5-centos ~]# systemctl status fieewalld Unit fieewalld.service could not be found. [root@VM-16-5-centos ~]# systemctl status firewalld //查询端口防火墙情况● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2022-03-21 21:08:51 CST; 12h ago Docs: man:firewalld(1) Main PID: 7580 (firewalld) CGroup: /system.slice/firewalld.service └─7580 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid Mar 21 21:08:50 VM-16-5-centos systemd[1]: Starting firewalld - dynamic firewall daemon...Mar 21 21:08:51 VM-16-5-centos systemd[1]: Started firewalld - dynamic firewall daemon.Mar 21 21:08:51 VM-16-5-centos firewalld[7580]: WARNING: AllowZoneDrifting is enabled. This is considered an insecure configuration option. It will be removed in a future release. Please consid...abling it now.Hint: Some lines were ellipsized, use -l to show in full.[root@VM-16-5-centos ~]# history //查询系统以往执行命令 1 22/03/22 09:34:10 2 20/02/21 14:52:21 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh 9fb8650e // 安装宝塔程序 3 20/02/21 20:30:49 /etc/init.d/bt default //查询宝塔安装提示 4 16/03/22 11:47:13 sudo apt-get install redir -y //安装redir转发程序 5 16/03/22 17:19:11 bash <(curl -s -L //安装 minperproxy转发程序 6 21/03/22 09:38:09 bash <(curl -s -L https://urlzs.com/qKpni) 7 21/03/22 09:38:35 bash <(curl -s -L https://urlzs.com/qKpni) 8 21/03/22 10:50:20 bash <(curl -s -L https://urlzs.com/qKpni) 9 21/03/22 10:58:11 bash <(curl -s -L https://urlzs.com/qKpni) 10 21/03/22 21:02:04 uname -a //命令查询系统情况 11 21/03/22 21:02:26 cat /etc/redhat-release //查询系统版本号 12 21/03/22 21:02:35 systemctl status firewalld //查询端口防火墙情况 13 21/03/22 21:02:59 history //查询系统以往执行命令 14 21/03/22 21:05:04 ping btc.f2pool.com //ping btc 鱼池矿池 15 21/03/22 21:08:50 systemctl start firewalld 16 21/03/22 21:08:58 systemctl status firewalld //查询端口防火墙情况 17 21/03/22 21:09:07 firewall-cmd --list-all //查询端口使用情况 18 21/03/22 21:11:00 #firewall-cmd --add-rich-rule=' rule family=ipv4 forward-port port=1314 protocol=tcp to-port=1314 to-addr= 19 21/03/22 21:11:14 ping btc.f2pool.com // ping 矿池地址ip 20 21/03/22 21:12:19 firewall-cmd --add-rich-rule=' rule family=ipv4 forward-port port=1314 protocol=tcp to-port=1314 to-addr=172.65.217.174' //中转矿池ip success //成功 21 21/03/22 21:12:26 firewall-cmd --add-rich-rule=' rule family=ipv4 forward-port port=1314 protocol=tcp to-port=1314 to-addr=172.65.217.174' --permanent //永久中转矿池ip 22 21/03/22 21:12:43 firewall-cmd --add-masquerade //错误命令 23 21/03/22 21:12:49 firewall-cmd --add-masquerade --permanent //#防火墙命令-- 添加 伪装--永久 Warning: ALREADY_ENABLED: masquerade //警告:已启用:伪装 success //成功 24 21/03/22 21:12:58 ip a show 25 21/03/22 21:33:19 history 26 21/03/22 21:33:45 ping ltc.f2pool.com 27 21/03/22 21:35:04 firewall-cmd --add-rich-rule=' rule family=ipv4 forward-port port=8888 protocol=tcp to-port=8888 to-addr=172.65.249.114' 28 21/03/22 21:35:12 firewall-cmd --add-rich-rule=' rule family=ipv4 forward-port port=8888 protocol=tcp to-port=8888 to-addr=172.65.249.114' --permanent 29 22/03/22 09:34:31 uname -a 30 22/03/22 09:37:17 cat /etc/re 31 22/03/22 09:38:10 cat /etc/re redhat-release resolv.conf 32 22/03/22 09:38:42 cat /etc/redhat-release 33 22/03/22 09:39:42 systemctl status fieewalld 34 22/03/22 09:40:28 systemctl status firewalld 35 22/03/22 09:42:43 history[root@VM-16-5-centos ~]# 96 22/03/22 17:48:50 cat /etc/firewalld/zones/public.xml //进入文件 97 22/03/22 17:50:22 vim /etc/firewalld/zones/public.xml //查看文件 o打开 e编辑 98 22/03/22 17:52:33 firewall-cmd --reload //重启配置文件 99 22/03/22 17:52:37 firewall-cmd --list-all //查询端口使用情况 100 22/03/22 17:48:57 vim /etc/firewalld/zones/public.xml
开放TCP/UDP端口:
firewall-cmd --zone=public --add-port=端口/tcp --permanent firewall-cmd --zone=public --add-port=端口/udp --permanent
启用转发端口:
firewall-cmd --add-masquerade --permanent
添加TCP/UDP端口转发:
firewall-cmd --add-forward-port=port=本地端口:proto=tcp:toaddr=目的IP:toport=目的端口 --permanent firewall-cmd --add-forward-port=port=本地端口:proto=udp:toaddr=目的IP:toport=目的端口 --permanent
按服务放行
firewall-cmd --get-services #查询所有支持的服务 firewall-cmd --query-service ftp #查询是否支持ftp服务,返回yes或者no firewall-cmd --zone=public --add-service=http --permanent #放行http服务
其实一个服务对应一个端口,每个服务对应
所以当修改了服务的默认端口后,仍希望通过放行端口来实现,则需要将对应服务 xml
中端口同步修改。
禁用端口&删除转发
删除TCP/UDP端口:
firewall-cmd --zone=public --remove-port=端口/tcp --permanent firewall-cmd --zone=public --remove-port=端口/udp --permanent
删除端口转发:
#禁用转发端口 firewall-cmd --remove-masquerade --permanent #删除TCP端口转发 firewall-cmd --remove-forward-port=port=本地端口:proto=tcp:toaddr=目的IP:toport=目的端口 --permanent #删除UDP端口转发 firewall-cmd --remove-forward-port=port=本地端口:proto=udp:toaddr=目的IP:toport=目的端口 --permanent
常规操作命令
应用配置:firewall-cmd --reload
启动防火墙:systemctl start firewalld
开机自启动:systemctl enable firewalld
关闭防火墙:systemctl stop firewalld
关闭开机自启动:systemctl disable firewall
1.开放8056端口:
firewall-cmd --add-port=8056/tcp
2.二转发端口,将本服务的8056端口转发到ip地址为XXX.XX.XX.XXX的3356端口上,只能使用IP地址,不能使用主机名:
firewall-cmd --permanent --zone=public --add-forward-port=port=8056:proto=tcp:toaddr=xxx.xx.xx.xxx:toport=3356
3.重新启动服务,让规则生效:
systemctl start firewalld.service //方法一,重新启动 firewall-cmd --reload //方法二,重新加载
常用命令:
firewall-cmd --zone=public --list-ports -列出所有类型public 的端口 firewall-cmd --zone=public --list-ports -列出所有类型public 的端口 firewall-cmd --list-ports --列出所有信息 firewall-cmd --remove-port=8056/tcp --临时删除端口 firewall-cmd --zone=public --remove-port=8005/tcp --permanent --永久删除卡对外开放的端口 firewall-cmd --permanent --zone=public --remove-forward-port=port=8056:proto=tcp:toaddr=xxx.xx.xx.xxx:toport=3356 --删除转发规则
一、firewalld 守护进程
firewall-cmd命令需要firewalld进程处于运行状态。我们可以使用systemctl status/start/stop/restart firewalld来控制这个守护进程。firewalld进程为防火墙提供服务。
当我们修改了某些配置之后(尤其是配置文件的修改),firewall并不会立即生效。可以通过两种方式来激活最新配置systemctl restart firewalld
和firewall-cmd --reload
两种方式,前一种是重启firewalld服务,建议使用后一种“重载配置文件”。重载配置文件之后不会断掉正在连接的tcp会话,而重启服务则会断开tcp会话。
二、控制端口/服务
可以通过两种方式控制端口的开放,一种是指定端口号另一种是指定服务名。虽然开放http服务就是开放了80端口,但是还是不能通过端口号来关闭,也就是说通过指定服务名开放的就要通过指定服务名关闭;通过指定端口号开放的就要通过指定端口号关闭。还有一个要注意的就是指定端口的时候一定要指定是什么协议,tcp还是udp。知道这个之后以后就不用每次先关防火墙了,可以让防火墙真正的生效。
三、伪装IP
防火墙可以实现伪装IP的功能,下面的端口转发就会用到这个功能。
四、端口转发
端口转发可以将指定地址访问指定的端口时,将流量转发至指定地址的指定端口。转发的目的如果不指定ip的话就默认为本机,如果指定了ip却没指定端口,则默认使用来源端口。
如果配置好端口转发之后不能用,可以检查下面两个问题:
比如我将80端口转发至8080端口,首先检查本地的80端口和目标的8080端口是否开放监听了
其次检查是否允许伪装IP,没允许的话要开启伪装IP
当我们想把某个端口隐藏起来的时候,就可以在防火墙上阻止那个端口访问,然后再开一个不规则的端口,之后配置防火墙的端口转发,将流量转发过去。
端口转发还可以做流量分发,一个防火墙拖着好多台运行着不同服务的机器,然后用防火墙将不同端口的流量转发至不同机器。
一般情况下
放行端口这样操作就行了
#重载firewall配置文件
进阶操作:
firewall-cmd
Linux上新用的防火墙软件,跟iptables差不多的工具
补充说明
firewall-cmd 是 firewalld的字符界面管理工具,firewalld是centos7的一大特性,最大的好处有两个:支持动态更新,不用重启服务;第二个就是加入了防火墙的“zone”概念。
firewalld跟iptables比起来至少有两大好处:
firewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效。
firewalld在使用上要比iptables人性化很多,即使不明白“五张表五条链”而且对TCP/IP协议也不理解也可以实现大部分功能。
firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现,也就是说firewalld和 iptables一样,他们的作用都是用于维护规则,而真正使用规则干活的是内核的netfilter,只不过firewalld和iptables的结 构以及使用方法不一样罢了。
命令格式
firewall-cmd [选项 ... ]
选项
通用选项
-h, --help # 显示帮助信息;-V, --version # 显示版本信息. (这个选项不能与其他选项组合);-q, --quiet # 不打印状态消息;
状态选项
--state # 显示firewalld的状态;--reload # 不中断服务的重新加载;--complete-reload # 中断所有连接的重新加载;--runtime-to-permanent # 将当前防火墙的规则永久保存;--check-config # 检查配置正确性;
日志选项
--get-log-denied # 获取记录被拒绝的日志;--set-log-denied=<value> # 设置记录被拒绝的日志,只能为 'all','unicast','broadcast','multicast','off' 其中的一个;
实例
# 安装firewalldyum install firewalld firewall-config systemctl start firewalld # 启动systemctl stop firewalld # 停止systemctl enable firewalld # 启用自动启动systemctl disable firewalld # 禁用自动启动systemctl status firewalld # 或者 firewall-cmd --state 查看状态# 关闭服务的方法# 你也可以关闭目前还不熟悉的FirewallD防火墙,而使用iptables,命令如下:systemctl stop firewalld systemctl disable firewalld yum install iptables-services systemctl start iptables systemctl enable iptables
配置firewalld
firewall-cmd --version # 查看版本firewall-cmd --help # 查看帮助# 查看设置:firewall-cmd --state # 显示状态firewall-cmd --get-active-zones # 查看区域信息firewall-cmd --get-zone-of-interface=eth0 # 查看指定接口所属区域firewall-cmd --panic-on # 拒绝所有包firewall-cmd --panic-off # 取消拒绝状态firewall-cmd --query-panic # 查看是否拒绝firewall-cmd --reload # 更新防火墙规则firewall-cmd --complete-reload# 两者的区别就是第一个无需断开连接,就是firewalld特性之一动态添加规则,第二个需要断开连接,类似重启服务# 将接口添加到区域,默认接口都在publicfirewall-cmd --zone=public --add-interface=eth0# 永久生效再加上 --permanent 然后reload防火墙 # 设置默认接口区域,立即生效无需重启firewall-cmd --set-default-zone=public# 查看所有打开的端口:firewall-cmd --zone=dmz --list-ports# 加入一个端口到区域:firewall-cmd --zone=dmz --add-port=8080/tcp# 若要永久生效方法同上 # 打开一个服务,类似于将端口可视化,服务需要在配置文件中添加,/etc/firewalld 目录下有services文件夹,这个不详细说了,详情参考文档firewall-cmd --zone=work --add-service=smtp # 移除服务firewall-cmd --zone=work --remove-service=smtp# 显示支持的区域列表firewall-cmd --get-zones# 设置为家庭区域firewall-cmd --set-default-zone=home# 查看当前区域firewall-cmd --get-active-zones# 设置当前区域的接口firewall-cmd --get-zone-of-interface=enp03s# 显示所有公共区域(public)firewall-cmd --zone=public --list-all# 临时修改网络接口(enp0s3)为内部区域(internal)firewall-cmd --zone=internal --change-interface=enp03s# 永久修改网络接口enp03s为内部区域(internal)firewall-cmd --permanent --zone=internal --change-interface=enp03s
服务管理
# 显示服务列表 Amanda, FTP, Samba和TFTP等最重要的服务已经被FirewallD提供相应的服务,可以使用如下命令查看: firewall-cmd --get-services# 允许SSH服务通过firewall-cmd --new-service=ssh# 禁止SSH服务通过firewall-cmd --delete-service=ssh# 打开TCP的8080端口firewall-cmd --enable ports=8080/tcp# 临时允许Samba服务通过600秒firewall-cmd --enable service=samba --timeout=600# 显示当前服务firewall-cmd --list-services# 添加HTTP服务到内部区域(internal)firewall-cmd --permanent --zone=internal --add-service=http firewall-cmd --reload # 在不改变状态的条件下重新加载防火墙
端口管理
# 打开443/TCP端口firewall-cmd --add-port=443/tcp# 永久打开3690/TCP端口firewall-cmd --permanent --add-port=3690/tcp# 永久打开端口好像需要reload一下,临时打开好像不用,如果用了reload临时打开的端口就失效了# 其它服务也可能是这样的,这个没有测试firewall-cmd --reload# 查看防火墙,添加的端口也可以看到firewall-cmd --list-all
直接模式
# FirewallD包括一种直接模式,使用它可以完成一些工作,例如打开TCP协议的9999端口firewall-cmd --direct -add-rule ipv4 filter INPUT 0 -p tcp --dport 9000 -j ACCEPT firewall-cmd --reload
自定义服务管理
选项
(末尾带有 [P only] 的话表示该选项除了与(--permanent)之外,不能与其他选项一同使用!) --new-service=<服务名> 新建一个自定义服务 [P only]--new-service-from-file=<文件名> [--name=<服务名>] 从文件中读取配置用以新建一个自定义服务 [P only]--delete-service=<服务名> 删除一个已存在的服务 [P only]--load-service-defaults=<服务名> Load icmptype default settings [P only]--info-service=<服务名> 显示该服务的相关信息 --path-service=<服务名> 显示该服务的文件的相关路径 [P only]--service=<服务名> --set-description=<描述> 给该服务设置描述信息 [P only]--service=<服务名> --get-description 显示该服务的描述信息 [P only]--service=<服务名> --set-short=<描述> 给该服务设置一个简短的描述 [P only]--service=<服务名> --get-short 显示该服务的简短描述 [P only] --service=<服务名> --add-port=<端口号>[-<端口号>]/<protocol> 给该服务添加一个新的端口(端口段) [P only] --service=<服务名> --remove-port=<端口号>[-<端口号>]/<protocol> 从该服务上移除一个端口(端口段) [P only] --service=<服务名> --query-port=<端口号>[-<端口号>]/<protocol> 查询该服务是否添加了某个端口(端口段) [P only] --service=<服务名> --get-ports 显示该服务添加的所有端口 [P only] --service=<服务名> --add-protocol=<protocol> 为该服务添加一个协议 [P only] --service=<服务名> --remove-protocol=<protocol> 从该服务上移除一个协议 [P only] --service=<服务名> --query-protocol=<protocol> 查询该服务是否添加了某个协议 [P only] --service=<服务名> --get-protocols 显示该服务添加的所有协议 [P only] --service=<服务名> --add-source-port=<端口号>[-<端口号>]/<protocol> 添加新的源端口(端口段)到该服务 [P only] --service=<服务名> --remove-source-port=<端口号>[-<端口号>]/<protocol> 从该服务中删除源端口(端口段) [P only] --service=<服务名> --query-source-port=<端口号>[-<端口号>]/<protocol> 查询该服务是否添加了某个源端口(端口段) [P only] --service=<服务名> --get-source-ports 显示该服务所有源端口 [P only] --service=<服务名> --add-module=<module> 为该服务添加一个模块 [P only]--service=<服务名> --remove-module=<module> 为该服务移除一个模块 [P only]--service=<服务名> --query-module=<module> 查询该服务是否添加了某个模块 [P only]--service=<服务名> --get-modules 显示该服务添加的所有模块 [P only]--service=<服务名> --set-destination=<ipv>:<address>[/<mask>] Set destination for ipv to address in service [P only]--service=<服务名> --remove-destination=<ipv> Disable destination for ipv i service [P only]--service=<服务名> --query-destination=<ipv>:<address>[/<mask>] Return whether destination ipv is set for service [P only]--service=<服务名> --get-destinations List destinations in service [P only]
控制端口 / 服务
可以通过两种方式控制端口的开放,一种是指定端口号另一种是指定服务名。虽然开放 http 服务就是开放了 80 端口,但是还是不能通过端口号来关闭,也就是说通过指定服务名开放的就要通过指定服务名关闭;通过指定端口号开放的就要通过指定端口号关闭。还有一个要注意的就是指定端口的时候一定要指定是什么协议,tcp 还是 udp。知道这个之后以后就不用每次先关防火墙了,可以让防火墙真正的生效。
firewall-cmd --add-service=mysql # 开放mysql端口firewall-cmd --remove-service=http # 阻止http端口firewall-cmd --list-services # 查看开放的服务firewall-cmd --add-port=3306/tcp # 开放通过tcp访问3306firewall-cmd --remove-port=80tcp # 阻止通过tcp访问3306firewall-cmd --add-port=233/udp # 开放通过udp访问233firewall-cmd --list-ports # 查看开放的端口
伪装 IP
firewall-cmd --query-masquerade # 检查是否允许伪装IPfirewall-cmd --add-masquerade # 允许防火墙伪装IPfirewall-cmd --remove-masquerade# 禁止防火墙伪装IP
端口转发
端口转发可以将指定地址访问指定的端口时,将流量转发至指定地址的指定端口。转发的目的如果不指定 ip 的话就默认为本机,如果指定了 ip 却没指定端口,则默认使用来源端口。 如果配置好端口转发之后不能用,可以检查下面两个问题:
比如我将 80 端口转发至 8080 端口,首先检查本地的 80 端口和目标的 8080 端口是否开放监听了
其次检查是否允许伪装 IP,没允许的话要开启伪装 IP
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 # 将80端口的流量转发至8080firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.0.1 # 将80端口的流量转发至192.168.0.1firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.0.1:toport=8080 # 将80端口的流量转发至192.168.0.1的8080端口
当我们想把某个端口隐藏起来的时候,就可以在防火墙上阻止那个端口访问,然后再开一个不规则的端口,之后配置防火墙的端口转发,将流量转发过去。
端口转发还可以做流量分发,一个防火墙拖着好多台运行着不同服务的机器,然后用防火墙将不同端口的流量转发至不同机器。
博文目录:
一、firewalld高级配置
1、firewalld支持的NAT
2、IP地址伪装
3、端口转发
二、firewalld-cmd高级配置
1、firewalld中理解直接规则
2、使用富语言
3、富规则命令
4、富规则配置举例:
一、firewalld高级配置
1、firewalld支持的NAT
firewalld支持两种类型的NAT:
IP地址伪装;
端口转发;
2、IP地址伪装
地址伪装:通过地址伪装,NAT设备将经过设备的包转发到指定的接收方,同时将通过的数据包的源地址更改为其自己的接口地址。当返回的数据包到达时,会将目的地址修改为原始主机的地址并做路由。地址伪装可以实现局域网多个地址共享单一公网地址上网。类似于NAT技术中的端口多路复用(PAT)。IP地址伪装仅支持ipv4,不支持ipv6。
3、端口转发
端口转发:也可以称之为目的地址转换或端口映射。通过端口转发,将指定IP地址及端口的流量转发到相同计算机上的不同端口,或不同计算机上的端口。一般公司内网的服务器都采用私网地址,然后通过端口转发将使用私网地址的服务器发布到公网上,以便让互联网用户访问。(例如,当接收互联网用户的HTTP请求时,网关服务器判断数据包的目标地址与目标端口,一旦匹配指定规则,则将其目标地址修改为内网真正的服务器地址,从而建立有效连接)。
二、firewalld-cmd高级配置
1、firewalld中理解直接规则
firewalld提供了“direct interface”(直接端口),它允许管理员手动编写的iptables、ip6tables和ebtables规则插入firewalld管理的区域中,适用于应用程序,而不是用户。如果对iptables不太熟,不建议使用直接接口,可能会无意中导致防火墙被***。firewalld保持对所增加项目的追踪,所以他还能质询firewalld和发现使用直接端口模式的程序造成的更改。直接端口通过firewalld-cmd命令中的--direct选项实现。除非将直接规则显式插入firewalld管理的区域,否则将首先解析直接规则,然后再解析其他firewalld规则。
执行以下命令即可添加一些直接规则以将某个IP范围列入黑名单:
2、使用富语言
firewalld的富语言提供了一种不需要了解iptables语法的通过高级语言配置复杂的IPv4和IPv6防火墙规则的机制,为管理员提供了一种表达性语言,通过这种语言,可以表达firewalld的基本语法中未涵盖的自定义防火墙规则。(例如,仅允许从单个IP地址而非通过某个区域路由的所以IP地址连接到服务)。
富规则可用于表达基本的允许/拒绝规则,也可以用于配置记录(面向syslog和auditd),以及端口转发、伪装和速率限制。下面简单看一下表达富规则的基本语法:
规则的每个单一元素都能够以option=value的形式来采用附加参数。
1)规则排序
一旦向某个区域(一般是指防火墙)中添加了多个规则,规则的排序会在很大程度上影响防火墙的行为。对于所有的区域,区域内的规则的基本排序是相同的。如果区域中的任何规则与包均不匹配,通常会拒绝此包,但是区域可能具有不同的默认值。(例如,可信区域将接收任何不匹配的包。此外,在匹配某个记录规则后,将继续正常处理包)。
直接规则是个例外。大部分直接规则将首先进行解析,然后由firewalld进行其他处理,但是直接规则语法允许管理员在任何区域中的任何位置插入任何规则。
2)测试和调试
为了便于测试和调试,几乎所有规则都可以与超时一起添加到运行时配置。当包含超时的规则添加到防火墙时,计时器便针对该规则开始倒计时,一旦规则的计时器到达0秒,便从运行时配置中删除该规则。
在使用远程防火墙时,使用超时会是一种极其有用的工具,特别是在测试更复制的规则集时。如果规则有效,则管理员可以再次添加该规则;如果规则没有按照预期运行,甚至可能将管理员锁定而使其无法进入系统,那么规则将被自动删除,以允许管理员可以继续工作。通过在启用规则的firewalld-cmd命令的结尾追加选项--timeout<TIMEINSECONDS>可向运行时规则中添加超时。
3、富规则命令
firewalld-cmd有四个选项可以用于处理富规则,所有这些选项都可以同常规的--permanent或--zone=<ZONE>选项组合使用,如下所示:
--add-rich-rule='RULE' #向指定区域添加RULE,如果没有指定区域,则为默认区域;
--remove-rich-rule='RULE' #从指定区域中删除RULE,如果没有指定区域,则为默认区域;
--query-rich-rule='RULE' #查询RULE是否已添加到指定区域,如果未指定区域,则为默认区域。规则存在,则返回0,否则返回1;
--list-rich-rules #输出指定区域的所有富规则,如果未指定区域,则为默认区域;
任何已配置的富规则都会显示在firewall-cmd --list-all 和 firewall-cmd --list-all-zone的输出结果中。具有语法解释如下所示:
source:限制源IP地址,源地址可以是一个IPv4、IPv6地址或者一个网络地址段;
destination:限制目标地址,目标地址使用跟源地址相同的语法;
element:要素,该项只能是以下几种要素类型之一:service、port、protocol、icmp-block、masquerade和forward-port;
①service:服务名称是firewalld提供的其中一种服务。要获得支持的服务列表,输入以下命令:firewalld-cmd--get-services。如果一个服务提供了一个目标地址,它和规则中的目标地址冲突,则会导致一个错误。命令格式为:service name=service_name;
②port:端口可以是一个独立端口数字,或者是端口范围,如5060~5062.协议为TCP或UDP。命令格式为:port port=number_or_range protocol=protocol;
③protocol:协议,可以是一个协议ID号,或者一个协议名。查询可用协议,请查看/etc/protocols。命令格式为:protocol value=protocol_name_or_ID;
④icmp-block:阻断一盒或多个ICMP类型。要获得支持的ICMP类型列表,输入firewalld-cmd--get-icmptypes命令即可查看。命令格式为:icmp-blick name=icmptype_name;
⑤masquerade:规则里的IP伪装。用源地址而部署目的地址来把伪装限制在一个范围内;
⑥forward-port:将指定的TCP或UDP协议的数据包转发到本机的其他端口,或另一台机器,或另一台机器上的其他端口。port和to-port可以是一个单独的端口数字,或一个端口范围。而目的地址是一个简单的IP地址。命令格式为:forward-port port=number_or_range protocol=protocol to-port=number_or_range to-addr=address;
log:注册有内核日志的连接请求到规则中,如系统日志。可以定义一个前缀文本把日志信息作为前缀加入。日志等级可以是emerg、alert、crit、error、warning、notice、info或者debug中的一个。可以选择日志的用法,按以下方式限制日志:log [prefix text] [level=log level] limint value=rate/duration。持续时间的单位为s、m、h、d。s表示秒,m表示分钟,h表示小时,d表示天。最大限定值是1/d(每天最多有一条日志进入);
audit:审核,审核类型可以是accept、reject或drop中的一种,但不能再audit命令后指定,因为审核类型将会从规则动作中自动收集。审核不包含自身参数,但可以选择性地增加限制。审核的使用是可选择的;
accept|reject|drop:可以是accept、reject或drop中的一个行为。命令格式为:accept | reject连接将被拒绝,发起端将接到一个拒绝信息。指定drop时,所有数据包会被丢弃,并且不会向发起端发送任何信息;
4、富规则配置举例:
1)为认证报头协议AH使用新的IPv4和IPv6连接:
2)允许新的IPv4和IPv6连接FTP,并使用审核每分钟记录一次:
3)允许来自192.168.0.0/24地址的TFTP协议的IPv4连接,并且使用系统日志每分钟记录一次:
4)为RADIUS协议拒绝所有来自1:2:3:4:6::的新IPv6连接,日志前缀为“dns”,级别为“info”,并每分钟最多记录3次。接受来自其他发起端新的IPv6连接:
5)将源192.168.2.2地址加入白名单,以允许来自这个源地址的所有连接:
6)拒绝来自piblic区域中IP地址192.168.0.11的所有流量:
7)丢弃来自默认区域中任何位置的所有传入的ipsec esp协议包:
8)在192.168.1.0/24子网的dmz区域中,接收端口7900~7905的所有TCP包:
9)接收从work区域到SSH的新连接,以notice级别且每分钟最多三条消息的方式将新连接记录到syslog:
10)在接下来的5min内,拒绝从默认区域中的子网192.168.2.0/24到DNS的新连接,并且拒绝的连接将记录到audit系统,且每小时最多一条消息:
下
已有 1275 位网友参与,快来吐槽:
发表评论