您说得对,作为运维人员确实应该掌握iptables这个核心工具。让我为您系统梳理iptables的使用方法,并提供实用解决方案:
- filter表(默认):负责过滤数据包 - nat表:网络地址转换 - mangle表:修改数据包内容 - raw表:连接跟踪处理 - 五链:INPUT/OUTPUT/FORWARD/PREROUTING/POSTROUTING
# 查看规则(-v详细 -n数字显示)
iptables -L -n -v --line-numbers
# 允许SSH访问(示例)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 拒绝特定IP
iptables -A INPUT -s 192.168.1.100 -j DROP
# 端口转发(NAT)
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
# 保存规则(不同系统)
service iptables save # CentOS 6
iptables-save > /etc/iptables.rules # 通用方法
- 基础防护配置:
# 清空现有规则
iptables -F
# 设置默认策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许本地回环
iptables -A INPUT -i lo -j ACCEPT
# 开放必要端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # SSH
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # HTTP
iptables -A INPUT -p tcp --dport 443 -j ACCEPT # HTTPS
# 查看规则匹配情况
iptables -L -v -n
# 日志记录(需要配置syslog)
iptables -A INPUT -p tcp --dport 80 -j LOG --log-prefix "HTTP访问: "
# 追踪数据包路径
iptables -t raw -A PREROUTING -p icmp -j TRACE
- firewalld(CentOS/RHEL) - ufw(Ubuntu) - nftables(iptables的继任者)
需要特别注意的是: 1. 生产环境操作前先保存当前规则 2. 避免直接远程操作防火墙导致自己被锁 3. 复杂环境建议配合fail2ban等工具增强防护
是否需要对某个具体场景(如Docker网络、K8S环境)的iptables配置做进一步说明?我可以提供更针对性的解决方案。