• 【跟唐老师学习云网络】-第8篇 iptables


    【摘要】 前面的各种协议已经可以把基本可用的物理网络世界给形成了,在正常情况下,它可以玩的很溜。比如组个局域网办公,或者打个联机魔兽争霸,都没有什么问题。

    一、背景介绍

      前面的各种协议已经可以把基本可用的物理网络世界给形成了,在正常情况下,它可以玩的很溜。比如组个局域网办公,或者打个联机魔兽争霸,都没有什么问题。

      可是,网络世界中总是会有邪 恶的“人”出现,它就不按照大家约定好的规则来发送报文。比如扫描整个网络中的开放端口,扒取各种可能的网页/网络信息,发送大量报文进行冲击。仅仅依靠单纯而美好的协议世界无法阻止这种不按约定而来的行为。

    还记得我们最开始的网络概念么?

    理想单纯而美好,可是“邪 恶”的报文如入无人之境。无奈诚实的人为了对付恶势力也得武装自己,在大门的入口装起了大量的机关,用来抵抗那些非法的坏报文。

    看上去这是一种不错的方式,守住大门总能防住无理的窥探。这里这个“复杂的机关阵”有个不错的名字,叫做iptables,这也就是它由来的原因,恩,如果不是因为时间关系,我还能继续掰下去。。。 :-)

    二、iptables表

    既然要设计一套八卦阵,那必须看上去十分牛逼才行。先立几道屏障再说,每一个报文要想进来必须要经过这些屏障的严格筛选,才能成为真正的神选之报文。类似这样:

    这样的屏障式设计,就有了原型。

    然后在每一道屏障上面再设计很多的规则链,报文必须经过这些规则链的层层检查,有多严格呢?至少要比G20进地铁站还严吧。然后每一条规则链又由多个规则串起来。

    能经过这样子的五行八卦阵的报文,那么咱就勉强认为是良民了,可以被主机上的程序接受。

    (当然了,想要出去的报文也一样要经过严格控制,万一坏人已经跑到了内部,是吧)

    三、表和规则链

    iptables一共有四张表(屏障),但是一般只会用到两个,就是:过滤表-filter,改地址表-nat。这两个记住就行了。

    iptables一共有五条基本的规则链: 接收预处理-prerouting,接收-input,转发-forward,发送-output,出口后处理-postrouting。记住名字就行。

    这些表和这些链的组合,并不是每张表里面都有5条链的。有些规则链只存在特定的表中。

    由于设计者可能比较喜欢爱马仕的关系,他设计的组合方式就是一个大写的字母H。所以倒也比较好记,出去&进来一共4个角,中间一个转发小横杠。如下。

    关于在经过“接收预处理-prerouting”环节后,是进入forward,还是进入input,这个问题。上一章节其实提到过。世界上有两种报文,发给我的,和不是发给我的。(判断是不是自己的报文,就看目的地址是不是本机的就行)。如果不是给我的,那就帮忙转发,走forward。是给自己的,那就走input。

    四、规则链

    用户可以在一张表中任意增加规则链,规则链上面的某个规则如果命中,那么可以要求命中的报文进入到另外的规则链中继续处理。基本长这个样子:

    基本套路如下:条件 + 命中 + 动作, 动作也就是那么几个:

    (注意:一旦执行完规则的动作,就结束整个规则链的匹配,不继续往下匹配其他规则了。)

    1. Accept:接受报文  

    2. Drop:丢弃报文 

    3. SNAT:把报文的源地址改掉 (需要指定改为什么IP)

    4. DNAT:把报文的目的地址改掉

    5. Masquerade:高级版的SNAT,把报文的源地址改掉,改为发送网卡的IP地址(自动识别改成什么IP)

    6. Redirect:高级版的DNAT,把报文的目的地址改为接收网卡的IP地址。同时可以修改目的端口(其实就是重定向给本机的某个端口)

    7. 其他名字:那就代表跳转到另外一条规则链继续匹配。。。(这里的名字就等于指定的目标规则链的名字)

    其他高级动作? 骚年,其他动作解锁靠你自己啦 :-)

    五、iptables命令

    额,说了这么久,貌似还没提到iptables命令怎么用。一般情况有两种方式查看当前的iptables规则:

    1. # iptables -nL (或者 # iptables -t nat -nL)

    列出当前表的所有规则链。

    其实一个-L参数就行,但是记得我说过,网络相关的命令最好都加一个“-n”么?是的,-n让它不用做DNS翻译,也就是不要把IP地址翻译为主机名。

    -L参数:

    列出当前表的所有规则链。注意是大写的L。

    -n参数:

    不要把IP翻译为主机名

    -t参数:

    指定要查看的表名。不指定的话,默认查询filter表。

    -v参数:

    如果要定位查询规则命中的次数,可以加个-v参数,这样子输入:

    # iptables -nvL (或者 # iptables -t nat -nvL)

    一般查看命中次数都要先清空计数,然后再查看,所以清空规则命中计数也要学一下

    -Z参数:

    可以使用-Z参数清空命中统计次数。注意是大写的Z。

    # iptables -Z (或者 # iptables -t nat -Z)

     2. # iptables -S (或者 # iptables -t nat -S)

    使用编辑模式查询当前表中的规则。恩,也就是看看当前表里面的这些规则是怎么插 入的。

    列出来的每一行都是修改iptables的一条记录,这个在要修改iptables规则的时候特别有用。

    具体怎么看显示的结果,下一节的iptables nat再细说~

    作者:tsjsdbd

  • 相关阅读:
    ambari
    linux常用命令
    scala新版本学习(3)
    Spring中的AOP
    Spring中的Bean
    Spring的基本应用(1):依赖以及控制反转
    Scala新版本学习(2):
    python之time模块
    python之编码与解码
    爬虫之re数据提取的使用
  • 原文地址:https://www.cnblogs.com/huaweicloud/p/11861414.html
Copyright © 2020-2023  润新知