学习了华为防火墙知识后,回想起Linux中也有很多相似的概念,同时刚好碰到一个项目前期没有考虑购买路由器/防火墙,所以就想到了利用Linux自带的Firewalld来实现防火墙的功能和NAT。
1.启用IP转发更改配置
sudo vim /etc/sysctl.confnet.ipv4.ip_forward = 1
使能配置
sysctl -p #命令生效
2.修改网卡的zonesudo firewall-cmd --permanent --zone=external --change-interface=ens0sudo firewall-cmd --permanent --zone=internal --change-interface=ens1
3.设置SNAT(IP地址转换)设置特定区域的SNAT——IP伪装。
sudo firewall-cmd --zone=external --add-masquerade --permanent
查看特定区域的SNAT是否允许
sudo firewall-cmd --zone=external --query-masquerade --permanent
删除特定区域的SNAT功能
sudo firewall-cmd --zone=external --delete-masquerade --permanent
4.设置NAT规则SNAT内部访问外部,将source ip为src_net网段来的数据包伪装成external(即ens0)的地址
sudo firewall-cmd --zone=external --permanent \--add-rich-rule=rule family=ipv4 source address=<src_net/mask> masquerade’
src_net举例:192.168.100.0/24
或者设置NAT规则也可实现(设置POSTROUTING)
sudo firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s <internal_ip|internal_net/mask> -j SNAT --to-source <external_ip>或sudo firewall-cmd --permanent --direct --passthrough ipv4 -t nat POSTROUTING -o ens0 -j MASQUERADE -s <internal_ip|internal_net/mask>
DNAT外部访问内部,将访问本机'external_port'端口流量转发到'internal_ip'
sudo firewall-cmd --zone=external --permanent \--add-forward-port=port=<external_port>:proto=tcp:toaddr=<internal_ip>
或者设置NAT规则也可实现(设置PRERROUTING)
sudo firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A PREROUTING -d <external_ip> -j DNAT --to-destination <internal_ip>
外部访问内部,将访问本机'external_port'端口流量转发到'internal_ip'的'internal_port'
sudo firewall-cmd --zone=external --permanent \--add-forward-port=port=<external_port>:proto=tcp:toport=<internal_port>:toaddr=<internal_ip>
5.重载Firewall使配置生效sudo firewall-cmd --reload
6.其它说明区域的targettarget是就是对该区域内流经的数据包作最终的处理动作,它可以设置为以下选项之一:
- default:不做任何事情
- ACCEPT:接受数据包
- REJECT:拒绝数据包,返回拒绝的信息
- DROP:丢弃数据包,并且不做任何答应
要设置区域的target,使用--zone选项指定区域,并使用--set-target选项指定目标。例如:
firewall-cmd --zone=public --set-target=DROP
信任源IP要允许来自特定IP地址(或范围)的所有传入流量,使用--zone选项指定区域,并使用--add-source选项指定源IP。例如:
firewall-cmd --zone=public --add-source=192.168.100.10