美文网首页
iptables 入门笔记

iptables 入门笔记

作者: 字母数字或汉字 | 来源:发表于2016-11-10 03:16 被阅读433次

    基本概念

    数据流动的链(chain)

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

    iptables chain

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

    表(table)

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

    • filter: 控制本机数据包的进出,可看做防火墙(默认表)
    • nat: 网络地址转换
    • mangle: 拆包并修改标志位

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

    filter 表能关联的检查点:

    • INPUT
    • OUTPUT
    • FORWARD

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

    nat 表能关联的检查点:

    • PREROUTING
    • POSTROUTING
    • INPUT
    • OUTPUT

    分别在不同的阶段修改报文的 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
    

    相关文章

      网友评论

          本文标题:iptables 入门笔记

          本文链接:https://www.haomeiwen.com/subject/bbwtpttx.html