本文整理了 Linux 系统中常用的防火墙命令,涵盖 iptables、firewalld、ufw 等主流防火墙工具,适合系统管理员和运维人员参考使用。
一、iptables 防火墙
1. 基本查看命令
# 查看所有规则
iptables -L -n -v
iptables -t nat -L -n -v # 查看NAT表
iptables -t mangle -L -n -v # 查看Mangle表
# 查看规则带行号
iptables -L -n -v --line-numbers
iptables -t nat -L -n -v --line-numbers
# 查看具体链的规则
iptables -L INPUT -n -v
iptables -L OUTPUT -n -v
iptables -L FORWARD -n -v
2. 规则管理
# 清空所有规则
iptables -F
iptables -t nat -F
iptables -t mangle -F
# 删除特定规则
iptables -D INPUT 3 # 删除INPUT链的第3条规则
# 设置默认策略
iptables -P INPUT ACCEPT # 默认允许所有输入
iptables -P OUTPUT ACCEPT # 默认允许所有输出
iptables -P FORWARD DROP # 默认拒绝所有转发
# 保存规则(不同系统)
service iptables save # CentOS 6及以下
iptables-save > /etc/sysconfig/iptables # 手动保存
/etc/init.d/iptables save # Debian/Ubuntu
3. 添加规则示例
# 允许本地回环
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许SSH连接(22端口)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 允许HTTP(80端口)和HTTPS(443端口)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 允许Ping
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# 限制连接速率(防止DoS攻击)
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
# 记录并拒绝其他连接
iptables -A INPUT -j LOG --log-prefix "IPTABLES-DROP: "
iptables -A INPUT -j DROP
4. NAT 和端口转发
# 开启IP转发
echo 1 > /proc/sys/net/ipv4/ip_forward
# MASQUERADE(共享上网)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 端口转发(将外网8080转发到内网192.168.1.100:80)
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.100 --dport 80 -j SNAT --to-source 192.168.1.1
二、firewalld 防火墙(CentOS/RHEL 7+)
1. 基本管理命令
# 查看防火墙状态
firewall-cmd --state
systemctl status firewalld
# 启动/停止/重启防火墙
systemctl start firewalld
systemctl stop firewalld
systemctl restart firewalld
# 启用/禁用开机启动
systemctl enable firewalld
systemctl disable firewalld
2. 区域管理
# 查看所有区域
firewall-cmd --get-zones
# 查看默认区域
firewall-cmd --get-default-zone
# 查看活动区域
firewall-cmd --get-active-zones
# 更改默认区域
firewall-cmd --set-default-zone=public
# 查看指定区域的配置
firewall-cmd --zone=public --list-all
3. 服务管理
# 查看所有预定义服务
firewall-cmd --get-services
# 允许服务(临时)
firewall-cmd --add-service=http
# 允许服务(永久)
firewall-cmd --add-service=http --permanent
# 移除服务
firewall-cmd --remove-service=http
firewall-cmd --remove-service=http --permanent
# 重新加载防火墙
firewall-cmd --reload
4. 端口管理
# 查看开放端口
firewall-cmd --list-ports
# 开放端口(临时)
firewall-cmd --add-port=80/tcp
# 开放端口(永久)
firewall-cmd --add-port=80/tcp --permanent
# 开放端口范围
firewall-cmd --add-port=8000-9000/tcp
# 移除端口
firewall-cmd --remove-port=80/tcp
firewall-cmd --remove-port=80/tcp --permanent
5. 高级配置
# 允许源IP或网段
firewall-cmd --add-source=192.168.1.0/24
firewall-cmd --add-source=192.168.1.100/32
# 富规则(复杂规则)
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="22" protocol="tcp" accept'
firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.0.0.0/8" reject'
# 直接规则(直接使用iptables语法)
firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -p tcp --dport 80 -j ACCEPT
三、ufw 防火墙(Ubuntu/Debian)
1. 基本管理
# 查看状态
ufw status
ufw status verbose
ufw status numbered
# 启用防火墙
ufw enable
# 禁用防火墙
ufw disable
# 重置防火墙
ufw reset
2. 规则管理
# 允许SSH
ufw allow ssh
ufw allow 22/tcp
# 允许HTTP和HTTPS
ufw allow http
ufw allow https
ufw allow 80/tcp
ufw allow 443/tcp
# 允许特定端口范围
ufw allow 8000:9000/tcp
# 允许特定IP
ufw allow from 192.168.1.100
ufw allow from 192.168.1.0/24
# 拒绝连接
ufw deny http
ufw deny from 192.168.1.200
# 删除规则
ufw delete allow http
ufw delete allow 80/tcp
ufw delete 3 # 按编号删除规则
3. 高级配置
# 限制连接速率
ufw limit ssh/tcp
# 允许特定协议
ufw allow proto udp port 53
ufw allow proto tcp port 25
# 配置默认策略
ufw default deny incoming
ufw default allow outgoing
ufw default deny forward
四、网络连接诊断命令
1. 端口扫描与检查
# 查看监听端口
netstat -tuln
ss -tuln
lsof -i :80
# 检查端口是否开放
telnet example.com 80
nc -zv example.com 80
nmap example.com
nmap -p 1-1000 example.com
# 路由跟踪
traceroute example.com
mtr example.com
tracepath example.com
2. 连接状态查看
# 查看当前连接
netstat -nat
ss -s
ss -t -a
# 查看连接数统计
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
# 查看防火墙日志
tail -f /var/log/messages
dmesg | grep -i firewall
journalctl -u firewalld
五、实用防火墙脚本示例
1. 基本服务器防火墙脚本(iptables)
#!/bin/bash
# 清空所有规则
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
# 设置默认策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# 允许本地回环
iptables -A INPUT -i lo -j ACCEPT
# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 允许HTTP和HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 允许Ping
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# 保存规则
iptables-save > /etc/sysconfig/iptables
2. Docker 环境防火墙配置
# 允许Docker网络
iptables -I DOCKER-USER -i eth0 -j ACCEPT
iptables -I DOCKER-USER -o eth0 -j ACCEPT
# Docker容器访问外部网络
iptables -t nat -A POSTROUTING -s 172.17.0.0/16 -j MASQUERADE
# 限制容器访问
iptables -I DOCKER-USER -s 172.17.0.0/16 -d 192.168.1.0/24 -j ACCEPT
iptables -I DOCKER-USER -s 172.17.0.0/16 -j DROP
六、防火墙故障排除
1. 常见问题解决
# 检查防火墙是否阻止连接
telnet localhost 80
# 检查服务是否监听正确接口
netstat -tuln | grep :80
# 检查SELinux是否影响
getenforce
setenforce 0 # 临时禁用SELinux(测试用)
# 检查防火墙日志
tail -f /var/log/firewalld
grep "REJECT" /var/log/messages
2. 连接跟踪
# 查看连接跟踪表
conntrack -L
conntrack -L -p tcp --dport 80
# 清空连接跟踪表
conntrack -F
# 监控连接跟踪事件
conntrack -E
七、总结表:最常用命令速查
iptables 常用命令
| 命令 | 功能描述 | 常用示例 |
|------|----------|----------|
| iptables -L | 查看规则 | iptables -L -n -v |
| iptables -A | 添加规则 | iptables -A INPUT -p tcp --dport 80 -j ACCEPT |
| iptables -D | 删除规则 | iptables -D INPUT 3 |
| iptables -F | 清空规则 | iptables -F |
| iptables-save | 保存规则 | iptables-save > /path/to/file |
firewalld 常用命令
| 命令 | 功能描述 | 常用示例 |
|------|----------|----------|
| firewall-cmd --state | 查看状态 | firewall-cmd --state |
| firewall-cmd --reload | 重载配置 | firewall-cmd --reload |
| firewall-cmd --add-service | 允许服务 | firewall-cmd --add-service=http |
| firewall-cmd --add-port | 允许端口 | firewall-cmd --add-port=80/tcp |
| firewall-cmd --list-all | 查看所有配置 | firewall-cmd --list-all |
ufw 常用命令
| 命令 | 功能描述 | 常用示例 |
|------|----------|----------|
| ufw status | 查看状态 | ufw status |
| ufw enable | 启用防火墙 | ufw enable |
| ufw allow | 允许连接 | ufw allow ssh |
| ufw deny | 拒绝连接 | ufw deny http |
| ufw delete | 删除规则 | ufw delete allow ssh |
这份防火墙命令大全涵盖了 Linux 系统中主要的防火墙工具和配置方法,适合不同发行版和不同场景下的防火墙管理需求。建议根据实际环境选择合适的工具和配置方法。