iptables详解

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介:

1.简介

  iptables是基于软件的形式实现的一种防火墙程序

   Firewall:工作在主机或网络边缘,对进出的报文俺实现定义的规则进行处理的一组硬件或软件的组合,设置可能是两者的组合

   主机防火墙:工作在主机边缘,只能对一台主机起到保护的作用

   网络防火墙:工作于网络边缘,可以对多台主机起到保护的作用

   iptables/netfilter:基于网络层的防火墙,用于连接追踪和状态检测,其中iptales是防火墙规则的编写工具,工作在用户空间中。而netfilter则是一个网络过滤器,是一个框架,工作在内核空间中。

2.iptables的表和链

   iptables有四表和五链,他们分别是

   四表:filter net mangle raw

   五链:PREROUTING INPUT FORWARD OUTPUT POSTROUTING

   表和链的对应关系:

   filter INPUT FORWARD OUTPUT

   nat    PREROUTING OUTPUT POSTROUTING

   mangle PREROUTING INPUT FORWARD OUTPUT POSTOUTING

   raw:

   表的优先级:raw mangle net filter

   建议:将控制强的规则放在前面,应用访问频繁的也要放在前面

3.iptables的格式

   检查条件,处理机制

   通:白名单,默认为堵,只对能识别的进行放行

   堵:黑名单,默认为通,只对能识别的进行拦截

4.处理机制分为:

   DROP(丢弃)

   REJECT(直接拒绝)

   ACCEPT(允许)

   SNAT(源地址转换)

   DNAT(目标地址转换)

   RETURN(由自定义的链返回主链)

   LOG(只记录日志)

5.如何写规则,filter表可以省略不写

   创建一条自定义的空规则链

      iptables [-t table] -N chain

   清除一条自定义的空规则链

      iptables [-t table] -N chain

   修改自定义链的名称

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

   为链指定默认的策略,修改默认的属性

      iptables [-t table] -P chain-name target

   清空链中的规则

      iptables [-t table] -F chain-name

   插入规则:

      iptables [-t table] -I chain[rulenum] rule-specifiction

   替换指定的规则:

      iptables [-t table] -R chain rulenum rule-specifiction

   删除指定的规则:

      iptables [-t table] -D chain rulenum

   直显示指定脸上的规则添加命令:

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

   显示表中的所有规则

      iptables [-t table] -L options

           -n:数字格式显示ip和port

           -v:显示详细信息,显示的格式如下

             pkts:packets 被本规则所有匹配到的报文个数

             baytes:被本规则所匹配到的所有报文的大小之和,单位是字节,会执行单位换算,换算成人类能看清楚的格式显示

             target:目标,即处理机制

             port:协议,一般为(TCP|UDP|ICMP)

             opt:可选项

             in: 数据包的流入接口

             out:数据包的流出接口

             scource:源地址

             destination:目标地址

        -vv:更相信信息

        -vvv:

        -x:exactly 精确值,不执行单位换算

        --line-numbers:显示个规则的行号

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

6.如何为链添加删除等操作

   iptables [-t tables] {-A|-D} chain rule-specification

       -A:append 附加一条规则

   rule-specification 分为 匹配条件和处理机制,用-j来制定处理机制

      匹配条件:

         通用匹配:

           -s:匹配源地址,可以是IP,也可以是网络地址;也可以使用!操作符取反,如!172.16.0.0/16;-s 相当于 --src 或 --source  

           -d:匹配目标地址,与-s用法相同

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

           -i:数据报文流入的接口;通常只用于INPUT,FORWARD和PREROTING链上

           -o:流出的接口,通常只用于OUTPUT,FORWARD和POATROUTING

         扩展匹配:

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

           -p tcp

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

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

              --tcp-flags:在前面出现的在后面必须为1,在后面没有出现的前面必须为0

            例子:放行来自于172.16.0.0/16网段的主机对本机的web服务的请求

1
2
iptables -A INPUT -s  172.16 . 0.0 / 16  -d  172.16 . 130.200  -p tcp --dprot  22  -j ACCEPT
iptables -A OUTPUT -s  172.16 . 130.200  -d  172.16 . 0.0 / 17  -p tcp --sprot  22  -j ACCEPT

           -p udp

               --dport

               --sport

             例子:放行本机的tftp服务

1
2
iptables -A INPUT -s  172.16 . 0.0 / 16  -d  172.16 . 130.200  -p udp --dport  69  -j ACCEPT
iptables -A OUTPUT -s  172.16 . 130.200  -d  172.16 . 0.0 / 16  -p udp --sport  69  -j ACCEPT

            -p icmp

                --icmp-type

             例子:放行ping其他主机

1
2
iptables -A OUTPUT -s  172.16 . 130.200  -p icmp --icmp-type  8  -j ACCEPT
iptables -A INPUT -d  172.16 . 130.200  -p icmp --icmp-type  0  -j ACCEPT

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

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

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

         --source-ports, --sports port[,port|,port:port]

         --destination-ports, --dports port[,port|,port:port]

         --ports

             例子:开放本机的tcp的22和80端口      

1
2
iptables -I INPUT -d  172.16 . 130.200  -p tcp -m multiport --dports  22 , 80  -j ACCEPT
iptables -I OUTPUT -s  172.16 . 130.200  -p tcp -m multiport --sports  22 , 80  -j ACCEPT

       iprange:ip地址范围

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

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

             例子:开放本机的telnet端口给172.16.130.1-192.168.130.100

1
2
iptables -A INPUT -d  172.16 . 130.200  -p tcp --dport  23  -m iprange --src-range  172.16 . 130.1 - 172.16 . 130.100  -j ACCEPT
iptables -A OUTPUT -s  172.16 . 130.7  -p tcp --sport  23  -m iprange --dst-range  172.16 . 130.1 - 172.16 . 130.100  -j ACCEPT

        time:指定时间范围

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

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

           --timestart hh:mm[:ss]

           --timestop hh:mm[:ss]

           [!]--weekdays day[,day]

             例子:在上班时间开放22号端口

1
2
iptables -A INPUT -d  172.16 . 130.200  -p tcp --dport  22  -m time --weekdays Mon,Tus,Wed,Thu,Fri(也可以是 1 , 2 , 3 , 4 , 5 ) --timestart  08 : 00  -time-stop  18 : 00  -j ACCEPT
iptables -A INPUT -s  172.16 . 130.200  -p tcp --sport  22  -m time --weekdays Mon,Tus,Wed,Thu,Fri(也可以是 1 , 2 , 3 , 4 , 5 ) --timestart  08 : 00  -time-stop  18 : 00  -j ACCEPT

         string:字符串匹配

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

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

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

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

             [!] --connlimit-above [n]

         limit: 报文速率控制

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

              --limit #

         如何测试

            hping3 -c 1000 -i u1000 172.16.100.7 (u1000 表示1000微秒一个包,总共发起1000个)

         state:有限状态集

                NEW

                RELATED

                ESTABLISHED

                INVALID


       法则:

           1、对于进入的状态为ESTABLISHED都应该放行;

           2、对于出去的状态为ESTABLISHED都应该放行;

           3、严格检查进入的状态为NEW的连接;

           4、所有状态为INVALIED都应该拒绝;

7.如何保存和读取规则

  保存规则:

  service iptables save

  说明:规则会被保存至/etc/sysconfig/iptables文件中,默认iptables启动时也会读取次文件中的内容来设置规则

保存至别的文件中

iptables-save > /path/to/some_rulefile

在别的文件中加载  

iptables-restore < /path/from/some_rulefile

8.系统默认连接的个数

   调整连接追踪功能所能容纳的追踪的最大连接数:

       # cat /proc/sys/net/nf_conntrack_max

   定义了连接追踪的最大值,因此,建议按需调大此值;

       # cat /proc/net/nf_conntrack

   记录了当前追踪的所有连接

       # cat /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established

9.转发

    Basic NAT:静态NAT

    NAPT:动态NAT,网络地址端口转换

      源地址转换:SNAT 用户内网地址主机访问互联网

      目标地址转换:DNAT 让互联网的主机访问本地内网上的某服务器上的服务

    iptables基于SNAT和DNAT这两个目标实现地址转换技术

       -j SNAT --to-source SIP 添加在POSTROUTING链

       -j MASQUERAADE 动态获取          

       -j DNAT --to-destination DIP{:PORT}支持做端口映射,添加在PREROUTING


附:ip报文头部、tcp报文、有限状态机

wKioL1M0PpSz_buBAARM7uEJ280319.jpg

wKiom1M0PryQ_IccAASfTv8BVh0662.jpg

wKioL1M0PpTBHiZiAAKvKF48NPU314.jpg

wKiom1M0PryQA257AAGhiudUfBg534.jpg

wKioL1M0PpXBpmMXAAAdMAh7kok811.jpg


本文转自wangfeng7399 51CTO博客,原文链接:http://blog.51cto.com/wangfeng7399/1385611,如需转载请自行联系原作者

相关文章
|
安全 网络协议 Linux
扒一下一直不求甚解的 iptables
iptables 是用于配置 Linux 2.4.x 及更高版本包过滤规则集的用户空间命令行程序。它针对系统管理员。 由于网络地址转换 (NAT) 也是从包过滤规则集配置的,iptables 也用于此。 iptables 包还包括 ip6tables。ip6tables 用于配置 IPv6 包过滤器。
扒一下一直不求甚解的 iptables
|
网络协议 Linux 测试技术
iptables超全详解
数据包先经过PREOUTING,由该链确定数据包的走向:     1、目的地址是本地,则发送到INPUT,让INPUT决定是否接收下来送到用户空间,流程为①--->②;     2、若满足PREROUTING的nat表...
1870 0
|
网络协议 Linux 网络安全
|
网络协议 安全 Linux
|
网络协议 网络安全
|
网络协议 算法 网络安全
|
网络协议 网络安全