iptables 入门笔记

2016-11-10  本文已影响433人  字母数字或汉字

基本概念

数据流动的链(chain)

数据包在 iptables 里经过的链如下图所示:

iptables chain

在路由决策时,如果目标 IP 是本机,则进入 INPUT 链,否则交给 FORWARD 链。

表(table)

iptables 有三张表,代表三种控制机制:

每个表都记录了在特定的检查点要处理的规则。

filter 表能关联的检查点:

分别用来过滤入站、出站、转发的包。

nat 表能关联的检查点:

分别在不同的阶段修改报文的 IP 和端口。

地址转发

首先要开启操作系统的支持。

临时开启(必须以 root 身份执行):

$ echo 1 > /proc/sys/net/ipv4/ip_forward

持久化,需要在 /etc/sysctl.conf 文件中追加一行:

net.ipv4.ip_forward = 1

使用如下命令使其生效:

$ sysctl -p

源地址转换 SNAT

替换目标主机收到的来自本机的数据包报文的源地址。

典型应用场景即 IPv4 地址紧缺的现在,做局域网到互联网的地址映射。

只能在 OUTPUT 和 POSTROUTING 检查点设置。

# 将来自 192.168.1.0/24 网段的数据包 SNAT 成来自 100.100.100.100
$ iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 100.100.100.100

如果本机 IP 经常变动,静态 SNAT 不甚方便,可以采用伪装(MASQUERADE)技术实现动态 SNAT:

# 将 192.168.1.0/24 网段的数据包 SNAT 成来自本机 IP
$ iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE

目的地址转换 DNAT

替换来自远端主机的数据包报文的目的地址。

典型应用场景是服务器的反向代理,做互联网到局域网的地址映射。

一般在 PREROUTING 检查点设置。

# 将发往 100.100.100.100:80 的包 DNAT 成发往 192.168.1.100:8080
$ iptables -t nat -A PREROUTING -d 100.100.100.100:80 -j DNAT --to-destination 192.168.1.100:8080

小结

所谓的 SNAT/DNAT 就是对数据包的源地址和目的地址进行修改,并且保存修改前后的映射关系,以便根据需要还原。

SNAT 是发送的时候 snat(src_address),返回的时候也会改变目的地址 un_snat(dst_address)。

DNAT 是接收的时候 dnat(dst_address),返回的时候 un_dnat(src_address)。

所谓回环,就是同时用到了 SNAT 和 DNAT,例如:

src 192.168.1.2(client)
dnat 10.14.11.177(firewall)
dst 192.168.2.2(server)

添加回环规则后,从 src 对 10.14.11.177 进行请求,然后转到 dst,随后返回数据包,最后 src 收到源为 10.14.11.177,目的为自身的数据包,正确接收。

常见命令

清空规则表:

$ iptables [-t table] -F

列出规则表的配置:

$ iptables [-t table] -L

保存规则,根据发行版不同而不同,常见的有:

$ apt-get install iptables-persistent
$ iptables-save
$ yum install iptables-services
$ service iptables save
上一篇 下一篇

猜你喜欢

热点阅读