之前使用CentOS时,防火墙一直用的FirewallD。现在系统换成了Debian,防火墙也变成默认的UFW。在使用Cockpit管理面板时,发现它仅支持FirewallD,因此决定继续使用FirewallD吧。
安装
先友情提示一下,如果使用SSH软件连接服务器的话,在安装完成firewalld后会导致连接断开……因为firewallD安装完就作为防火墙生效了。因此在安装firewall之前,建议先禁用UFW:
ufw disable
接下来安装FirewallD:
apt -y instal
apt -y install firewalld
查看是否运行:
firewall-cmd --state
显示running即为正常。
配置
FirewallD有个“区域”的概念,“区域”是针对给定位置或场景(例如家庭、公共、受信任等)可能具有的各种信任级别的预构建规则集。不同的区域允许不同的网络服务和入站流量类型,而拒绝其他任何流量。 首次启用 FirewallD 后,public将是默认区域(拒绝所有连接)。
查看默认的区域
firewall-cmd --get-default-zone
查看当前使用的区域
firewall-cmd --get-active-zones
返回示例:
public
interfaces: eth0
其中,eth0是当前使用的网络适配器。我们还可以将其他网络适配器纳入防火墙管理范围,例如加入ens33。
firewall-cmd --zone=public --add-interface=ens33
允许或者拒绝任意端口
允许12345端口:
firewall-cmd --zone=public --add-port=12345/tcp --permanent
同时增加12345,8080端口:
firewall-cmd --zone=public --add-port={12345,8080}/tcp --permanent
删除12345端口:
firewall-cmd --zone=public --remove-port=12345/tcp --permanent
以上是TCP示例,UDP的话对应替换即可。
更新防火墙规则
修改配置后需要重新加装配置才会生效:
firewall-cmd --reload
遇到了命令执行失败失败问题,”‘/usr/sbin/iptables-restore -w -n’failed”如图:
编辑firewalld配置文件:/etc/firewalld/firewalld.confIndividualCalls=no
改为IndividualCalls=yes
查看所有允许的端口
firewall-cmd --zone=public --list-ports
本地端口转发
将 80 端口的流量转发到 12345 端口:
firewall-cmd --zone="public" --add-forward-port=port=80:proto=tcp:toport=12345
要将端口转发到另外一台服务器上
1、在需要的区域中激活 masquerade:
firewall-cmd --zone=public --add-masquerade
2、添加转发规则。例子中是将 80 端口的流量转发到IP 地址为 :123.123.123.123的远程服务器的8080 端口上。
sudo firewall-cmd --zone="public" --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=123.123.123.123
要删除规则,用 --remove
替换 --add
。