一、安装Firewall命令
shell yum install firewalld firewalld-config
二、防火墙的基本操作
1、查看防火墙状态
- 使用
systemctl status firewalld命令可以查看firewalld服务的状态。 - 也可以使用
firewall-cmd --state命令直接查看防火墙的状态。
2、开启防火墙
- 临时性开启(重启后失效):
systemctl start firewalld - 永久性开启(即开机启动):
systemctl enable firewalld
3、关闭防火墙
- 临时性关闭(重启后恢复):
systemctl stop firewalld - 永久性关闭(即禁止开机启动):
systemctl disable firewalld
4、重启防火墙
重新加载防火墙的所有配置并应用新的规则:systemctl restart firewalld
5、重新加载防火墙配置
- 不中断现有连接:
firewall-cmd --reload - 中断所有连接(类似重启服务):
firewall-cmd --complete-reload
三、区域(Zone)管理
- 查看所有可用的区域:
firewall-cmd --get-zones - 查看当前激活的区域:
firewall-cmd --get-active-zones - 查看指定区域的详细信息:
firewall-cmd --zone=public --list-all(public是示例区域名,需替换为实际区域名) - 设置默认区域:
firewall-cmd --set-default-zone=public(public是示例区域名) - 添加区域:
firewall-cmd --permanent --new-zone=myzone(myzone是自定义区域名) - 删除区域:
firewall-cmd --permanent --delete-zone=myzone(myzone是自定义区域名)
四、端口(Port)管理
1、查看已开放的端口
firewall-cmd --list-ports(显示当前防火墙会话中开放的端口,包含永久或临时开放的端口,未指定区域则默认为public区域)firewall-cmd --permanent --list-ports(列出在 firewalld 防火墙配置中永久设置的端口)
2、添加指定开放端口
- 永久开放:
firewall-cmd --permanent --zone=public --add-port=80/tcp(80是端口号,tcp是协议类型) - 开放端口范围:
firewall-cmd --permanent --zone=public --add-port=9000-9008/tcp
3、移除指定开放端口
- 永久移除:
firewall-cmd --permanent --zone=public --remove-port=80/tcp - 移除端口范围:
firewall-cmd --permanent --zone=public --remove-port=9000-9008/tcp
4、查询指定开放端口状态
firewall-cmd --zone=public --query-port=80/tcp
五、服务(Service)管理
- 查看已启用的服务:
firewall-cmd --list-services(未指定区域则默认为public区域) - 查看所有可用的服务:
firewall-cmd --get-services - 添加指定服务(永久添加):
firewall-cmd --permanent --zone=public --add-service=http(http是服务名) - 移除指定服务(永久移除):
firewall-cmd --permanent --zone=public --remove-service=http
六、富规则(Rich Rules)
查看已设置的富规则:firewall-cmd --list-rich-rules(未指定区域则默认为public区域)。
添加富规则:例如,只允许特定IP访问特定端口,可以使用如下命令:
firewall-cmd --permanent --zone=public --add-rich-rule="rule family='ipv4' source address='192.168.1.1/24' port protocol='tcp' port='3306' accept"
移除富规则:需要指定与添加时相同的规则字符串来移除。
七、查看当前防火墙配置
1、查看所有默认的区域设置
sudo firewall-cmd --get-default-zone
2、列出所有可用的区域
sudo firewall-cmd --get-zones
3、列出当前激活的区域
sudo firewall-cmd --get-active-zones
4、查看某个区域的所有规则
sudo firewall-cmd --zone=<zone> --list-all
八、修改防火墙配置
1、永久改变默认区域
sudo firewall-cmd --set-default-zone=<new-zone>
2、临时改变默认区域 (重启后会恢复)
sudo firewall-cmd --set-default-zone-to=<new-zone>
3、将接口移动到特定区域
sudo firewall-cmd --permanent --change-zone=<interface> <new-zone>
4、添加端口到指定区域
sudo firewall-cmd --zone=<zone> --add-port=<port>/<protocol> --permanent
5、删除端口
sudo firewall-cmd --zone=<zone> --remove-port=<port>/<protocol> --permanent
6、允许或禁止服务
sudo firewall-cmd --zone=<zone> --add-service=<service> --permanent
sudo firewall-cmd --zone=<zone> --remove-service=<service> --permanent
7、允许或禁止单个 IP 地址
sudo firewall-cmd --zone=<zone> --add-rich-rule='rule family="ipv4" source address="<ip-address>" accept'
sudo firewall-cmd --zone=<zone> --remove-rich-rule='rule family="ipv4" source address="<ip-address>" accept'
8、重新加载配置文件(不会中断现有连接)
sudo firewall-cmd --reload
九、注意事项
- 使用 --permanent 参数会将更改写入配置文件,这样更改在系统重启后仍然有效。
- 不带 --permanent 参数的更改仅在当前会话中生效,重启 firewalld 或系统后会丢失。
- [zone] 是你想要应用规则的区域名称,例如 public, internal, trusted 等。
- [service] 是预定义的服务名称,如 ssh, http, https 等。
- [port] 指定要开放的端口号,而 [protocol] 通常是 tcp 或 udp。
十、PIP2.0根据防火墙类型开启相关端口
# 判断当前的防火墙类型
if systemctl status firewalld &> /dev/null; then
firewall_type="firewalld"
elif systemctl status ufw &> /dev/null; then
firewall_type="ufw"
elif iptables -L &> /dev/null; then
firewall_type="iptables"
else
firewall_type="unknown"
fi
# 根据防火墙类型开放端口
case $firewall_type in
"firewalld")
echo "当前防火墙为 firewalld"
# 检查8848端口是否已开放
if ! firewall-cmd --list-ports | grep -q "8848/tcp"; then
echo "开放8848端口"
sudo firewall-cmd --permanent --add-port=8848/tcp
else
echo "8848端口已经开放"
fi
# 检查9000端口是否已开放
if ! firewall-cmd --list-ports | grep -q "9000/tcp"; then
echo "开放9000端口"
sudo firewall-cmd --permanent --add-port=9000/tcp
else
echo "9000端口已经开放"
fi
sudo firewall-cmd --reload
;;
"ufw")
echo "当前防火墙为 ufw"
# 检查8848端口是否已开放
if ! ufw status | grep -q "8848/tcp"; then
echo "开放8848端口"
sudo ufw allow 8848/tcp
else
echo "8848端口已经开放"
fi
# 检查9000端口是否已开放
if ! ufw status | grep -q "9000/tcp"; then
echo "开放9000端口"
sudo ufw allow 9000/tcp
else
echo "9000端口已经开放"
fi
sudo ufw reload
;;
"iptables")
echo "当前防火墙为 iptables"
# 检查8848端口是否已开放
if ! iptables -L INPUT -n | grep -q "ACCEPT.*8848"; then
echo "开放8848端口"
sudo iptables -A INPUT -p tcp --dport 8848 -j ACCEPT
else
echo "8848端口已经开放"
fi
# 检查9000端口是否已开放
if ! iptables -L INPUT -n | grep -q "ACCEPT.*9000"; then
echo "开放9000端口"
sudo iptables -A INPUT -p tcp --dport 9000 -j ACCEPT
else
echo "9000端口已经开放"
fi
# 保存 iptables 规则
sudo mkdir -p /etc/iptables
sudo iptables-save | sudo tee /etc/iptables/rules.v4 > /dev/null
# 创建一个启动脚本
cat <<EOF | sudo tee /etc/network/if-pre-up.d/iptables
#!/bin/sh
/sbin/iptables-restore < /etc/iptables/rules.v4
EOF
# 赋予执行权限
sudo chmod +x /etc/network/if-pre-up.d/iptables
;;
"unknown")
echo "未知防火墙类型,无法自动开放端口"
;;
esac
评论
0