前言
在CentOS Firwalld 基础配置中,介绍了防火墙的几种状态查询和开启,以及保存并执行配置。
但是Firewalld在实际使用之中,还有各种端口控制和端口转发等等相关指令。
这篇主要就是针对这种指令深一步了解和学习。
基础篇
下面主要是两个相关配置的基础篇。
CentOS Firewalld 防火墙基础配置 (zinyan.com)
Firewalld zones区域和icmptypes详细介绍 (zinyan.com)
1.控制端口和服务
在Firwalld之中,可以通过两种方式控制端口的开放:
- 指定端口号的开启与关闭
- 指定服务名的开启与关闭
例如,我们要启动https服务,那么就会自动帮我们开启443端口。我们要启动http服务就会自动帮我们开启80端口。这种我们可以直接通过服务名进行启动。如果我们知道端口也可以直接通过端口启动。
但是要注意:通过服务名启动的需要通过服务名进行关闭。通过端口号启动的,就需要通过端口号关闭
Firewalld不支持所有的端口号都通过服务名进行启动与关闭,具体支持哪些。
我们可以通过指令:firewall-cmd --get-services
进行查询,列出来的服务我们就能够进行开启和关闭。不用我们记忆相关对应的端口。
示例 service:
#示例,开放mysql服务
firewall-cmd --add-service=mysql
#阻止mysql服务
firewall-cmd --remove-service=mysql
#查看开放了哪些服务
firewall-cmd --list-services
# firewall-cmd 默认支持的服务
firewall-cmd --get-services
示例 port:
#开放通过3306端口的tcp访问
firewall-cmd --add-port=3306/tcp
#阻止通过3306端口的tcp访问
firewall-cmd --remove-port=80/tcp
#开放通过233端口的udp访问
firewall-cmd --add-port=233/udp
#阻止通过233端口的udp访问
firewall-cmd --remove-port=233/udp
#查看已经开放的所有端口
firewall-cmd --list-ports
上面的开放关闭在重启之后会被重置。我们如果需要重启后仍然生效。就需要在上面添加 :--permanent
字段。
例如:永久开放1723端口的tcp访问。
firewall-cmd --permanent --add-port=1723/tcp
2.IP伪装
防火墙可以实现伪装ip的功能。端口转发就是利用了ip伪装。
例如各种代理服务的ip伪装。
实例:
# 检查是否允许伪装IP
firewall-cmd --query-masquerade
# 允许防火墙伪装IP
firewall-cmd --add-masquerade
# 禁止防火墙伪装IP
firewall-cmd --remove-masquerade
注意: 你如果设置允许ip伪装时,添加了--permanent
。那么你禁止的是也要加上--permanent
。
3.端口转发
端口转发可以将指定地址访问指定的端口时,将流量转发至指定地址的指定端口。
转发的目的如果不指定ip的话就默认为本机。如果指定了ip却没指定端口,则默认使用来源端口。
示例:
port
是入口端口,转发到toport
端口
# 将80端口的流量转发至8080端口,后面没有指定ip就是是本机ip。如果指定ip 就会转发给指定服务
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080
# 将80端口的流量请求,直接转发给指定的ip地址。会默认访问这个ip地址的80端口。
firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.0.1
# 将80端口的流量请求,直接转发给指定的ip地址的指定端口号8080。
firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.0.1:toport=8080
端口转发的使用场景:
- 我们想隐藏端口时,就可以通过端口转发。将实际端口隐藏起来,访问一个自定义端口,提高安全性。避免端口攻击
- 端口转发还能实现流量分发。可以通过ip地址,把访问的流量发送给不同的服务器处理。
我们在执行端口转发的时候,如果是服务器内端口转发,例如上面的例子中80端口转8080端口。
我们直接配置即可。
但是如果是服务器之间的端口转发。例如上面的例子中,指定了转发ip的情况、我们就需要开启ip伪装功能。才能正常转发,否则服务器键端口转发就不能成功发送。
4.NAT 地址伪装
NAT(NetworkAddressTranslation,网络地址转换),其作用是将私网的设备IP转换为公网设备IP,使得私网的设备可以访问公网以获取相应的服务。
更详细的NAT概念。那就复杂了。如果有感兴趣的小伙伴可以自行去了解。
下面主要是介绍如何在Firewalld中配置NAT伪装,以及相关配置而已。
在Firewalld中,通过规则和策略也就是rules 和passthroughs来实现的。下面也主要介绍这两个参数
direct 相关函数
说明:其中的花括号是选项,就是后面的参数在这三个中选择。后面的 table 或者chain就是具体的函数值了。
chains 链
查询所有的Chains 链:firewall-cmd --direct --get-all-chains
获取指定表中的Chains:firewall-cmd --direct --get-chains {ipv4|ipv6|eb} <table>
移除指定表中的Chains: firewall-cmd --direct --remove-chain {ipv4|ipv6|eb} <table> <chain>
查询Chains是否被添加到表中:firewall-cmd --direct --query-chain {ipv4|ipv6|eb} <table> <chain>
rules 策略规则
获取所有的策略规则:firewall-cmd --direct --get-all-rules
获取指定表中的指定链chain中的规则:firewall-cmd --direct --get-rules {ipv4|ipv6|eb} <table> <chain>
在指定表和指定链中添加rules策略:firewall-cmd --direct --add-rule {ipv4|ipv6|eb} <table> <chain> <priority> <arg>...
从指定表指定链中删除rules:firewall-cmd --direct --remove-rule {ipv4|ipv6|eb} <table> <chain> <priority> <arg>...
从表中删除规则rules:firewall-cmd --direct --remove-rules {ipv4|ipv6|eb} <table> <chain>
查询指定rules是否添加:firewall-cmd --direct --query-rule {ipv4|ipv6|eb} <table> <chain> <priority> <arg>...
passthroughs 直通规则
这个其实就是将Firewall配置的拦截逻辑直接下发到iptables的命令。
因为Firewalld底部也使用了iptables。
通过这个指令下发的防火墙指令优先级要高于其他指令。
获取所有直通传递的规则:firewall-cmd --direct --get-all-passthroughs
移除直通规则:firewall-cmd --direct--remove-passthrough {ipv4|ipv6|eb}
获取指定arg的规则:firewall-cmd --direct --get-passthroughs {ipv4|ipv6|eb} <arg>...
添加一个直通规则:firewall-cmd --direct --add-passthrough {ipv4|ipv6|eb} <arg>...
移除一个指定的直通规则:firewall-cmd --direct --add-passthrough{ipv4|ipv6|eb} <arg>...
查询直通规则是否添加成功:firewall-cmd --direct --query-passthrough {ipv4|ipv6|eb} <arg>...
我们在设置NAT地址转发的时候,大部分情况下,就是用的passthrough来实现的。
示例:
实现内网共享上网的配置效果
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -I POSTROUTING -o eth1 -j MASQUERADE -s 172.25.0.0/24
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -I POSTROUTING -o eth1 -j SNAT -s 172.25.0.0/24 --to-source <外网IP>
firewall-cmd --direct --get-all-passthroughs
而关于passthrough后面的参数介绍,你可以通过iptables了解和学习。
防火墙如果想更深入。需要学习的地方还很多。我这里只是一个简单分享一下
评论区