iptable 防火墙的原理及其应用详解

一、iptables百科名片

     iptables 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。

防火墙在做信息包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的信 息包过滤表中,而这些表集成在 Linux 内核中。在信息包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 信息包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。

二、防火墙  

防火墙指的是一个由软件和硬件设备组合而成、在内部网和外部网之间、专用网与公共网之间的界面上构造的保护屏障.。工作于网络或主机边缘,对进出本网络或本主机的网络报文按照事先设定好的匹配规则进行检查,对能够被规则所匹配的报文按照规则定义的处理机制进行处理的组件。

     防火墙是一种计算机硬件和软件的结合,使Internet与Intranet之间建立起一个安全网关(Security Gateway),从而保护内部网免受非法用户的侵入,防火墙主要由服务访问规则、验证工具、包过滤和应用网关4个部分组成,防火墙就是一个位于计算机和它所连接的网络之间的软件或硬件。该计算机流入流出的所有网络通信和数据包均要经过此防火墙。

     在网络中,所谓“防火墙”,是指一种将内部网和公众访问网(如Internet)分开的方法,它实际上是一种隔离技术。

三、防火墙类型

  1、网络层防火墙:网络层防火墙可视为一种 IP 封包过滤器,运作在底层的TCP/IP协议堆栈上。

  2、应用层防火墙:应用层防火墙是在 TCP/IP 堆栈的“应用层”上运作,使用浏览器时所产生的数据流或是使用 FTP 时的数据流都是属于这一层。

  3、数据库防火墙:数据库防火墙是一款基于数据库协议分析与控制技术的数据库安全防护系统。基于主动防御机制,实现数据库的访问行为控制、危险操作阻断、可疑行为审计。

  4、入侵检测系统:NIDS,HIDS

     NIDS设备:snort  HIDS设备:OSSEC

  5、入侵防御系统:IPS

四、iptables 防火墙的版本

  1、linux/内核版本2.0: ipfirewall  简陋

  2、linux/内核版本2.2: ipchains  单链

  3、linux/内核版本2.4: iptables   多链如表

五、iptables 规则的功能及其属性

防火墙本身不能”防火“,而是靠内核规定的规则来”防火“的

1、 iptables  四个内置的表

  1)、filter : 过滤

  2)、nat : 地址转换

  3)、mangle :  修改报文属性

  4)、raw: 原始未加工报文

2、iptables 五个检查点 即五条内置链

四个表放于五个点间,内置链放不同的规则,且内置链不可删除

  规则必须在5条内置链上才能实现。

  1)、PREROUTING : 路由前  

  2)、INPUT: 输入

  3)、FORWARD :  转发

  4)、OUTPUT :   输出

  5)、POSTROUTING :  路由后

3、规则的属性

  1)、网络层的协议属性

     ip报文

  2)、传输层的协议属性

     tcp报文  、 udp报文

     icmp报文 (icmp协议是工作在网络层与传输层之间的协议)

六、iptables 的相关命令选项

 1、小写字母选项:用来匹配标准及定义标准属性

-t:{filter|nat|mangle|raw}指定表的类型;

  -n:数字格式显示IP和PORT;

  --line-number:显示链中规则的行号;

  -x:显示精确值,不做单位换算;

  -v:显示详细信息

# iptables -L  -t filter -n --line-number -v(-vvv)
# iptable -L -n -v

2、大写字母选项:实现特定功能的子命令

  1)、管理链的子命令

  -L:列出相关链及其规则的列表

-F:清空链

# iptables -t filter -F
# iptables -F

-P:为指定键设定默认策略

# iptables -t filter -P INPUT ACCEPT
# iptables -t filter -P FORWARD
# iptables -t filter -P OUTPUT ACCEPT

-N:新建一条自定义链,只能附加在5条内置链上

# iptables -N  FILTER_WEB

-X:删除自定义的空链

自定义链要先清空才能删

  -Z:计算器清空

  -E:重命名自定义

  2)、管理规则

  -A:append 附加

  -I[n]:插入为第n条

  -D[n]:删除第n条

  -R[n]:替换第n条

# iptables -A INPUT ...
# iptables -I INPUT 1 ...
# iptables -D INPUT 2 ...
# iptables -R INPUT 1 ...


七、编写规则语法

  1、语法格式

iptables [-t  表]  大写选项子命令  [规则号]  链名  匹配标准  -j  目标

   2、目标 即 -j(管理机制)所处理的目标

          DROP: 丢弃

          REJECT:  拒绝

          ACCEPT:  接受

          RETURN:  返回

          REDIECT:  端口重定向

          DNAT:  目标转换

          SNAT:  源地址转换

          LOG:  记录日志

          MARK:  打标,标记经过的防火墙

自定义链 ,要返回的

   3、匹配标准

      1)、通用匹配

-s | --src | --source:  [!] IP/NETMASK  源地址

         -d | --dst | --destination:  [!] IP/NETMASK  目标地址

         -j :跳转目标,处理机制

# iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.20.1 -j ACCEPT

          -i  incoming_interface :  指定数据报文流入接口

         -o outing_interface :  指定数据报文的流出

     2)、扩展匹配

         ① 隐含扩展

         ② 显式扩展

  4、规则保存

     1)、service iptables save

     2)、iptables-save > /path/to/iptables.rules  

                 保存至/etc/sysconfig/iptables

  5、生效规则文件中的规则

             iptables-restore < /path/to/ipables.rules

八、扩展匹配详解

  扩展匹配:要使用“-m  扩展名称” 来引用,而每一个扩展模块一般都会有自己特有的专用选项,这些选项中有些是必备的。

    1、隐含扩展

       1)、- p tcp

             - p  tcp --sport

             - p  tcp --dport

             - p  --tcp-flags  跟两个参数 (要检查的标记   必须为1的标记)

             --syn = --tcp-flags SYN,ACK,RST,FIN SYN

eg: 放行对web服务器的访问

# iptables -A INPUT -d 172.16.20.1 -p tcp --dport 80 -j ACCEPT
  //别人的请求能进来
# iptables -A OUTPUT -d 172.16.20.1 -p tcp --sport 80 -j ACCEPT
  //自己的响应能出去

      2)、- p udp

             - p  udp  --sport

             - p  udp  --dport

eg:放行对DNS的访问

# iptables -A INPUT -d 172.16.20.1 -p udp --dport 53 -j ACCEPT
  //别人的请求能进来
# iptables -A OUTPUT -s 172.16.20.1 -p udp --sport 53 -j ACCEPT
  //自己的响应能出去
# iptables -A OUTPUT -s 172.16.20.1 -p udp --dport 53 -j ACCEPT
  //自己的请求能出去
# iptables -A INPUT -d 172.16.20.1 -p udp --sport 53 -j ACCEPT
  //别人的响应能进来

       3)、- p icmp

             --icmp-type

            请求:--icmp-type 8

            响应:--icmp-type 0

    2、显式扩展

      ① -m state  --state  指定状态  

--state NEW, ESTABLISHED, RELATED, INVALID

                  NEW :新建的规则匹配

                  ESTABLISHED  : 确认的规则匹配

# iptables -I INPUT 1 -s 172.16.0.0/16 -d 172.16.20.1 -p tcp --dport 22
-m state --state NEW,ESTABLISHED -j ACCEPT

                 

                  RELATED  :  相关的规则匹配

                  INVALID  :  无效的规则匹配

      ② -m multiport      多端口匹配,可以指定15个以内的离散端口

            --source-ports

            --destination-ports

            --ports

      ③-m iprange   指定匹配的IP地址范围

            --src-range from[-to]

            --dst-range

      ④ -m limit   指定速率限定

            --limit

            --limit-burst

      ⑤ -m string   指定字符串匹配

            --string "STRING"

            --algo {bm|kmp}

      ⑥ -m time   指定时间范围

            --datestart    --datestop

            --timestart    --timestop

            --weekdays

            --monthdays

      ⑦  -m connlimit   连接数的控制

            -- connlimit-above [num]

      ⑧ 利用iptables的recent模块来抵御DOS攻击: 22端口,建立一个列表,

                   保存有所有访问过指定的服务的客户端IP

          -m recent  

            -- set --name SSH

九、地址转发

nat :network address translation

 1、可以作为源地址的私有IP地址

   c类:192.168.0.0/24, 192.168.254.0/24

   b类:172.16.0.0/16,  172.31.0.0/16

   a类 : 10.0.0.0/8

2、SNAT:源地址转发

   代理内部客户端访问外部网络,在iptables的POSTROUTING上

      -j SNAT --to-soure  IP

      -j  MASQUERADE

3、DANT :目标地址转发

   将内部服务器发布至外部网络,在iptables的PREROUTING上

     -j DNAT --to-destination  IP:port

十、iptables 实例解析

    INPUT和OUTPUT默认策略为DROP;  

1、限制本地主机的web服务器在周一不允许访问;新请求的速率不能超过100个每秒;web服务器包含了admin字符串的页面不允许访问;web服务器仅允许响应报文离开本机;

# iptables -I INPUT 1 -m state --state ESTABLISHED -j ACCEPT
# iptables -A INPUT -d 172.16.20.1 -p tcp --dport 80 -m time --weekdays Tue,Wed,Thu,Fri,Sat,Sun -m limit --limit 100/sec -m string --algo kmp ! --string "admim" -m state --state NEW -j ACCEPT
# iptables -I OUTPUT 1 -m state --state ESTABLISHED -j ACCEPT

2、在工作时间,即周一到周五的8:30-18:00,开放本机的ftp服务给172.16.0.0网络中的主机访问;数据下载请求的次数每分钟不得超过5个;

# iptables -A INPUT -s 172.16.0.0/16 -d 172.16.20.1 -p tcp --dport 21 -m time --weekdays Mon,Tue,Wed,Thu,Fri --timestart 08:30:00 --timestop 18:00:00 -j ACCEPT
# iptables -A INPUT -s 172.16.0.0/16 -d 172.16.20.1 -p tcp -m state --state RELATED -m limit --limit 5/min -j ACCEPT

3、开放本机的ssh服务给172.16.x.1-172.16.x.100中的主机,x为你的座位号,新请求建立的速率一分钟不得超过2个;仅允许响应报文通过其服务端口离开本机;

# iptables -A INPUT -m iprange --src-range 172.16.20.1-172.16.20.100 -m limit --limit 2/min -p tcp --dport 22 -d 172.16.100.1 -i eth0 -m state --state NEW -j ACCEPT

4、拒绝TCP标志位全部为1及全部为0的报文访问本机;

# iptables -N clean_in
# iptables -A clean_in -p tcp --tcp-flags ALL ALL -j DROP
# iptables -A clean_in -p tcp --tcp-flags ALL NONE -j DROP
# iptables -A clean_in -d 172.16.20.1 -j RETURN
# iptables -I INPUT 1 -d 172.16.20.1 -j clean_in

5、允许本机ping别的主机;但不开放别的主机ping本机;

# iptables -A OUTPUT -s 172.16.20.1 -p icmp --icmp-type 8 -j ACCEPT
# iptables -A INPUT -i lo -j ACCEPT
# iptables -A OUTPUT -o lo -j ACCEPT



本文出自 “丿Sky 灬ONE PEICE” 博客,转载请与作者联系!

你可能感兴趣的:(iptable,防火墙的原理及其应用详解)