Iptables学习笔记

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

一、概述

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

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


3、规则表(见图1.1)

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

4、规则链

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

 

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

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

 

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

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


2、命令选项

 
  
  1. -A  在指定链的末尾添加一条新的规则 
  2. -D  删除指定链中的某一条规则,按规则序号或内容确定要删除的规则 
  3. -I   在指定链中插入一条新的规则,若未指定插入位置,则默认在链的开头插入 
  4. -R  修改、替换指定链中的某一条规则,按规则序号或内容确定要替换的规则 
  5. -L  列出指定链中所有的规则进行查看,未指定链名,则列出表中所有的链 
  6. -F  清空指定链中的的所有规则,未指定链名,则清空表中所有链的规则 
  7. -N  新建一条用户自己定义的规则链 
  8. -X  删除指定表中用户自定义的规则链 
  9. -P  设置指定链的默认策略 
  10. -n  使用数字形式显示输出结果 
  11. -v  查看规则烈表示显示详细的信息 
  12. -V  查看iptables命令工具的版本信息 
  13. -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,做法如下:

 

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

 
  
  1. [root@extmail ~]# cat /proc/sys/net/ipv4/ip_forward  
  2. [root@extmail ~]# echo 1 > /proc/sys/net/ipv4/ip_forward  
  3. [root@extmail ~]# cat /proc/sys/net/ipv4/ip_forward  
  4. [root@extmail ~]#sysctl  -p 

我们在client-a上测试一下,如下图1.4所示,

 

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

 

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

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

 
  
  1. [root@extmail ~]# iptables -t nat -A POSTROUTING -s 192.168.150.0/24 -j SNAT --to \192.168.20.254 

查看下Iptables的状态如图1.6

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

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

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

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


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

 










本文转自 linuxsong 51CTO博客,原文链接:http://blog.51cto.com/song49/950276,如需转载请自行联系原作者
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值