iptables一:原理与基础

一:主要分为网络防火墙和应用层防火墙

   1:网络防火墙

      一个位于计算机和它所连接的网络之间的防火墙。该计算机流入流出的所有网络通信均要经过此防火墙。

    2:应用层防火墙

     是在 TCP/IP 堆栈的“应用层”上运作,您使用浏览器时所产生的数据流或是使用 FTP 时的数据流都是属于这一层。应用层防火墙可以拦截进出某应用程序的所有封包,并且封锁其他的封包(通常是直接将封包丢弃)。

、iptables的表链结构

     iptables是 防火墙规则编写工具 (只是一种规则)netfilter: framework  (规则存放地,是一个框架。)

iptables工作于用户空间,是防火墙的规则编写工具,使用iptables编写规则并且发送到netfilter;防火墙的规则刚放到netfilter中,它是一个能够让规则生效的网络架构,工作于内核空间。

     2iptables的组成结构

    由四表五列组成;

wKiom1T-jrXDVRBZAAI2C24nX6c473.jpg

优先级:raw表  >  mangle表 >  nat表  >  filter表

①、raw表

RAW表只使用在PREROUTING链和OUTPUT链上,因为优先级最高,从而可以对收到的数据包在连接跟踪前进行处理。一但用户使用了RAW表,在某个链上,RAW表处理完后,将跳过NAT表和ip_conntrack处理,即不再做地址转换和数据包的链接跟踪处理了。

       RAW表可以应用在那些不需要做nat的情况下,以提高性能。如大量访问的web服务器,可以让80端口不再让iptables做数据包的链接跟踪处理,以提高用户的访问速度。

 ②、mangle表

       mangle表一般是对数据包进行修改用的

       比如在网络的转发过程中,数据包要从X到Z,中间夹了一个Y,当数据从X到Y的时候,Y要运行拆包,看是不是自己的,如果是就收下了,如果不就是重新封装,把源IP改为自己的,而不再是X的了,再进行转发。

③、nat表

       用于nat功能(端口映射,地址映射等)

       主要用来处理一些将要到达本机路由和将要离开本机路由的数据包,修改数据包中的源、目标IP地址或端口;其对应的模块为iptable_nat。

 ④、filter表

       一看名字就知道是用来做过滤用的。filter表是iptables的默认表,如果在设置规则时,不指定表,则默认就是在filter表上操作

2)五链

       这五条链其实就是针对防火墙策略的规则

   ①、PREROUTING

       路由前,数据包在经过防火墙前应做如何处理

   ②、INPUT

       在数据包进行进入本机前就做何处理,目标是本机,不是网络内的主机

   ③、OUTPUT

       在数据包离开本机时做何处理,源是本机,目标是其它主机

   ④、FORWARD

       对于转发数据包做如何处理,因为本机可能是一台代理服务器,网络内的其它主机在与互联网通信时都需要经过这台服务器的转发

   ⑤、POSTROUTING

       在数据包离开防火墙时做如何处理

INPUT、OUTPUT链主要用在“主机型防火墙”中,即主要针对服务器本机进行保护的防火墙;而FORWARD、PREROUTING、POSTROUTING链多用在“网络型防火墙”中,

三、iptables数据包的过滤流程

wKiom1T-kSOQPhRBAAJQoUcKdbQ901.jpg

四、iptables使用规则

   iptables规则=检查条件+处理机制

   1)检查条件

       (1)IP:源IP,目标IP

       (2)Protocal:TCP、UDP、ICMP

               TCP:源端口、目标端口、Flags

               UDP:源端口、目标端口

               ICMP:ICMP-TYPE  报文类型

       TCP Flags:基于标记的TCP包匹配经常被用于过滤试图打开新连接的TCP数据包,共有六个标志位,UDP没有

       ①、URG

           如为1,则表示本数据包中含有紧急数据

       ②、ACK

           确认标志们

       ③、PSH

           PUSH操作,所谓PUSH操作就是批数据包到达接收端以后,立即传送给应用程序,而不是在缓冲区中排队

       ④、RST

           表示连接复位请求,用来复位那些产生错误的连接;当PST=1时,表示出现严重错误,必须释放连接,然后再重新建立

       ⑤、SYN

           表示同步序号,用来建立连接。

           SYN=1,ACK=0 表示连接请求

           SYN=1,ACK=1 表示连接请求被响应

       ⑥、FIN

           表示数据已经发送完毕,希望释放连接

2)处理机制、动作     -j target

       ACCEPT:将包放行,进行完此处理动作后,将不再匹配其它规则,直接跳往下一个规则链

       DENY:拒绝,委婉式的拒绝

       DROP:丢弃数据包,进行完此处理动作后,将不再匹配其它规则,直接中断过滤程序

       REJECT:阻拦该数据包,并通知对方(ICMP消息)

       SNAT:改定数据包源IP

       DNAT:改定数据包目标IP

       RETURN:结束在目前规则链中的过滤程序,返回主规则链继续过滤,如果把自定义规则链看成是一个子程序,那么这个动作,就相当于提前结束子程序并返回到主程序中。

       REDIRECT:将数据包重新导向到另一个端口(PNAT),进行完此处理动作后,将会继续匹配其它规则

       LOG:记录日志

五、iptables语法

iptables [-t table] -N chain

 创建一条自定义的规则链

iptables [-t table] -X [chain]

 删除一条自定义的规则链

iptables [-t table] -E old-chain-name new-chain-name

 修改自义链名

iptables [-t table] -P chain target

 为链指定默认策略,指定默认规则

iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]

-F: 清空链中的规则

 规则有编号,在链中自上而下,从1开始;

 -L: list,列出表中的所有规则;

 -n: 数字格式显示IP和Port

 -v: 以详细格式显示


-Z:zero,清零,把规则的计数器清零

   6)iptables [-t table] {-A|-D} chain rule-specification

   -A:append,附加一条规则,添加到现在规则链的最下面(-I:默认添加到最前面)
rule-specification

       匹配条件 -j 处理机制

       (1)通用匹配:

           -s:source,匹配源地址,可以是IP,也可以是网络地址;可以使用!操作符取反

           -d:匹配目标地址,可以是IP,也可以是网络地址;可以使用!操作符取反

           -p:匹配协议,通常只使用{TCP|UDP|ICMP}三者之一

           -i:数据报文流入接口;通常只用于INPUT、FORWARD和PREROUTING

           -o:数据报文流出接口;通常只用于OUTPUT、FORWARD和POSTROUTING

EG:

 iptables -A INPUT -i eth0 -d 192.168.211.128 -p tcp -j ACCEPT

通过eth0端口进来,目标地址是本机,遵守tcp协议的可进入。

[root@xiaoxiao ~]# iptables -v -L -n

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination         

78683   88M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 

    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           

  132  7968 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           

    3   156 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 

 2157  476K REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

    0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            192.168.211.128    

(2)扩展匹配:

        ①隐含扩展:使用-p{tcp|udp|icmp}指定某特定服务后,自动能够对协议进行扩展

           -p tcp

               --dport m[-n]:匹配的目标端口,可以是连续的多个端口   

               --sport m[-n]:匹配的源端口,可以是连续的多个端口

               --tcpflags           (6个标志们:URG、PSH、RST、SYN、ACK、FIN)

                   --tcp-flags rst,syn,ack,fin syn = --syn

                   ALL,NONE

           -p udp     udp没有标志位,所以只有源端口和目标端口可选

               --dport

               --sport

           -p icmp

               --icmp-type

                 8:ping 请求

                 0:ping响应

         ②显示扩展:必须要明确指定的扩展模块

           -m 扩展模块名称 --专用选项1 --专用选项2

           multiport:多端口匹配,一次指定多个(15个以内)离散端口

               --source-ports, --sports

               --destination-ports,  --dports

               --ports

           iprange:ip地址范围

               [!] --src-range from[-to]

               [!] --dst-range from[-to]

           time:指定时间范围

               datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

               datestop


               timestart hh:mm[:ss]

               timestop hh:mm[:ss]


               [!]--weekdays day[,day...]

           string:字符串匹配

               --algo{bm|kmp}:字符匹配查找时使用算法

               --string "STRING":要查找的字符串

               --hex-string "HEX-STRING":要查找的字符,先编码成16进制格式

           connlimit:第IP对指定服务的最大并发连接数

               [!]--connlimit-above [n]

           limit:报文速率控制

               --limit #[/second|/minute|/hour|/day]

               --limit-burst #

           state:状态匹配

               ip_conntrack,nf_conntrack

               --state

                   NEW

                   ESTABLISHED

                   RELATED

                   INVALID

  -D 删除规则

1
iptables [-t table] -D chain rulenum

  -I 插入规则

1
iptables [-t table] -I chain [rulenum] rule-specification

-R 替换指定规则

1
iptables [-t table] -Rchain rulenum rule-specification

-S 只显示指定链上的规则添加命令

1
iptables [-t table] -S [chain [rulenum]]


你可能感兴趣的:(iptables基础)