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 的安装和环境配置:

  1. 系统要求:了解支持的操作系统和硬件要求
  2. 安装方法:在不同 Linux 发行版上安装 iptables
  3. 服务管理:启动、停止和管理 iptables 服务
  4. 配置管理:保存和恢复防火墙规则
  5. 环境优化:内核参数调优和模块配置
  6. 测试环境:搭建用于学习和测试的环境
  7. 安全配置:备份策略和基本安全设置
  8. 故障排除:常见问题的诊断和解决方法

本章练习

  1. 安装练习

    • 在虚拟机中安装 iptables
    • 验证所有必要的内核模块已加载
    • 配置开机自启动
  2. 配置练习

    • 创建规则备份脚本
    • 配置内核参数优化
    • 设置基本的安全规则
  3. 测试练习

    • 搭建多网卡测试环境
    • 验证规则保存和恢复功能
    • 测试基本的包过滤功能
  4. 故障排除练习

    • 模拟服务启动失败的情况
    • 练习使用日志进行问题诊断
    • 学会在紧急情况下恢复网络连接

下一章我们将学习 iptables 的基本概念和术语。