Iptables常见用法

2024年8月1日 · 903 字 · 2 分钟

Iptables常见用法

iptables是什么

iptables是Linux系统中用于配置防火墙规则的工具。 它基于Netfilter内核模块,能够对数据包进行过滤、转发和NAT(网络地址转换)等操作。 iptables非常强大且灵活,可以用来保护网络安全、限制网络流量、实现网络地址转换(NAT)等功能。

iptables 的基本概念

  1. 链(Chains)

    • iptables 使用链来处理数据包的流向。每个链包含一系列规则,这些规则会根据特定条件匹配数据包并采取相应的动作。
    • 常见的链包括:
      • INPUT:处理所有流入的数据包。
      • FORWARD:处理所有转发的数据包。
      • OUTPUT:处理所有流出的数据包。
  2. 表(Tables)

    • 表是规则链的集合,iptables 中有几种常用的表:
      • filter:默认表,包含数据包过滤规则。常用链有 INPUTFORWARDOUTPUT
      • nat:用于网络地址转换(NAT),常用链有 PREROUTINGPOSTROUTINGOUTPUT
      • mangle:用于更改数据包的服务类型(TOS)、TTL 等特殊标记。
      • raw:用于配置数据包的跟踪。
  3. 规则(Rules)

    • 每个链包含的规则定义了如何处理数据包。规则包含匹配条件和处理动作(目标)。

iptables 常见用法

显示现有规则

sudo iptables -L -v

添加规则

  1. 允许 SSH 连接(端口 22)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  1. 允许 HTTP 连接(端口 80)
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
  1. 允许 HTTPS 连接(端口 443)
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

拒绝所有其他流量

sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT DROP

删除规则

删除方法一:使用规则的描述删除规则

使用 -D 参数和规则的具体描述来删除规则。例如,要删除之前添加的 SSH 规则:

sudo iptables -D INPUT -p tcp --dport 22 -j ACCEPT

删除方法二:使用编号删除

列出带编号的规则:

sudo iptables -L --line-numbers

根据编号删除规则:

sudo iptables -D INPUT <rule-number>

保存和恢复规则

  1. 保存规则(在 Debian/Ubuntu 上):
sudo iptables-save > /etc/iptables/rules.v4
  1. 恢复规则(在 Debian/Ubuntu 上):
sudo iptables-restore < /etc/iptables/rules.v4

在 CentOS/RHEL 上,可以使用 iptables-saveiptables-restore 命令,但保存的位置和方式可能有所不同。

NAT 和端口转发

  1. 将端口 80 的流量重定向到端口 8080
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
  1. 设置端口转发
sudo iptables -t nat -A PREROUTING -p tcp -d <public-ip> --dport 80 -j DNAT --to-destination <private-ip>:80

其他常见命令

  1. 清空所有规则
sudo iptables -F
  1. 删除所有自定义链
sudo iptables -X
  1. 设置默认策略为接受
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT

参考资料