包子V3

导航

 

1.firewalld 启动,停止,状态等基础操作

启动: systemctl start firewalld
查状态:systemctl status firewalld
停止: systemctl disable firewalld
禁用: systemctl stop firewalld

 

2.开机启动firewalld

检查开机是否启动

[root@localhost ~]# systemctl is-enabled firewalld.service
enabled #这个状态应该就是开机启动了

 

设置开机启动/不启动

systemctl enable/disable firewalld.service

 

3.规则使用

查看现有规则

[root@localhost ~]# firewall-cmd --list-all  #猜测应该默认出来的是public,因为好像除了public,好像还有其他的zone,但是默认应该是这个public 生效的。没细细研究

public (active)
target: default
icmp-block-inversion: no
interfaces: eno3
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

 

查看区域信息

 

[root@localhost ~]# firewall-cmd --get-active-zones
public
interfaces: eno3

查看指定接口所属区域

[root@localhost ~]# firewall-cmd --get-zone-of-interface=eno3
public

#####以上两个信息能对应上 之前的猜测中一部分信息是对的,就是网卡接口应该是可以设置在不同的zone里的

 

查看所有打开的端口和服务

firewall-cmd --zone=public --list-ports

firewall-cmd --zone=public --list-services     

#####以上两个命令做了下边的验证验证,比如SSH 是22端口,但是查看的时候 只能查看到一个,这个比iptables 我觉得SB了一些

[root@localhost ~]# firewall-cmd --zone=public --list-ports #无返回信息

[root@localhost ~]# firewall-cmd --zone=public --list-services;
dhcpv6-client ssh

而且你改了ssh默认端口,这个端口也不在ssh已经打开的服务里,所以还是觉得SB了一些,不智能,也不直接,不如iptables 好用,所以意味着下边开放端口的时候如果是协议默认端口应该可以通过service 的方式添加,如果需要开放特殊端口,就需要特殊指定端口号了,总之我觉得需要照着他的规则来,不然就很累

 

接下来开放端口吧

开放端口

[root@localhost ~]# firewall-cmd --zone=public --add-port=80/tcp
success

查看一下

[root@localhost ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eno3
sources:
services: dhcpv6-client ssh
ports: 80/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

 

[root@localhost ~]# firewall-cmd --zone=public --add-port=80/tcp

[root@localhost ~]# firewall-cmd --zone=public --add-service=https
success
[root@localhost ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eno3
sources:
services: dhcpv6-client https ssh
ports: 80/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:

####基本验证,通过--add-port和--add-service 是两个不同的方式,互相不影响,再验证一下

[root@localhost ~]# firewall-cmd --zone=public --add-service=http
success
[root@localhost ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eno3
sources:
services: dhcpv6-client http https ssh
ports: 80/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

####基本完全确认 是否生效,回头再测试了

删除规则

[root@localhost ~]# firewall-cmd --zone=public --remove-port=80/tcp
success
[root@localhost ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eno3
sources:
services: dhcpv6-client http https ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

####删除规则也基本一样通过--remove-port 和--remove-service 是互相不影响的,所以关键问题就是 如果两个都开放的了的时候需要注意检查,别遗留了一个存在的规则没发现,觉得规则没生效

 

好想忘记一个重要的事儿,规则写上了应该只是生效,但是重启会丢失,--permanent 很重要,要记得保存,百度了下,/etc/firewalld/zones/public.xml这个文件会保存规则,(是不是直接写这个就行了,哈哈)

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

 

关于services 都有哪些,可以用下边命令

firewall-cmd --get-services

 

看到有人使用 rich-rule,开始没明白是什么意思,后来好像明白了,但是不知道理解的对不对,有高人可以指点一下,

用这个意思就是说你服务器上有些服务端口是公开开放的,可以用--add-port/service 去添加,这些是完全开放的

但是如果你有一些端口是指定来源开放的时候就需要使用rich-rule 的方式了

比如,你的ssh端口只想对一段或者一个管理IP开放,那就需要设置如下

firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.0.4/24" service name="ssh" accept' '

firewall-cmd --permanent --add-rich-rule 'rule family=ipv4 source address=192.168.0.1/2 port port=22 protocol=tcp accept'  

但是没验证如果加了端口和服务是否对默认的 services 里开放的ssh 有什么影响,自己验证一下吧(我验证了一下,结果是如果不封闭services 中的ssh, 还是能连通的,所以在做细致的规则的时候应该先增加rich-rule再删除services中的服务规则, 不要先删除services中再增加rich-rule,防止把自己先处理了)

 

4.关于端口转发(目前没有场景没经过测试),先看几个命令

firewall-cmd --query-masquerade # 检查是否允许伪装IP
firewall-cmd --add-masquerade # 允许防火墙伪装IP
firewall-cmd --remove-masquerade # 禁止防火墙伪装IP

firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 # 将80端口的流量转发至8080
firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.1.0.1 # 将80端口的流量转发至192.168.0.1
firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.0.1:toport=8080 # 将80端口的流量转发至192.168.0.1的8080端口

 

 

firewall-cmd --permanent --add-rich-rul 'rule family="ipv4" source address="192.168.xx" port port="8080" protocol="tcp" accept'

firewall-cmd --permanent --remove-rich-rul 'rule family="ipv4" source address="192.168.xx" port port="8080" protocol="tcp" accept'

 

 

5.补充一个很重要的

--runtime-to-permanent    #将运行时配置保存为永久配置。这个方面比iptables -save 感觉要好用一些,iptables会改变原有格式。

posted on 2021-06-22 14:29  包子V3  阅读(121)  评论(1编辑  收藏  举报