iptables 命令详解

iptables 是 Linux 中用于设置、维护和检查 IP 数据包过滤规则的命令。它是一个强大的工具,广泛用于网络防火墙、安全性和网络地址转换 (NAT) 等。

以下是 iptables 命令的主要选项及其详细说明。

1. 基本语法

bash 复制代码
iptables [选项] [链名称] [规则匹配条件] [动作]
  • [选项]:指定操作,如新增、删除、插入规则等。
  • [链名称] :指定 iptables 的链,如 INPUTOUTPUTFORWARDPREROUTING 等。
  • [规则匹配条件]:数据包过滤的条件,如源 IP 地址、目标端口等。
  • [动作] :匹配到的包执行的操作,如 ACCEPTDROPREJECT 等。

2. 链 (Chain)

iptables 主要有以下几种内置链:

  • INPUT:用于控制进入本地系统的数据包。
  • OUTPUT:用于控制本地系统发送的数据包。
  • FORWARD:用于控制通过本地系统的数据包(本机不是目的地时)。
  • PREROUTING:用于在包进入路由之前修改数据包,用于 NAT。
  • POSTROUTING:用于在包离开路由后修改数据包,用于 NAT。

3. 主要选项

3.1 链管理选项
  • -L:列出指定链中的所有规则。

    bash 复制代码
    iptables -L

    可以查看当前所有规则,也可以加上链名查看特定链的规则。

  • -N:创建新链。

    bash 复制代码
    iptables -N my_chain
  • -X:删除自定义链(前提是该链没有规则)。

    bash 复制代码
    iptables -X my_chain
  • -F:清空指定链中的所有规则。如果不指定链,则清空所有链的规则。

    bash 复制代码
    iptables -F
  • -Z:将链的计数器清零。

    bash 复制代码
    iptables -Z
3.2 规则管理选项
  • -A:在指定链的末尾追加一条规则。

    bash 复制代码
    iptables -A INPUT -s 192.168.1.100 -j ACCEPT

    允许来自 IP 地址 192.168.1.100 的连接。

  • -I:在指定链的指定位置插入一条规则(默认在首位)。

    bash 复制代码
    iptables -I INPUT 1 -s 192.168.1.100 -j ACCEPT

    INPUT 链的第一个位置插入一条规则,允许 192.168.1.100 的连接。

  • -D:删除指定链中的规则。可以通过规则编号或直接匹配规则来删除。

    bash 复制代码
    iptables -D INPUT 1

    删除 INPUT 链中的第一条规则。

  • -R:替换指定链中的某条规则。

    bash 复制代码
    iptables -R INPUT 1 -s 192.168.1.101 -j ACCEPT

    替换 INPUT 链的第一条规则,允许 192.168.1.101 的连接。

  • -P:设置默认策略(即当数据包不匹配任何规则时的默认动作)。

    bash 复制代码
    iptables -P INPUT DROP

    设置 INPUT 链的默认策略为丢弃所有不匹配的包。

3.3 匹配条件选项
  • -s--source:指定源 IP 地址。

    bash 复制代码
    iptables -A INPUT -s 192.168.1.100 -j ACCEPT

    匹配来自 192.168.1.100 的数据包。

  • -d--destination:指定目标 IP 地址。

    bash 复制代码
    iptables -A OUTPUT -d 192.168.1.200 -j ACCEPT

    匹配发往 192.168.1.200 的数据包。

  • -p--protocol :指定协议类型(如 tcpudpicmp)。

    bash 复制代码
    iptables -A INPUT -p tcp -j ACCEPT

    匹配 TCP 协议的数据包。

  • --sport :指定源端口号(仅适用于 tcpudp 协议)。

    bash 复制代码
    iptables -A INPUT -p tcp --sport 22 -j ACCEPT

    允许来自端口 22 的 TCP 包(通常是 SSH)。

  • --dport:指定目标端口号。

    bash 复制代码
    iptables -A INPUT -p tcp --dport 80 -j ACCEPT

    允许访问本机 80 端口(HTTP)。

  • -i--in-interface:指定进入的网络接口。

    bash 复制代码
    iptables -A INPUT -i eth0 -j ACCEPT

    允许所有从接口 eth0 进来的包。

  • -o--out-interface:指定离开的网络接口。

    bash 复制代码
    iptables -A OUTPUT -o eth0 -j ACCEPT

    允许所有从接口 eth0 发出的包。

  • -m state --state:使用连接跟踪模块,匹配数据包的连接状态。

    bash 复制代码
    iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT

    允许新连接和已建立的连接的数据包。

  • -m limit:限制数据包匹配速率。

    bash 复制代码
    iptables -A INPUT -p icmp -m limit --limit 1/second -j ACCEPT

    限制每秒最多接受 1 个 ICMP 数据包(防止 ICMP 洪水攻击)。

3.4 动作选项
  • -j--jump :指定匹配条件满足时跳转到的动作目标链

    • ACCEPT:允许数据包通过。
    • DROP :丢弃数据包,不作任何响应
    • REJECT :拒绝数据包,并返回错误信息 (比如 icmp-port-unreachable)。
    • LOG:记录日志,但不阻止数据包的继续处理。

    示例:

    bash 复制代码
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    iptables -A INPUT -p tcp --dport 80 -j LOG --log-prefix "HTTP Access: "
    iptables -A INPUT -p tcp --dport 80 -j DROP
  • RETURN:从自定义链返回到上一个链。

    示例:

    bash 复制代码
    iptables -N my_chain
    iptables -A my_chain -j RETURN
3.5 NAT 相关选项
  • -t nat:选择 NAT 表进行操作。NAT 表用于网络地址转换,常见的用途是端口映射、源 IP 地址转换等。

    • PREROUTING:在数据包被路由之前应用规则。
    • POSTROUTING:在数据包被路由之后应用规则。
    • OUTPUT:在本地生成的数据包上应用 NAT 规则。

    示例:端口转发(将 80 端口的访问转发到 8080 端口)

    bash 复制代码
    iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
3.6 保存与恢复规则
  • 保存规则

    bash 复制代码
    iptables-save > /etc/iptables/rules.v4
  • 恢复规则

    bash 复制代码
    iptables-restore < /etc/iptables/rules.v4

4. 常用的综合示例

  1. 允许 SSH 访问(TCP 22 端口):

    bash 复制代码
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  2. 允许 HTTP/HTTPS 访问

    bash 复制代码
    iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    iptables -A INPUT -p tcp --dport 443 -j ACCEPT
  3. 拒绝所有其他流量

    bash 复制代码
    iptables -P INPUT DROP
    iptables -P FORWARD DROP
    iptables -P OUTPUT ACCEPT

通过这些规则,iptables 可以被用来控制网络流量,保障服务器和网络的安全。

相关推荐
jimy12 小时前
安卓里运行Linux
linux·运维·服务器
爱凤的小光3 小时前
Linux清理磁盘技巧---个人笔记
linux·运维
耗同学一米八4 小时前
2026年河北省职业院校技能大赛中职组“网络建设与运维”赛项答案解析 1.系统安装
linux·服务器·centos
知星小度S5 小时前
系统核心解析:深入文件系统底层机制——Ext系列探秘:从磁盘结构到挂载链接的全链路解析
linux
2401_890443025 小时前
Linux 基础IO
linux·c语言
智慧地球(AI·Earth)6 小时前
在Linux上使用Claude Code 并使用本地VS Code SSH远程访问的完整指南
linux·ssh·ai编程
老王熬夜敲代码7 小时前
解决IP不够用的问题
linux·网络·笔记
zly35007 小时前
linux查看正在运行的nginx的当前工作目录(webroot)
linux·运维·nginx
QT 小鲜肉7 小时前
【Linux命令大全】001.文件管理之file命令(实操篇)
linux·运维·前端·网络·chrome·笔记
问道飞鱼8 小时前
【Linux知识】Linux 虚拟机磁盘扩缩容操作指南(按文件系统分类)
linux·运维·服务器·磁盘扩缩容