2.1 系统要求
支持的操作系统
- Red Hat 系列:CentOS 7+、RHEL 7+、Fedora 25+
- Debian 系列:Ubuntu 16.04+、Debian 9+
- SUSE 系列:openSUSE Leap 15+、SLES 12+
- Arch Linux:最新版本
内核要求
- 最低版本:Linux Kernel 2.4+
- 推荐版本:Linux Kernel 3.10+
- 最新特性:Linux Kernel 5.0+ (支持 nftables)
硬件要求
- CPU:x86_64 架构(推荐)
- 内存:最少 512MB(推荐 2GB+)
- 存储:至少 1GB 可用空间
- 网络:至少一个网络接口
2.2 检查系统状态
检查内核版本
# 查看内核版本
uname -r
# 查看详细系统信息
uname -a
# 查看发行版信息
cat /etc/os-release
检查 Netfilter 支持
# 检查内核模块
lsmod | grep netfilter
lsmod | grep iptable
lsmod | grep ip_tables
# 查看可用的内核模块
find /lib/modules/$(uname -r) -name "*table*" -o -name "*netfilter*"
检查现有防火墙状态
# 检查 iptables 服务状态
systemctl status iptables
# 检查 firewalld 状态
systemctl status firewalld
# 检查 ufw 状态(Ubuntu)
ufw status
# 查看当前规则
iptables -L -n -v
2.3 安装 iptables
CentOS/RHEL 系统
使用 yum 安装
# 更新系统包
sudo yum update -y
# 安装 iptables
sudo yum install -y iptables iptables-services
# 安装额外工具
sudo yum install -y iptables-utils
使用 dnf 安装(Fedora/CentOS 8+)
# 更新系统包
sudo dnf update -y
# 安装 iptables
sudo dnf install -y iptables iptables-services iptables-utils
Ubuntu/Debian 系统
# 更新包列表
sudo apt update
# 安装 iptables
sudo apt install -y iptables iptables-persistent
# 安装额外工具
sudo apt install -y iptables-dev netfilter-persistent
验证安装
# 检查 iptables 版本
iptables --version
# 检查 ip6tables 版本
ip6tables --version
# 查看帮助信息
iptables --help
2.4 服务管理
systemd 系统(现代 Linux 发行版)
启动和停止服务
# 启动 iptables 服务
sudo systemctl start iptables
# 停止 iptables 服务
sudo systemctl stop iptables
# 重启 iptables 服务
sudo systemctl restart iptables
# 重新加载配置
sudo systemctl reload iptables
开机自启动
# 启用开机自启动
sudo systemctl enable iptables
# 禁用开机自启动
sudo systemctl disable iptables
# 查看服务状态
sudo systemctl status iptables
传统 init 系统
# 启动服务
sudo service iptables start
# 停止服务
sudo service iptables stop
# 重启服务
sudo service iptables restart
# 查看状态
sudo service iptables status
2.5 配置文件管理
主要配置文件位置
CentOS/RHEL 系统
# IPv4 规则文件
/etc/sysconfig/iptables
# IPv6 规则文件
/etc/sysconfig/ip6tables
# 服务配置文件
/etc/sysconfig/iptables-config
Ubuntu/Debian 系统
# IPv4 规则文件
/etc/iptables/rules.v4
# IPv6 规则文件
/etc/iptables/rules.v6
# 持久化配置目录
/etc/netfilter-persistent/
保存和恢复规则
手动保存规则
# CentOS/RHEL 系统
sudo iptables-save > /etc/sysconfig/iptables
sudo ip6tables-save > /etc/sysconfig/ip6tables
# Ubuntu/Debian 系统
sudo iptables-save > /etc/iptables/rules.v4
sudo ip6tables-save > /etc/iptables/rules.v6
# 通用方法(保存到自定义文件)
sudo iptables-save > /tmp/iptables-backup.rules
恢复规则
# 从文件恢复规则
sudo iptables-restore < /etc/sysconfig/iptables
sudo iptables-restore < /etc/iptables/rules.v4
# 从备份文件恢复
sudo iptables-restore < /tmp/iptables-backup.rules
使用 netfilter-persistent(Ubuntu/Debian)
# 保存当前规则
sudo netfilter-persistent save
# 重新加载规则
sudo netfilter-persistent reload
# 启动时自动加载
sudo systemctl enable netfilter-persistent
2.6 环境配置
内核参数调优
启用 IP 转发
# 临时启用
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
# 永久启用(编辑 /etc/sysctl.conf)
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf
# 应用配置
sudo sysctl -p
连接跟踪优化
# 增加连接跟踪表大小
echo 'net.netfilter.nf_conntrack_max = 1048576' | sudo tee -a /etc/sysctl.conf
# 设置连接跟踪超时
echo 'net.netfilter.nf_conntrack_tcp_timeout_established = 7200' | sudo tee -a /etc/sysctl.conf
# 启用连接跟踪
echo 'net.netfilter.nf_conntrack_tcp_loose = 1' | sudo tee -a /etc/sysctl.conf
防止 SYN 洪水攻击
# 启用 SYN cookies
echo 'net.ipv4.tcp_syncookies = 1' | sudo tee -a /etc/sysctl.conf
# 减少 SYN 重试次数
echo 'net.ipv4.tcp_syn_retries = 3' | sudo tee -a /etc/sysctl.conf
# 减少 SYN-ACK 重试次数
echo 'net.ipv4.tcp_synack_retries = 3' | sudo tee -a /etc/sysctl.conf
加载必要的内核模块
常用模块列表
# 创建模块加载配置文件
sudo tee /etc/modules-load.d/iptables.conf << EOF
# iptables 核心模块
ip_tables
iptable_filter
iptable_nat
iptable_mangle
iptable_raw
# 连接跟踪模块
nf_conntrack
nf_conntrack_ipv4
nf_nat
nf_nat_ipv4
# 扩展模块
xt_state
xt_conntrack
xt_limit
xt_multiport
xt_string
xt_recent
EOF
手动加载模块
# 加载核心模块
sudo modprobe ip_tables
sudo modprobe iptable_filter
sudo modprobe iptable_nat
sudo modprobe iptable_mangle
# 加载连接跟踪模块
sudo modprobe nf_conntrack
sudo modprobe nf_nat
# 验证模块加载
lsmod | grep -E "ip_tables|iptable|nf_"
2.7 测试环境搭建
虚拟机环境
推荐配置
# 虚拟机配置建议
CPU: 2 核心
内存: 4GB
硬盘: 20GB
网络: 2个网卡(NAT + Host-Only)
操作系统: CentOS 8 或 Ubuntu 20.04
网络配置
# 配置多个网络接口
# eth0: 外网接口(NAT)
# eth1: 内网接口(Host-Only)
# 查看网络接口
ip addr show
# 配置静态IP(CentOS)
sudo nmcli con mod eth1 ipv4.addresses 192.168.100.1/24
sudo nmcli con mod eth1 ipv4.method manual
sudo nmcli con up eth1
# 配置静态IP(Ubuntu)
sudo tee /etc/netplan/01-netcfg.yaml << EOF
network:
version: 2
ethernets:
eth1:
addresses: [192.168.100.1/24]
EOF
sudo netplan apply
容器环境
Docker 测试环境
# 创建测试网络
docker network create --driver bridge iptables-test
# 启动测试容器
docker run -d --name web-server \
--network iptables-test \
-p 8080:80 \
nginx:alpine
docker run -d --name client \
--network iptables-test \
alpine:latest sleep 3600
测试脚本
#!/bin/bash
# 创建测试脚本 test-iptables.sh
echo "=== iptables 环境测试 ==="
# 检查 iptables 版本
echo "1. 检查 iptables 版本:"
iptables --version
# 检查内核模块
echo "2. 检查内核模块:"
lsmod | grep -E "ip_tables|iptable" | head -5
# 检查当前规则
echo "3. 检查当前规则:"
iptables -L -n | head -10
# 测试基本功能
echo "4. 测试基本功能:"
iptables -A INPUT -p icmp -j ACCEPT 2>/dev/null && echo "规则添加成功" || echo "规则添加失败"
iptables -D INPUT -p icmp -j ACCEPT 2>/dev/null && echo "规则删除成功" || echo "规则删除失败"
echo "=== 测试完成 ==="
2.8 常用工具安装
网络测试工具
# CentOS/RHEL
sudo yum install -y nmap telnet nc wget curl tcpdump
# Ubuntu/Debian
sudo apt install -y nmap telnet netcat wget curl tcpdump
# 安装网络分析工具
sudo yum install -y wireshark-cli # CentOS
sudo apt install -y tshark # Ubuntu
日志分析工具
# 安装日志分析工具
sudo yum install -y rsyslog logrotate # CentOS
sudo apt install -y rsyslog logrotate # Ubuntu
# 配置 iptables 日志
sudo tee -a /etc/rsyslog.conf << EOF
# iptables 日志配置
kern.warning /var/log/iptables.log
EOF
# 重启 rsyslog 服务
sudo systemctl restart rsyslog
性能监控工具
# 安装系统监控工具
sudo yum install -y htop iotop nethogs iftop # CentOS
sudo apt install -y htop iotop nethogs iftop # Ubuntu
# 安装网络连接监控
sudo yum install -y ss netstat # CentOS
sudo apt install -y iproute2 # Ubuntu
2.9 安全配置
备份策略
创建备份脚本
#!/bin/bash
# 创建 iptables-backup.sh
BACKUP_DIR="/etc/iptables/backup"
DATE=$(date +%Y%m%d_%H%M%S)
# 创建备份目录
mkdir -p $BACKUP_DIR
# 备份当前规则
iptables-save > $BACKUP_DIR/iptables_$DATE.rules
ip6tables-save > $BACKUP_DIR/ip6tables_$DATE.rules
# 保留最近30天的备份
find $BACKUP_DIR -name "*.rules" -mtime +30 -delete
echo "备份完成: $BACKUP_DIR/iptables_$DATE.rules"
设置定时备份
# 添加到 crontab
echo "0 2 * * * /usr/local/bin/iptables-backup.sh" | sudo crontab -
# 查看 crontab
sudo crontab -l
安全基线配置
基本安全规则
#!/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 OUTPUT -o lo -j ACCEPT
# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许 SSH(修改为实际端口)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 保存规则
iptables-save > /etc/sysconfig/iptables
2.10 故障排除
常见问题
1. 服务启动失败
# 检查服务状态
systemctl status iptables -l
# 查看详细错误
journalctl -u iptables -f
# 检查配置文件语法
iptables-restore --test < /etc/sysconfig/iptables
2. 规则不生效
# 检查规则顺序
iptables -L -n --line-numbers
# 检查表和链
iptables -t nat -L -n
iptables -t mangle -L -n
# 检查内核模块
lsmod | grep netfilter
3. 连接被阻断
# 临时清空规则(紧急情况)
iptables -F
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
# 查看连接状态
ss -tuln
netstat -tuln
调试技巧
启用详细日志
# 添加日志规则
iptables -I INPUT -j LOG --log-prefix "[IPTABLES-INPUT]: " --log-level 4
iptables -I OUTPUT -j LOG --log-prefix "[IPTABLES-OUTPUT]: " --log-level 4
# 查看日志
tail -f /var/log/messages | grep IPTABLES
使用计数器
# 查看规则匹配次数
iptables -L -n -v
# 重置计数器
iptables -Z
本章小结
本章详细介绍了 iptables 的安装和环境配置:
- 系统要求:了解支持的操作系统和硬件要求
- 安装方法:在不同 Linux 发行版上安装 iptables
- 服务管理:启动、停止和管理 iptables 服务
- 配置管理:保存和恢复防火墙规则
- 环境优化:内核参数调优和模块配置
- 测试环境:搭建用于学习和测试的环境
- 安全配置:备份策略和基本安全设置
- 故障排除:常见问题的诊断和解决方法
本章练习
安装练习:
- 在虚拟机中安装 iptables
- 验证所有必要的内核模块已加载
- 配置开机自启动
配置练习:
- 创建规则备份脚本
- 配置内核参数优化
- 设置基本的安全规则
测试练习:
- 搭建多网卡测试环境
- 验证规则保存和恢复功能
- 测试基本的包过滤功能
故障排除练习:
- 模拟服务启动失败的情况
- 练习使用日志进行问题诊断
- 学会在紧急情况下恢复网络连接
下一章我们将学习 iptables 的基本概念和术语。