当前位置 : 主页 > 操作系统 > centos >

Iptables学习笔记

来源:互联网 收集:自由互联 发布时间:2022-06-20
前言:公司网关为一台linux服务器,文中均为实例! 一、概述 1、Linux的防火墙体系工作在网络层,针对TCP/IP数据包实施过滤和限制,属于典型的包过滤防火墙。 2、种类:netfilter和ipt

前言:公司网关为一台linux服务器,文中均为实例!

一、概述

1、Linux的防火墙体系工作在网络层,针对TCP/IP数据包实施过滤和限制,属于典型的包过滤防火墙。
2、种类:netfilter和iptables通常都可以用来指Linux防火墙,但二者区别如下:

  • Netfilter:指的是Linux内核中实现包过滤防火墙的内部结构,不以程序或文件的形式存在,属于“内核态”的防火墙功能体系,使用较少。 
  • Iptables:指的是管理Linux防火墙的命令工具,程序通常位于/sbin/iptables,由用户直接使用,属于“用户态”的防火墙功能体系,通常使用的就是这个。 

  • 3、规则表(见图1.1)

  • Filter表:包含三个规则链:INPUT、FORWARD、OUTPUT 
  • Filter表主要用于对数据包进行过滤,根据具体的规则决定是否放行该数据包。 
  • Filter表对应的内核模块为iptable_filter。 
  • Nat表:包含三个规则链:PREROUTING、POSRTOUING、OUTPUT 
  • Nat表主要用于修改数据包的IP地址,端口号等信息。 
  • Nat表对应的内核模块为iptable_nat 
  • Mangle表:包含五个规则链:、PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD 
  • Mangle表主要用于修改数据包的TOS、TTL、以及为数据包设置Mark标记,以实现Qos调整及策略路由等应用。 
  • Mangle表对应的内核模块为iptable_mangle 
  • Raw表:包含两条规则链:OUTPUT、PREROUTING 
  • Raw表是iptables新增加的表,主要用于决定数据包是否被状态跟踪机制处理。 
  • Raw表对应的内核模块为iptable_raw 
  • 4、规则链

  • INPUT链:当接收到访问防火墙本机地址的数据包(入站)时,应用此链中的规则。 
  • OUTPUT链:当防火墙向外发送数据包(出站)时,应用此链中的规则。 
  • FORWARD链:当接受到需要通过防火墙发送给其他地址的数据包(转发)时,应用此链接中的规则。 
  • PREROUTING链:在对数据包作路由现在之前,应用此链中的规则。 
  • POSTROUTING链:在对数据包作路由选择之后,应用此链中的规则。 
  • 注:其中INPUT、OUTPUT链更多应用在访问本机的进出数据的安全控制中,而FORWARD、PREROUTING、POSTROUING更多应用在当使用linux做网关的时候。 
  •  

    Iptables学习笔记_数据包

    二、工作原理
    首先我们需要了解当使用iptables作网关时,数据包的主要途径。
    Iptables的大体结构如下图1.2所示,这个图是数据包流经iptables的路径图。

  • 假如数据包A流经这个网关,首先进入PREROUTING链,顺序匹配这里的规则(包括默认规则);
  • 从这里开始需要分支: 
  • 如果这个数据包A是发给LOCALHOST本机的(也就是网关本身),那么数据包A的下一站是INPUT链,
  • 同样顺序匹配这里的规则(包括默认规则),然后进去LOCALHOST本地进程进行处理这个数据包A;
  • 处理完成后需要回应数据包A,LOCALHOST发出的数据包B第一站是OUTPUT,然后进入POSTROUTING,
  • 从而离开网关服务器。 
  • 如果这个数据包A不是发给LOC ALHOST,那么数据包A的下一站是FORWARD,顺序匹配这里的规则;
  • 然后数据包A的下一站是POSTROUTING,从而数据包A离开网关服务器; 
  • 在这个过程中,数据包A每次经过一个链,都会顺序匹配这个链的规则,所以数据在每一个链中都有可能被丢掉。 
  •  

    Iptables学习笔记_Linux_02

    三、管理设置iptables
    1、基本语法

  • Iptables  [-t 表命]  命令选项  [链名]  [匹配条件]  [-j 动作] 
  • 表名、链名用于指定iptables命令所操作的表和链,没有指定的话,默认使用filter表; 
  • 命令选项用于指定管理iptables规则的方式,比如插入,删除,增加,查看; 
  • 条件匹配用于指定对符合什么样条件的数据包进行处理; 
  • 动作指的就是对数据包的动作,如转发、丢弃、拒绝。 

  • 2、命令选项

  • -A  在指定链的末尾添加一条新的规则 
  • -D  删除指定链中的某一条规则,按规则序号或内容确定要删除的规则 
  • -I   在指定链中插入一条新的规则,若未指定插入位置,则默认在链的开头插入 
  • -R  修改、替换指定链中的某一条规则,按规则序号或内容确定要替换的规则 
  • -L  列出指定链中所有的规则进行查看,未指定链名,则列出表中所有的链 
  • -F  清空指定链中的的所有规则,未指定链名,则清空表中所有链的规则 
  • -N  新建一条用户自己定义的规则链 
  • -X  删除指定表中用户自定义的规则链 
  • -P  设置指定链的默认策略 
  • -n  使用数字形式显示输出结果 
  • -v  查看规则烈表示显示详细的信息 
  • -V  查看iptables命令工具的版本信息 
  • -h  查看命令帮助信息 
  •  

    四、网关实例
    1、如下图1.3,client-a的ip地址为192.168.150.10/24,网关为192.168.150.254和client-b址为 192.168.150.254/24,网关gw的第二块网卡eth1的ip地址为192.168.20.254/24, client-a需要通过网关gw访问client-b,做法如下:

     

    Iptables学习笔记_的_03

    打开linux系统的路由转发开关

  • [root@extmail ~]# cat /proc/sys/net/ipv4/ip_forward  
  • [root@extmail ~]# echo 1 > /proc/sys/net/ipv4/ip_forward  
  • [root@extmail ~]# cat /proc/sys/net/ipv4/ip_forward  
  • [root@extmail ~]#sysctl  -p 
  • 我们在client-a上测试一下,如下图1.4所示,

    Iptables学习笔记_的_04

     

    然后我们在client-b上进行抓包看看,如下图1.5

    Iptables学习笔记_数据包_05

     

    通过ping和抓包证明,只要在网关上开启路由转发之后,两个不同网段就可以相互通信了。

    2、当linux作为网关的时候,nat也是较常用到的,实例如下:
    现在公司网络大部分都是通过nat上网的,所谓nat,简单来讲就是将私网地址转换成公网地址,从而使用户能够访问Internet,大大节省了公网IP。
    测试:环境如图1.3相同,我们把client-a所有出去的包的源地址都转换成网关的外网地址,也就是192.168.20.254,在网关上执行如下命令:

  • [root@extmail ~]# iptables -t nat -A POSTROUTING -s 192.168.150.0/24 -j SNAT --to \192.168.20.254 
  • 查看下Iptables的状态如图1.6

    Iptables学习笔记_的_06

    Iptables 网关上设置之后,我们在用client-a  ping  client-b ,网络依旧是畅通的图1.7

    Iptables学习笔记_用户_07

    并且我们在client-b上抓包,如图1.8

    Iptables学习笔记_的_08

    尽管client-a192.168.150.10)一直在ping  client-b ,但是我们在client-b上并没有抓到任何client-a的数据包。我们抓下client-bicmp的数据包如图1.9

    Iptables学习笔记_用户_09

    我们看到所有的ping的数据包都是来自192.168.20.254了,这就是nat,准确的说是snat,实现了对源地址的转换,对外只是一个IP,既保护了内网,又节约了IP


    五、结论
    使用Linux结合Iptables作为网关时,实际上就相当于一台单臂路由器,把各个网络节点打通,在根据不同的需求写入不同的策略,既方便又安全。

     

    上一篇:深入浅出linux三剑客之awk必杀技一例
    下一篇:没有了
    网友评论