当前位置: 澳门新濠3559 > 操作系统 > 正文

Netfilter是内核内建的一个功能,iptables是linux自带

时间:2019-10-13 04:24来源:操作系统
概述 iptables是linux自带的防火墙软件,用于配置IPv4数据包过滤或NAT(IPv6用ip6tables)。 在linux上,防火墙其实是系统内核的一部分,基于Netfilter构架,基本原理就是在内核网络层数据包流

概述

iptables是linux自带的防火墙软件,用于配置IPv4数据包过滤或NAT(IPv6用ip6tables)。

在linux上,防火墙其实是系统内核的一部分,基于Netfilter构架,基本原理就是在内核网络层数据包流经的不同位置放置一些钩子(hook),利用这些嵌入网络层的hook来对数据抓取、控制或修改,iptables其实只是默认的netfilter控制管理工具,所以使用ps或者top看不到有一个“防火墙”的进程存在,防火墙是不能被卸载也不能关闭的,大家熟知的"service iptables stop"或者“/etc/init.d/iptables stop”命令只不过是清空所有策略和表,并把默认策略改为ACCEPT(允许)而已。

iptables有以下几个重点概念::

**table(表):**iptables内置4个table,不同的table代表不同的功能,每个table可以包含许多chain,不同类型的table对所能包含的chain和策略中的target的使用做了限定,一些target不能在一些table中使用。用户不能自定义table;

chain(链):chain可用包括一系列的策略,通过配置不同的chain可以对不同作用的策略进行分类,iptables内置5个chain对应netfilter的5个hook,用户也可以自定义chain;

command(命令):command是对表或链的操作动作,比如添加、删除、修改等等;

rule-specification(策略):包括下面的匹配规则和目标;

match(匹配规则):定义本条策略适用于那些数据包,匹配规则可以包括协议、源/目的地址、端口等等;

target(目标):对匹配上规则的数据包采取的操作,target可以是一个动作或者自定义chain,常见的动作有丢弃(DROP)、允许(ACCEPT)、NAT等等,当target是自定义chain时,数据包进入自定义chain继续匹配;

policy(默认策略)澳门新濠3559,:内置chain的默认动作,每个chain只能有一个policy,如果数据包匹配某条chain匹配完最后一条策略依然没有匹配上,那么就采用policy的默认动作。policy不匹配规则,而且target只能是丢弃(DROP)或允许(ACCEPT),自定义chain不能定义policy。

防火墙的主要类别:

iptables的4个表分别是:

filter(过滤):数据包过滤/拦截,可以包含INPUT、FORWARD、OUTPUT这3个内置chain。

nat(地址转换):IP地址或端口号转换,可以包含PREROUTING、OUTPUT、POSTROUTING 3个内置chain,nat table在会话建立时会记录转换的对应关系,同一会话的回包和后续报文会自动地址转换,这是因为nat使用了ip_conntrack模块。

mangle(包管理):用来修改IP报文,可以包含PREROUTING、OUTPUT、INPUT、FORWARD、POSTROUTING 5个内置chain。

raw:此表的优先级高于ip_conntrack模块和其它的table,主要用于将有会话状态的连接(比如tcp)的数据包排除在会话外。可以包含POSTROUTING、OUTPUT两个内置chain。

看到这里肯定会有这样的疑问,为什么table只能包含一些而不是全部的chain呢?我想这个构架是按需设计而不是按功能设计的,尽管table不是包含所有的chain,但是每种功能的table都包含了实现这种功能所需的chain,即使包含更多的chain也是累赘或者无用的,而且实际上用起来也的确如此,够用了。

还有就是不同table生效优先顺序问题,先后优先级是这样的:

raw > mangle > nat > filter

所以,如果有filter禁止ping目的地址2.2.2.2,而nat又有策略将目的地址1.1.1.1转换成2.2.2.2,那么ping 1.1.1.1是ping不通的。

不过一般情况下filter是不会和nat的策略打起架来,比如INPUT chain能做filter,却不能做nat,PREROUTING能做nat却不能做filter,而且PREROUTING只能做目的地址转换,不会对源地址过滤的需求造成麻烦,所以通常是不会相互干扰的。

  • Netfilter(数据包过滤机制)

iptables内置的5个chain:PREROUTING、INPUT、OUPUT、FORWARD、POSTROUGING,这5个chain分别与netfilter中数据转发路径上的5个不同的位置挂钩,以匹配筛选不同类型的数据流,如下图所示:

澳门新濠3559 1

其中:

PREROUTING链:应用于所有进入机器的ip包,包括目的地址是本机和目的地址非本机的包。

INPUT链:应用于所有目的是本机的包,也就是目的IP是本机接口地址,所有发给本地socket的数据都经过它。

OUPUT链:应用于所有由本机产生的包,所有应用程序发出的数据都经过它。

FORWARD链:应用于所有经过路由决策被转发的包,也就是目的地址不是本机的数据包。

POSTROUGING链:应用于所有发出机器的IP包,包括本机发出的和从本机转发的数据包。

策略匹配按照重上到下的顺序进行,当测试到某策略匹配时执行target并跳出,不再向下匹配,当测试到最后一条策略仍不匹配时,则采用policy指定的动作,如下图:

澳门新濠3559 2

除了内置chain外,还可以自定义chain,自定义chain并不能利用netfilter的hook来捕捉数据包,但是可用于策略的分类,比如有3类不同的用户访问主机上的不同服务,如果所有策略都放在INPUT chain中策略会多而难以维护,这个时候就可以定义3个自定义chain,分别配置不同的策略,同时在INPUT chain中添加策略对来访者分类并将目标指向3个自定义chain。

自定义chain大显神威的地方在于动态生成策略,例如VPN服务器上,需要对不同分组的用户区别对待管理,但是用户IP是随机分配的,不能根据IP来区分用户组,这时候可以预先定义好各组chain,利用VPN服务端软件的一些钩子,当用户登陆时自动添加策略引导到自定义chain上来匹配。如果这时候没有自定义chain,那么策略的数量将是(用户数×所属组策略数),每增加一个用户,都要把所属组的全部策略添加一遍,这样大量的时间花费在策略匹配上,性能下降很快。

Netfilter将数据包的头部提取出来,分析MAC、IP、TCP、UDP、ICMP等信息,按照制定的策略对包进行过滤。
Netfilter是内核内建的一个功能,我们可以通过iptables命令制定过滤策略。

命令

命令用来操作表和链,可以做这些操作:

  • 清空一个table中包含的所有chain
  • 创建、重命名或删除一个自定义chain,清空一个内置chain或者给内置chain设置policy(默认策略)
  • 在某个chain中追加、删除、修改一条策略
  • 显示策略

由于本文只讲概念和原理,所以暂时不提命令,命令的详细使用方法会在“iptables实用教程(二)”里说明。

 

原文地址:

 

如果觉得本文对您有帮助,请扫描后面的二维码给予捐赠,您的支持是作者继续写出更好文章的动力!

澳门新濠3559 3

 

  • TCP Wrapper(程序管理)
    针对服务器程序来管理连接。通过制定规则,分析该服务器谁能连接,谁不能连接。

  • Proxy(代理服务器)


iptables和netfilter

1、基础概念
  • iptables
    工作在用户空间,是一个规则编写工具;编写规则并且发送至netfilter。

  • netfilter
    工作在内核空间,是个网络服务的结构化底层框架。提供一整套的hook函数的管理机制,使得诸如数据包过滤、网络地址转换(NAT)和基于协议类型的连接跟踪成为了可能。netfilter在内核中选取五个位置放了五个hook function(INPUT、OUTPUT、 FORWARD、 PREROUTING、 POSTROUTING),而这五个hook function向用户开放,用户可以通过一个命令工具(iptables)向其写入规则。

澳门新濠3559 4

iptables和netfilter

iptables的四个表

  • filter
    过滤规则表, 根据预定义的规则过滤符合条件的数据包,是默认的table。

  • nat
    地址转换规则表,主要用来进行源地址与目的地址的IP或者端口转换。

  • mangle
    修改数据标记位规则表

  • Raw
    连接跟踪

iptables的五个chain

  • INPUT:与进入本机的数据有关的规则

  • OUTPUT:出去本机的数据有关的规则

  • FORWARD:与数据包转发有关的规则

  • PREROUTING:在路由判断之前要进行的规则

  • POSTROUTING:在路由判断之后要进行的规则

澳门新濠3559 5

iptables表格与链相关性

链和表之间的关系见上图,这么理解吧,链就是五个特定位置的hook function,这些hook function可以通过对应的表去写入规则。

如:
PREROUTING可以用到nat和mangle表
INPUT可以用到filter和mangle表


iptables应用

命令格式:

iptables [-t table] SUBCOMMAND chain [-m matchname [per-match-options]] -j targetname [per-targetoptions]

-t table:指明表类型
SUBCOMMAND:子命令,主要分为查询、链管理、规则管理
chain:指明链
-j:指明要执行的动作

1、查询
iptables [-t tables] [-vn] [-L]

-t:指明查询的表,如果省略则默认显示filter表
-v:列出详细信息
-vv:更详细的信息
-n:不进行IP与hostname的反查,用ip显示
-L:列出当前table的规则
--line-numbers:显示规则号
-x: exactly,显示计数器结果的精确值,而非单位转换后的易读

例子:

[root@CentOS6A ~]#iptables -vnL --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1     1035 89161 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
2        1    84 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
3        0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
4        1    52 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
5      259 27598 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT 931 packets, 76385 bytes)
num   pkts bytes target     prot opt in     out     source               destination     

#INPUT、FORWARD、OUTPUT这3条链,当前只有INPUT的filter表定义了5条规则。
2、链管理
-N: new, 自定义一条新的规则链
-X: delete,删除自定义的空的规则链
-P: Policy,设置默认策略;对filter表中的链而言,其默认策略有:
            ACCEPT:接受
            DROP:丢弃
-E:重命名自定义链;引用计数不为0的自定义链不能够被重命名,也不能被删除
  • 默认策略
    当数据包不在我们设置的规则内,则该数据包的通过与否,以policy的设置为准。
    例:
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT

澳门新濠3559 6

默认策略

3、规则管理

澳门新濠3559 7

规则管理

指明规则在链表的位置 匹配条件 动作

-A: append,追加
-I: insert, 插入,要指明插入至的规则编号,默认为第一条
-D: delete,删除
     (1) 指明规则序号
     (2) 指明规则本身
-R: replace,替换指定链上的指定规则编号
-F: flush,清空指定的规则链
-Z: zero,置零
      iptables的每条规则都有两个计数器
      (1) 匹配到的报文的个数
      (2) 匹配到的所有报文的大小之和

匹配条件

  • 基本匹配条件:
-s, --source address[/mask][,...]:源IP地址或范围
-d, --destination address[/mask][,...]:目标IP地址或范围
-p, --protocol protocol:指定协议,可使用数字如0(all)
        protocol: tcp, udp, icmp, icmpv6, udplite,esp, ah, sctp,mh or “all“ 参看:/etc/protocols
-i, --in-interface name:报文流入的接口;只能应用于数据报文流入环节,只应用于INPUT、 FORWARD、 PREROUTING链
-o, --out-interface name:报文流出的接口;只能应用于数据报文流出的环节,只应用于FORWARD、 OUTPUT、 POSTROUTING链
  • 扩展匹配条件
    需要加载扩展模块(/usr/lib64/xtables/*.so),方可生效

编辑:操作系统 本文来源:Netfilter是内核内建的一个功能,iptables是linux自带

关键词: 澳门新濠3559