firewalld命令

firewalld 命令 #

firewalld是一个动态防火墙管理工具,它使用"区域"和"服务"的概念来简化防火墙配置。firewall-cmdfirewalld的命令行客户端,用于管理防火墙规则。

基本概念 #

  • 区域(Zone): 定义了网络连接的信任级别,每个区域包含一组防火墙规则
  • 服务(Service): 预定义的规则集,用于允许特定应用程序的网络流量
  • 端口(Port): 特定的网络端口和协议
  • 富规则(Rich Rule): 更复杂的防火墙规则,提供更精细的控制

常用命令 #

状态管理 #

1. 检查 firewalld 状态 #

firewall-cmd --state

2. 重新加载防火墙配置 #

firewall-cmd --reload

3. 完全重新加载防火墙(包括永久规则) #

firewall-cmd --complete-reload

区域管理 #

1. 列出所有可用区域 #

firewall-cmd --get-zones

2. 列出所有活动区域 #

firewall-cmd --get-active-zones

3. 获取默认区域 #

firewall-cmd --get-default-zone

4. 设置默认区域 #

firewall-cmd --set-default-zone=public

5. 将网络接口添加到区域 #

firewall-cmd --zone=public --add-interface=eth0

服务管理 #

1. 列出所有可用服务 #

firewall-cmd --get-services

2. 列出区域中启用的服务 #

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

3. 添加服务到区域 #

firewall-cmd --zone=public --add-service=http

4. 永久添加服务到区域 #

firewall-cmd --permanent --zone=public --add-service=http

5. 从区域移除服务 #

firewall-cmd --zone=public --remove-service=http

端口管理 #

1. 列出区域中开放的端口 #

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

2. 添加端口到区域 #

firewall-cmd --zone=public --add-port=8080/tcp

3. 永久添加端口到区域 #

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

4. 从区域移除端口 #

firewall-cmd --zone=public --remove-port=8080/tcp

富规则管理 #

1. 列出区域中的富规则 #

firewall-cmd --zone=public --list-rich-rules

2. 添加富规则 #

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

3. 永久添加富规则 #

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

4. 移除富规则 #

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

伪装和端口转发 #

1. 启用伪装(NAT) #

firewall-cmd --zone=public --add-masquerade

2. 检查伪装是否启用 #

firewall-cmd --zone=public --query-masquerade

3. 添加端口转发 #

firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080

4. 添加端口转发到另一个 IP #

firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.10

常见用法示例 #

1. 允许 HTTP 和 HTTPS 流量 #

# 添加HTTP和HTTPS服务
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https

# 重新加载防火墙
firewall-cmd --reload

2. 允许特定 IP 访问 SSH #

# 添加富规则
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.5" service name="ssh" accept'

# 重新加载防火墙
firewall-cmd --reload

3. 阻止特定 IP #

# 添加富规则阻止IP
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="10.0.0.5" reject'

# 重新加载防火墙
firewall-cmd --reload

4. 设置端口转发 #

# 启用伪装
firewall-cmd --permanent --zone=public --add-masquerade

# 添加端口转发
firewall-cmd --permanent --zone=public --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.10

# 重新加载防火墙
firewall-cmd --reload

5. 创建自定义服务 #

# 创建新服务文件
cat > /etc/firewalld/services/myapp.xml << EOF
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>MyApp</short>
  <description>My custom application</description>
  <port protocol="tcp" port="8080"/>
  <port protocol="udp" port="8125"/>
</service>
EOF

# 重新加载防火墙
firewall-cmd --reload

# 添加服务到区域
firewall-cmd --permanent --zone=public --add-service=myapp
firewall-cmd --reload

注意事项 #

  • 没有--permanent选项的命令只会修改运行时配置,重启后会丢失
  • 使用--permanent选项的命令只会修改永久配置,不会立即生效,需要重新加载防火墙
  • 建议先测试运行时配置,确认无误后再应用永久配置
  • 在远程管理服务器时,要特别小心防火墙规则,避免意外锁定自己
  • 某些复杂的防火墙规则可能需要使用富规则语法
  • firewalld与传统的iptables服务可能会相互冲突,应避免同时运行