【跟唐老师学习云网络】-第8篇 iptables - filter过滤功能
【摘要】 前面的各种协议已经可以把基本可用的物理网络世界给形成了,在正常情况下,它可以玩的很溜。比如组个局域网办公,或者打个联机魔兽争霸,都没有什么问题。
一、背景介绍
前面的各种协议已经可以把基本可用的物理网络世界给形成了,在正常情况下,它可以玩的很溜。比如组个局域网办公,或者打个联机魔兽争霸,都没有什么问题。
可是,网络世界中总是会有邪 恶的“人”出现,它就不按照大家约定好的规则来发送报文。比如扫描整个网络中的开放端口,扒取各种可能的网页/网络信息,发送大量报文进行冲击。仅仅依靠单纯而美好的协议世界无法阻止这种不按约定而来的行为。
还记得我们最开始的网络概念么?

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

看上去这是一种不错的方式,守住大门总能防住无理的窥探。这里这个“复杂的机关阵”有个不错的名字,叫做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
【跟唐老师学习云网络】-第8篇 iptables - filter过滤功能的更多相关文章
- 【华为云技术分享】跟唐老师学习云网络 : Kubernetes网络实现
当今K8s独霸天下之时,咱们站在更高的角度,好好的看看K8s网络是以什么理念构筑的.以及一个容器集群的好保姆,是如何分别照顾 南北流量和东西流量的. 一.简单介绍下Kubernetes 略..容器集群 ...
- 【跟唐老师学习云网络】 - 第7篇 Tcpdump大杀器抓包
[摘要] 前面章节的网络协议栈相关的信息建议大家多学习一遍,因为这些都是最基础的东西,想玩好云网络必备基本功.. 一.上帝视角 之前提到过定位问题可以开启上帝视角,那么如何开启就要依靠tcpdump这 ...
- 《跟唐老师学习云网络》 -第4篇 router路咋走啊【华为云技术分享】
[摘要] 好了,到这里至少你应该能看懂路由表信息了.给你一个目的IP,你也应该知道它会使用哪一条路由了. 路怎么走就看骚年你了~ 一.路由 其实关于网络大家遇到最多的问题就是:卧 槽,为什么不通啊! ...
- 【跟唐老师学习云网络】 - 第6篇 ARP你在哪
[摘要] 这一章节你的角色就是ping报文这个"使者",你要去往目的地,然后回到本机.然而目的地路漫漫,不知道要经过多少个小地盘(局域网),没两把刷子也不好行走江湖.所以你作为使者 ...
- 《跟唐老师学习云网络》 -第5篇 Ping喂报文
[摘要] 这一章节你的角色是国王,你要派一个小兵去对方打探一下.是站在你的角度看这个小兵.哦,对了,这个小兵的名字叫"喂". 一.Ping命令介绍 ping就是用来检测一下网络能不 ...
- python基础学习笔记——网络编程(协议篇)
一 互联网的本质 咱们先不说互联网是如何通信的(发送数据,文件等),先用一个经典的例子,给大家说明什么是互联网通信. 现在追溯到八九十年代,当时电话刚刚兴起,还没有手机的概念,只是有线电话,那么此时你 ...
- 带你熟悉云网络的“电话簿”:DNS
摘要:无论你域名怎么解析,最终我还是要用IP和别人通信的.域名只是你的皮囊,IP才是你的灵魂. 本文分享自华为云社区<<跟唐老师学习云网络> - DNS电话簿>,作者: tsj ...
- OpenFlow能解决私有云网络VLAN问题么
本文转载自:http://network.51cto.com/art/201202/314310.htm 在关于私有云网络的文章中,我们首先探讨了物理网络是否影响私有云.本文我们将讨论如何通过软件定义 ...
- 深入浅出新一代云网络——VPC中的那些功能与基于OpenStack Neutron的实现(一)
VPC的概念与基于vxlan的overlay实现很早就有了,标题中的"新"只是一个和传统网络的相对概念.但从前年开始,不同于以往基础网络架构的新一代SDN网络才真正越来越多的走进国 ...
随机推荐
- 「刷题」可怜与STS
又是一道假期望,我们发现一共有$ C_{2n}^m $种情况. 而$ \frac{(2n)!}{m!(2n-m)!}=C_{2n}^m $ 其实结果就是各个情况总伤害. 1.10分算法,爆搜10分. ...
- NOIP模拟21+22
模拟21确实毒瘤...考场上硬刚T3 2.5h,成功爆零 T1.数论 看这题目就让人不想做,考场上我比较明智的打完暴力就弃掉了,没有打很久的表然后找规律. 正解貌似是乱搞,我们考虑一个比较显然的结论: ...
- Scrapy爬取豆瓣图书数据并写入MySQL
项目地址 BookSpider 介绍 本篇涉及的内容主要是获取分类下的所有图书数据,并写入MySQL 准备 Python3.6.Scrapy.Twisted.MySQLdb等 演示 代码 一.创建项目 ...
- python分支和循环结构
本文收录在Python从入门到精通系列文章系列 1. 分支结构 1.1 应用场景 迄今为止,我们写的Python代码都是一条一条语句顺序执行,这种代码结构通常称之为顺序结构.然而仅有顺序结构并不能解决 ...
- 大数据之路week01--自学之面向对象java(static,this指针(初稿))
函数的重载 返回值不一样会报错 java中,如果自己定义了构造函数的话,它就不会给你默认一个无参函数 如果一个属性,只进行定义,不初始化,自动补0,如果是一个布尔属性,默认是false但是如果一个局部 ...
- 震惊!我竟然发现了JDK源码的问题
读源码时的思考 最近在看concurrent包下线程池的源码,当我看到ThreadPoolExecutor类的时候,发现了JDK源码的一个问题.以下是ThreadPoolExecutor类的addWo ...
- django 之创建自己的模板(使用案例)
Django 创建自己的模板篇(实例) 此处需要创建模板,主要是对自己的模板进行扩展: 一般是扩展模板的tag和filter两个功能.可以用来创建你自己的tag和filter功能库. 创建模板库 分为 ...
- SSE图像算法优化系列三十:GIMP中的Noise Reduction算法原理及快速实现。
GIMP源代码链接:https://gitlab.gnome.org/GNOME/gimp/-/archive/master/gimp-master.zip GEGL相关代码链接:https://gi ...
- [ISE使用] 使用ISE的过程中,遇到过的一些“软件上的问题”
1.planahead打不开了. PlanAhead替代文件rdiArgs.bat的下载链接如下: http://www.eevblog.com/forum/microcontrollers/guid ...
- 力扣(LeetCode)整数反转 个人题解
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: ...