Iptables-(1)概念

Iptables简介

Iptables是工作在Linux系统中的一个网络防火墙,在内核早期从freeBSD中移植而来的。其前身在Kernel2.0之前称为ipfirewall,在Kernel2.2中叫做ipchain,自Kernel2.4之后叫做iptables并延用至今。
Iptables并不是一个完整意义上的防火墙,而是防火墙系统中的一个管理工具,是用户配置的命令行接口,真正实现包过滤功能的是工作在内核中的netfilter模块。只是我们习惯上将Iptables代指netfilter+Iptables防火墙。
netfilter工作在内核空间中,是Linux系统的内核模块(包括一些拓展模块)而不是一个系统服务,当我们启动或停止iptables服务时实际上是通过加载/卸载相应内核模块实现的。而Iptables则是一个防火墙规则生成工具,能够将用户编辑的过滤规则通过特定的系统调用使其在netfilter上生效。

数据包流向

Iptables防火墙系统是针对OSI中2、3、4层数据包的头部进行分析匹配,能够分析IP和TCP/UDP等协议头部进行解析,通过模块也可以实现对MAC层头部进行分析。
根据数据包在操作系统和网络中的传递过程,数据包最可能的三种流向(见下图):

数据包流向
图 1.

  1. 网络中数据包通过网络设备进入操作系统,经过TCP/IP协议栈的路由选择,最终确定目标是本机,之后数据包从内核空间传递到用户空间中的某应用。
  2. 本机的应用程序发起网络连接产生的数据包被送到内核空间,经过TCP/IP协议栈的路由选择,之后数据包被转发到对应的网络设备。
  3. 网络中数据包通过网络设备进入操作系统,经过TCP/IP协议栈的路由选择,发现需要由本机转发,之后数据包被转发到对应的出口网络设备。
    注意:3中描述的流向需要操作系统打开转发功能:/proc/sys/net/ipv4/ip_forward=1

规则链”chain”和表”tables”

图1表明了数据包在系统中的流向共三个方向,而netfilter则是在图中A,B,C,D,E五个位置进行数据包的匹配。而这当中的每一个位置可以指定多条规则,这些规则按顺序排列就组成了5条不同的规则链,netfilter就是对经过此处的数据包根据规则链进行顺序匹配。
五条规则链如下:

  • A:INPUT链,从网络发往本机的数据包
  • B:OUTPUT链,从本机的某个应用发出的数据包
  • C:FORWARD链,不进入本机而是经过本机转发的数据包,需要ip_forward为1
  • D:PREROUTING链,接收到的数据包在经过路由决策前的位置
  • E:POSTROUTING链,数据包经过路由决策后即将从本机发出的位置

实际上,每一条规则链放置的位置在内核中都有一个对应的HOOK函数,netfilter利用这些函数进行数据包的匹配操作,后面即将介绍的自定义规则链只能插入到这五条主链中才能生效就是因为我们无法定义一个HOOK函数。
我们之前一直在说数据包匹配操作而不是数据包过滤,是因为Iptables防火墙系统除了能进行过滤之外,还能够修改包头部信息实现额外的功能。所以一条规则链上的规则可能作用各不相同,不能一概而论的从头匹配,而是有先后轻重之分。Iptables防火墙系统中为不同的功能创建了一张表格,表中可以包含一条或多条可以实现该功能的链。因此一条链的规则中根据不同的功能被细分到某一张表中的该链上。哈哈哈,能看懂这段的理解力都是Max……
系统中的表和其包含的链如下:

  • Filter表:过滤表,实现数据包的过滤功能,使用频率最高也是iptables命令默认操作的表。
    • INPUT:过滤进入本机的数据包
    • OUTPUT:过滤从本机发出的数据包(可能是响应给对方的数据包)
    • FORWARD:不进入本机但是经过本机转发的数据包
  • NAT表:地址转换,这张表主要用于源、目的IP或端口的改写
    • PREROUTING:在路由决策之前进行的改写(DNAT/REDIRECT)
    • POSTROUTING:在路由决策之后,即将发出之前进行改写(SNAT/MASQUERADE)
    • OUTPUT:与发送出去的数据包有关
  • Mangle表:破坏表,这张表用于有特殊需求的数据包路由标志位改写
    • PREROUTING
    • INPUT
    • OUTPUT
    • FORWARD
    • POSTROUTING
  • Raw表:防追踪表,该表优先级最高能够使指定的报文跳过后续表匹配和防止ip_conntrack追踪;仅用于一些高性能服务器上提高特定数据包收发效率
    • PREROUTING:接收到的数据包进行跟踪前处理
    • OUT:发出的数据包进行跟踪前处理
Tips:RedHat发行版本RHEL7.3之后的版本似乎对规则链进行了拓展,有待研究。

表和链作用的优先级:
数据包经过表和链的顺序
图2. *图中特殊的Raw表匹配到的数据包将跳过后续表规则的匹配

每条链都有默认的处理规则,链中的规则可以理解为默认规则的一个特例。如INPUT链的默认规则是DROP,则链中的规则可以配置为允许符合条件的数据包放行。此外每条链都有两个内置技术器,分别记录规则匹配到的数据包格式和字节数,可以通过-v参数参看计数器。
查看表中的规则命令:

iptables -t [TABLE] -L [OPTs]
  • -n:Iptbales默认会对规则中出现的主机地址和服务端口进行解析,该参数会显示原始IP地址和端口号
  • -v -vv -vvv:显示详细信息,v个数越多显示信息越详细
  • -x:显示数据包的精确大小,不做单位换算
  • –line-numbers:显示规则序号,在插入和删除规则时非常有用

规则保存

因为netfilter工作在内核空间中,所以用户设置的规则是立即生效的,而在服务重启后规则会丢失;所以如果要保存已有的规则,需要在服务重启前手动保存。
Iptables的规则默认保存在 /etc/sysconfig/iptables 文件中:

# Generated by iptables-save v1.4.21 on Mon Jul  3 20:09:43 2017
*mangle
:PREROUTING ACCEPT [2496:201251]
:INPUT ACCEPT [2389:180866]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [2125:214155]
:POSTROUTING ACCEPT [2241:236339]
-A POSTROUTING -o virbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
COMMIT
# Completed on Mon Jul  3 20:09:43 2017
# Generated by iptables-save v1.4.21 on Mon Jul  3 20:09:43 2017
*nat
:PREROUTING ACCEPT [11:1852]
:INPUT ACCEPT [11:1852]
:OUTPUT ACCEPT [86:6514]
:POSTROUTING ACCEPT [86:6514]
-A POSTROUTING -s 192.168.122.0/24 -d 224.0.0.0/24 -j RETURN
......
COMMIT
# Completed on Mon Jul  3 20:09:43 2017
# Generated by iptables-save v1.4.21 on Mon Jul  3 20:09:43 2017
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [73:9668]
-A INPUT -i virbr0 -p udp -m udp --dport 53 -j ACCEPT
......
COMMIT
# Completed on Mon Jul  3 20:09:43 2017

可以手动编辑该文件实现规则修改,文件内容中:*指出某一张表;:指出该表中的某条规则链以及默认策略;具体规则与执行iptables时的语法相似(省略了iptables命令而已),具体的命令语法将在后续文章介绍。
也可以通过修改Iptables的配置文件来实现规则的自动保存,配置文件/etc/sysconfig/iptables-config中:

  • IPTABLES_SAVE_ON_STOP
  • IPTABLES_SAVE_ONRESTART

由于该配置文件较为简单并且文件中的说明详细,不深入介绍。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值