zoukankan      html  css  js  c++  java
  • 【跟唐老师学习云网络】-第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

  • 相关阅读:
    react ts axios 配置跨域
    npm run eject“Remove untracked files, stash or commit any changes, and try again.”错误
    java 进程的参数和list的线程安全
    帆软报表 大屏列表跑马灯效果JS
    帆软报表 快速复用数据集,避免重复劳动
    分析云 OA中部门分级思路和实现方法
    分析云 分段器 只显示一个块的数据
    分析云 更改服务默认的端口号
    分析云U8项目配置方法新版本(2)
    Oracle 创建时间维度表并更新是否工作日字段
  • 原文地址:https://www.cnblogs.com/2020-zhy-jzoj/p/13165432.html
Copyright © 2011-2022 走看看