iptable 理解

iptable 理解这个当初我理解不了,主要是没把netfilter理解清楚。Netfilter是集成在内核中的,用来定义存储各种规则的。Iptalbe是修改这些规则的工具,修改后存在netfilter里面。数据包进入LINUX服务器时,先进入服务器的netfilter模块中进行判断处理。 Netfilter包含有三种表,三种表下共包含有五种链,链下面包含各种规则。即表包含若干链,链包含若干规则。 …

大家好,又见面了,我是你们的朋友全栈君。

这个当初我理解不了,主要是没把netfilter理解清楚。 Netfilter是集成在内核中的,用来定义存储各种规则的。Iptalbe是修改这些规则的工具,修改后存在netfilter里面。

数据包进入LINUX服务器时,先进入服务器的netfilter模块中进行判断处理。

 

Netfilter包含有三种表,三种表下共包含有五种链,链下面包含各种规则。即表包含若干链,链包含若干规则。

 

(一)三种表为:filter   nat  mangle

 1、filter:处理与本机有关的数据包,是默认表,包含有三种链:input   output forward

2、nat表:与本机无关。主要处理源与目的地址IP和端口的转换。有三种链:prerouting  postrouting output

3、mangle表:用于高级路由信息包,如包头内有更改(如tos改变包的服务类型,ttl包的生存时间,mark特殊标记)。

有两种链:prerouting  output  (kernel  2.4.18后又加了两种链:input forward)这种表很少使用:

 

(二)五种链(链在表下面,为了条理清晰,才另外作一大点讲解)

 

1、prerouting:进入netfilter后的数据包在进入路由判断前执行的规则。改变包。

2、Input:当经过路由判断后,要进入本机的数据包执行的规则。

3、output:由本机产生,需向外发的数据包执行的规则。

4、forward:经过路由判断后,目的地不是本机的数据包执行的规则。与nat 和 mangle表相关联很高,与本机没有关联。

5、postrouting:经过路由判断后,发送到网卡接口前。即数据包准备离开netfilter时执行的规则。

 

 

iptable 理解

上图上,运行中的守护进程,是指本机。Input的包都会发到本机。本机处理后再经output 发出去。

 

(三)数据包进入netfilter后的经过图:

 

1、数据包进入linux服务器入接口,接口把数据包发往netfilter,数据包就此进入netfilter。

2、经prerouting处理,(如是否需要更改数据包的源IP地址等)

3、数据包到路由,路由通过路由表判断数据包的目的地。如果目的地是本机,就把数据包转给intput处理后进入本机。如果目的地不是本机,则把数据包转给forward处理。

4、数据包通过forward处理后,再转给postrouting处理,(是否有目标地址需要改变等),处理后数据包就出了netfilter,到linux服务器出接口,就出了linux服务器。

5、如果数据包进了本机后经过处理需要外发数据包,或本机自身有数据包需要外发,就把数据包发给output链进行处理后,转给postrouting处理后,出linux服务器。进入外面的花花世界。

 

(三)规则的执行顺序

当数据包进入netfilter,就会和里面的规则进行对比。规则是有顺序的。

先和规则1对比,如果和规则1相匹配,被规则1接受(accept),则数据将不再和后面的规则进行对比。

如果不匹配,则按顺序和后面的规则进行对比,直到被接受。如果所有的规则都不匹配,则进行默认策略操作,以决定数据包的去向。

所以规则的顺序很重要。

 

 IPTABLE主要是理解上面的内容,一些详细参数可以见附件中的指南。
 

  二、iptalbe语法及参数

iptable [-t table] command [chain] [match][-j target]
注释:iptable [-t 表名] -命令 [链接] [匹配] [-j 动作/目标]

(一) table  (表)

1、filter表:默认用filter表执行所有的命令。只操作与本机有关的数据包。
2、nat表:主要用于NAT地址转换。只有数据流的第一个数据包被这个链匹配,后面的包会自动做相同的处理。
  分为:DNAT(目标地址转换)、SNAT(源地址转换)、MASQUERADE

(1)DNAT操作主要用在这样一种情况,你有一个合法的IP地址,要把对防火墙的访问 重定向到其他的机子上(比如DMZ)。也就是说,我们改变的是目的地址,以使包能重路由到某台主机。

(2)SNAT 改变包的源地址,这在极大程度上可以隐藏你的本地网络或者DMZ等。内网到外网的映射。

(3)MASQUERADE 的作用和SNAT完全一样,只是计算机的负荷稍微多一点。因为对每个匹配的包,MASQUERADE都要查找可用的IP地址,而不象SNAT用的IP地址 是配置好的。当然,这也有好处,就是我们可以使用通过PPP、 PPPOE、SLIP等拨号得到的地址,这些地址可是由ISP的DHCP随机分配的。

3、mangle表:用来改变数据包的高级特性,一般不用。

(二) command(命令)详解
 
1、 -A或者–append     //将一条或多条规则加到链尾
2、 -D或者–delete     //从链中删除该规则
3、 -R或者–replace   //从所选链中替换一条规则
4、 -L或者–list       //显示链的所有规则
5、 -I或者–inset     //根据给出的规则序号,在链中插入规则。按序号的顺序插入,如是 “1”就插入链首
6、 -X或者–delete-chain  //用来删除用户自定义链中规则。必须保证链中的规则都不在使用时才能删除链。如没有指定链,将删除所有自定义链中的规则。
7、 -F或者–flush        //清空所选链中的所有规则。如指定链名,则删除对应链的所有规则。如没有指定链名,则删除所有链的所有规则。
8、 -N或者–new-chain      //用命令中所指定的名字创建一个新链。
9、 -P或者–policy        //设置链的默认目标,即策略。 与链中任何规则都不匹配的信息包将强制使用此命令中指定的策略。
10、-Z或者–zero        //将指定链中的所有规则的包字节计数器清零。

(三) match 匹配

分为四大类:通用匹配、隐含匹配、显示匹配、针对非正常包的匹配

1、通用匹配

   无论我们使用何种协议,装入何种扩展,通用匹配都可以使用权用。不需要前提条件

(1) -p(小写)或–protocl   

用来检查某些特定协议。协议有TCP\UDP\ICMP三种。可用逗号分开这三种协议的任何组合。也可用“!”号进行取反,表示除该协议外的剩下的协议。也可用all表示全部协议。默认是all,但只代表tcp\udp\icmp三种协议。

$ iptable -A INPUT -p TCP,UDP
$ iptable -A INPUT -p ! ICMP     //这两种表示的意思为一样的。

(2) -s 或 –source

以Ip源地址匹配包。根据源地址范围确定是否允许或拒绝数据包通过过滤器。可使用 “!”符号。    默认是匹配所有ip地址。
可是单个Ip地址,也可以指定一个网段。  如: 192.168.1.1/255.255.255.255  表示一个地址。   192.168.1.0/255.255.255.0  表示一个网段。

(3) -d  或 –destination  

用目的Ip地址来与它们匹配。与  source 的格式用法一样

(4)  -i  

   以包进入本地所使用的网络接口来匹配包。只能用INPUT \ FORWARD \prerouting 三个链中。用在其他任何链中都会出错。
   可使用“+”  “!”两种符号。
  只用一个“+”号,表示匹配所有的包,不考虑使用哪个接口。如: iptable -A INPUT  -i +  //表匹配所有的包。
  放在某类接口后面,表示所有此类接口相匹配。如:    iptable  -A INPUT -i eth+   //表示匹配所有ethernet 接口。

(5)  -o
    
  以数据包出本地所使用的网络接口来匹配包。与-i一样的使用方法。
   只能用INPUT \ FORWARD \prerouting 三个链中。用在其他任何链中都会出错。
   可使用“+”  “!”两种符号。  

 (6)  -f  (或  –fragment )

      用来匹配一个被分片的包的第二片或以后的部分。因一个数据包被分成多片以后,只有第一片带有源或目标地址。后面的都不带 ,所以只能用这个来匹配。可防止碎片攻击。

2、隐含匹配

   这种匹配是隐含的,自动的载入内核的。如我们使用 –protocol tcp  就可以自动匹配TCP包相关的特点。
   分三种不同协议的隐含匹配:tcp   udp  icmp 

  2.1   tcp match

       tcp match 只能隐含匹配TCP包或流的细节。但必须有  -p tcp 作为前提条件。

   (2.1.1)  TCP –sport   
            基于tcp包的源端口匹配包  ,不指定此项则表示所有端口。

            iptable -A INPUT -p  TCP  –sport   22:80    //TCP源端口号22到80之间的所有端口。
            iptable -A INPUT -p  TCP  –sport   22:      //TCP源端口号22到65535之间的所有端口。      

   (2.1.2)  TCP –dport   

            基于tcp包的目的端口来匹配包。   与–sport端口用法一样。

    (2.1.3)  TCP –flags   

            匹配指定的TCP标记。  

            iptable  -p  TCP –tcp-flags  SYN,FIN,ACK   SYN 

   2.2   UDP match

       (2.1.1)  UDP –sport   
            基于UDP包的源端口匹配包  ,不指定此项则表示所有端口。
       
        (2.1.1)  UDP –dport   
            基于UDP包的目的端口匹配包  ,不指定此项则表示所有端口。

   2.3   icmp match 

       icmp –icmp-type    

       根据ICMP类型包匹配。类型 的指定可以使用十进制数或相关的名字,不同的类型,有不同的ICMP数值表示。也可以用“!”取反。

例:      iptable  -A INPUT  -p icmp-imcp-type 8  

  3、显示匹配

    显示匹配必须用  -m装 载。  

     (1)limit match   
 
       必须用 -m limit 明确指出。  可以对指定的规则的匹配次数加以限制。即,当某条规则匹配到一定次数后,就不再匹配。也就是限制可匹配包的数量。这样可以防止DOS攻击。
       限制方法: 设定对某条规则 的匹配最大次数。设一个限定值 。 当到达限定值以后,就停止匹配。但有个规定,在超过限制次数后,仍会每隔一段时间再增加一次匹配次数。但增加的空闲匹配数最大数量不超过最大限制次数。

        –limit rate
          最大平均匹配速率:可赋的值有’/second’, ‘/minute’, ‘/hour’, or ‘/day’这样的单位,默认是3/hour。

        –limit-burst number
         待匹配包初始个数的最大值:若前面指定的极限还没达到这个数值,则概数字加1.默认值为5

    iptable -A INPUT -m limit –limt 3/hour    //设置最大平均匹配速率。也就是单位时间内,可匹配的数据包个数。   –limt 是指定隔多 长时间发一次通行证。
    iptable -A INPUT  -m limit –limit-burst 5  //设定刚开始发放5个通行证,也最多只可匹配5个数据包。

   (2) mac match 

        只能匹配MAC源地址。基于包的MAC源地址匹配包

   iptable -A  INPUT -m mac  –mac-source   00:00:eb:1c:24     //源地址匹配些MAC地址

    (3)  mark match 

       以数据包被 设置的MARK来匹配包。这个值由  MARK TARGET 来设置的。

  (4)  multiport match 

         这个模块匹配一组源端口或目标端口,最多可以指定15个端口。只能和-p tcp 或者 -p udp 连着使用。
 

        多端口匹配扩展让我们能够在一条规则里指定不连续的多个端口。如果没有这个扩展,我们只能按端口来写规则了。这只是标准端口匹配的增强版。不能在一条规则里同时用标准端口匹配和多端口匹配。

 三个选项:   –source-port   ;  –destination-port  ;   –port

        iptable  -A INPUT  -p TCP   -m  multiport  –source-port 22,28,115        
        iptable  -A INPUT  -p TCP   -m  multiport  –destination-port 22,28,115  
        iptable  -A INPUT  -p TCP   -m  multiport  –port 22,28,115 

  (5) state match 

       状态匹配扩展要有内核里的连接跟踪代码的协助。因为是从连接跟踪机制得到包的状态。这样不可以了解所处的状态。

 (6)  tos match 

       根据TOS字段匹配包,用来控制优先级。  

 (7)   ttl match 

     根据IP头里的TTL字段来匹配包。

(8) owner match

基于包的生成者(即所有者或拥有者)的ID来匹配包。  
owner 可以启动进程的用户的ID。或用户所在的级的ID或进程的ID,或会话的ID。此只能用在OUTPUT 中。 
此模块设为本地生成包匹配包创建者的不同特征。而且即使这样一些包(如ICMP ping应答)还可能没有所有者,因此永远不会匹配。

–uid-owner userid
如果给出有效的user id,那么匹配它的进程产生的包。

–gid-owner groupid
如果给出有效的group id,那么匹配它的进程产生的包。

–sid-owner seessionid
根据给出的会话组匹配该进程产生的包。

  

( 四) targets/jump   

  指由规则指定的操作,对与规则匹配的信息包执行什么动作。

  1、accept 

这个参数没有任何选项。指定  -j accept 即可。  
一旦满 足匹配不再去匹配表或链内定义的其他规则。但它还可能会匹配其他表和链内的规则。即在同一个表内匹配后就到上为止,不往下继续。

2、drop  

-j drop   当信息包与规则完全匹配时,将丢弃该 包。不对它做处理。并且不向发送者返回任何信息。也不向路由器返回信息。

3、reject 

与drop相同的工作方式,不同的是,丢弃包后,会发送错误信息给发送方 。
   
4、DNAT 

用在prerouting链上。
做目的网络地址转换的。就是重写目的的IP地址。
如果一个包被匹配,那么和它属于同一个流的所有的包都会被自动转换。然后可以被路由到正确的主机和网络。
也就是如同防火墙的外部地址映射。把外部地址映射到内部地址上。

iptalbe -t nat   -A PREROUTING   -d 218.104.235.238 -p TCP  –dport 110,125    -j DNAT –to-destination  192.168.9.1  
//把所有访问218.104.235.238地址  110.125端口的包全部转发到 192.168.9.1上。 

–to-destination   //目的地重写

5、SNAT 

用在nat 表的postrouting链表。这个和DNAT相反。是做源地址转换。就是重写源地址IP。 常用在内部网到外部网的转换。

–to-source  

iptable -t nat POSTROUTING  -o eht0 -p tcp  -j SNAT –to-source 218.107.248.127  //从eth0接口往外发的数据包都把源地址重写为218.107.248.127

6、MASQUERADE

masquerade 的作用和 SNAT的作用是一样的。 区别是,他不需要指定固定的转换后的IP地址。专门用来设计动态获取IP地址的连接的。
MASQUERADE的作用是,从服务器的网卡上,自动获取当前ip地址来做NAT
如家里的ADSL上网,外网的IP地址不是固定的,你无法固定的设定NAT转换后的IP地址。这时就需要用masquerade来动态获取了。

iptable -t nat -A POSTROUTING  -s 192.168.1.0/24 -j masquerade      //即把192.168.1.0 这个网段的地址都重写为动态的外部IP地址。

7、REDIRECT  

只能在NAT表中的PREROUTING  OUTPUT 链中使用
在防火墙所在的机子内部转发包或流到另一个端口。比如,我们可以把所有去往端口HTTP的包REDIRECT到HTTP proxy(例如squid),当然这都发生在我们自己的主机内部。

–to-ports

iptables -t nat -A PREROUTING -p tcp –dport 80 -j REDIRECT –to-ports 8080

不使用这个选项,目的端口不会被改变。

指定一个端口,如–to-ports 8080

指定端口范围,如–to-ports 8080-8090

8、RETURN 

顾 名思义,它使包返回上一层,顺序是:子链——>父链——>缺省的策略。具体地说,就是若包在子链中遇到了RETURN,则返回父链的下一条规 则继续进行条件的比较,若是在父链(或称主链,比如INPUT)中遇到了RETURN,就要被缺省的策略(一般是ACCEPT或DROP)操作了。(译者 注:这很象C语言中函数返回值的情况)

9、TOS

10、TTL

11、ULOG

12、MIRROR

13、MARK

14、LOG

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/140285.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • padstart兼容_显示列出polyfill

    padstart兼容_显示列出polyfill?原文链接:欢迎star.今天在看ES7新增的部分Api的时候刚好看到padStart的这个方法,好像还挺实用的,而且也想在正式开始工作之前先找找写代码的感觉,于是顺手(其实还是花了不少时间的)就实现了这个polyfill。相关的API用法在MDN上有说明。链接下面是具体实现if(!String.p…

  • DB2错误代码_db2错误码57016

    DB2错误代码_db2错误码570161前言作为一个程序员,数据库是我们必须掌握的知识,经常操作数据库不可避免,but,在写SQL语句的时候,难免遇到各种问题。例如,当咱们看着数据库报出的一大堆错误代码时,是否有种两眼发蒙的感觉呢?咳咳,莫要否认,你有、我有,全都有啊!不过,值得庆幸的是,已经有人帮咱们整理出一份关于DB2的错误代码大全啦,以后再遇到数据库报错,直接拎出看看,岂不爽哉?当然,在此对原作者送上万分的感谢。2错误

  • 51单片机按键控制步进电机加减速及正反转

    51单片机按键控制步进电机加减速及正反转之前尝试用单片机控制42步进电机正反转,电机连接导轨实现滑台前进后退,在这里分享一下测试程序及接线图,程序部分参考网上找到的,已经实际测试过,可以实现控制功能。所用硬件:步进电机及驱动器、STC89C52单片机、直流电源1、硬件连接图注意:上图为共阳极接法,实际连接参考总体线路连接。 驱动器信号端定义:PUL+:脉冲信号输入正。(C…

  • java培训达内学费[通俗易懂]

    java培训达内学费[通俗易懂]达内教育Java培训费用是多少钱?哪个机构好?根据目前的行情来看,Java培训费用大概在1-3万左右,每个人根据个人不同的基础决定学习的课程,有些人基础差点的,学习的是基础课程,费用相对低一点。除了关心Java培训费用是多少钱我们还会关心学习的周期,具体要学习多久呢?一般来说Java培训的时间是4个月左右,具体看个人学习情况,如果学习学的好,那么就4个月就能毕业了,如果是觉得学习完了后自己还是不太了解,那么可以留级,免费在学习一遍,为自己去面试在铺垫一下。Java培训哪个机构好?达内达内的特色是..

  • 字符串常量池概述[通俗易懂]

    字符串常量池概述[通俗易懂]字符串常量池概述常量池表(Constant_Pooltable)Class文件中存储所有常量(包括字符串)的table。这是Class文件中的内容,还不是运行时的内容,不要理解它是个池子,其实就是Class文件中的字节码指令。运行时常量池(RuntimeConstantPool)JVM内存中方法区的一部分,这是运行时的内容。这部分内容(绝大部分)是随着JVM运行时候,从常量池转化而来,每个Class对应一个运行时常量池。上一句中说绝大部分是因为:除了Class中常量池内容,还可能包括

  • matlab将两幅图进行融合_matlab拟合三维曲面

    matlab将两幅图进行融合_matlab拟合三维曲面matlab图像融合        [r,c]=size(y1);            %根据低频融合算法进行图像融合fori=1:r            %首先取两幅源图像相应的小波分解系数绝对值最大者的值作为融合图像的分解系数    forj=1:c        if(abs(y1(i,j))>=abs(y2(i,j)))            y3(

    2022年10月31日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号