iptables介绍


1  iptables介绍

iptables的文章很多,作者的写法也都不一样,下面的内容从好几篇文章总结而来

1.1  用途

iptables是Linux下的防火墙软件,用于实现Linux下的网络访问控制,即针对网络包(packet)进行检测、转发、丢弃、修改、流控等控制。

 

1.2  工作层次

主要在L2、L3、L4层。

 

1.3  工作空间

规则配置在用户空间(由/sbin/iptables配置,iptables规则信息在/etc/sysconfig/iptables)

规则执行在内核空间(由内核模块netfilter执行)

 

1.4  iptables的主要功能

包过滤(packet filtering)

连接跟踪(connection track)

网络地址转换(NAT)

重整包头(Mangling packet header fields)

 

2 iptables的工作模型

2.1  参考资料

iptables的权威资料是“man iptables”。

学习iptables最重要的是理解iptables的工作原理,下文旨在总体上把握iptables的工作模型,然后给出部分典型应用,对具体参数的用法不作过多阐述。实际应用中,用到哪一部分再去仔细阅读权威资料的相关部分,然后去实践调试,即可达到目的。

 

2.2   命令模型

注:该表较宽,切换到WEB版式视图查看。

 

命令

控制点

匹配条件

执行动作

 

表(控制类型)

链(控制点)

规则号

通用匹配

扩展匹配

     
               

--sport P1[-P2]

     
   

-L

[chain] -n -x

     

tcp

--dport P1[-P2]

     
   

-S

[chain] -v

       

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

 

REDIRECT

 
   

-F

[chain]

       

--syn

 

RETURN

 
   

-Z

[chain][n]]

     

udp

--sport P1[-P2]

 

MARK

 
   

-P

chain target

 

-S IP/net

   

--dport P1[-P2]

 

LOG

--log-prefix

 

[-t filter]

-A

INPUT

 

-d IP/net

 

icmp

--icmp-type {8|0}

 

ACCEPT

 

iptables

-t nat

-I

OUTPUT

rulenum

-p {tcp|udp|icmp}

-m

multiports

--dports PORT[,PORT,...]

-j

DROP

 
 

-t mangle

-R

FORWARD

 

-i if -o of

   

--ports PORT[,PORT,...]

 

REJECT

 
 

-t raw

-X

PREROUTING

     

iprange

--src-range IP1-IP2

 

自定义链

 
     

POSTROUTING

       

--dst-range IP1-IP2

 

SNAT

--to-source

   

-D

chain rulenum

     

string

--string STR --algo {kmp|bm}

 

DNAT

--to-destination

   

-N

自定义链

       

--hex-string

 

MASQUERADE

--to-port

   

-E

旧名 新名

     

connlimit

--conlimit-above [n]

 

TPROXY

--on-port

             

limit

--limit rate --limit-burst b

     
             

state

--state NEW,ESTABLISHED,RELATED

     

-m :扩展匹配, 扩展匹配的模块见2.5介绍

如: 匹配tcp目的端口123: -p tcp -m tcp --dport 123,  当有通用匹配参数-p {tcp|udp|icmp}时,可不加“-m {tcp|udp|icmp}”,即:-p tcp -m tcp --dport 123 ==> -p tcp --dport 123

理解iptables对包的控制,就要掌握控制的三个要素:

1、在哪里?——控制点,对应table+chain+rule

2、对哪些?——匹配条件,对应match

3、怎么做?——执行动作,对应target

 

2.3  表和链(控制点)

包在表和链中的流转图,如下图所示。

      image.png                                       

 

5种链:PREROUTING、INPUT、OUTPUT、FORWAD、POSTROUTING

4种表:优先级raw > mangle > nat > filter

 

【请求-响应流程】

如本机收到一个HTTP请求,然后发送一个HTTP响应,根据流转图可知流程为:

  raw.PREROUTING -> mangle.PREROUTING -> nat.PREROUTING

-> mangle.INPUT -> filter.INPUT

-> raw.OUTPUT -> mangle.OUTPUT -> nat.OUTPUT -> filter.OUTPUT

-> mangle.POSTROUTING -> nat.POSTROUTING

 

【转发流程】

如本机作为代理/路由器来转发包,根据流转图可知流程为:

  raw.PREROUTING -> mangle.PREROUTING -> nat.PREROUTING

-> mangle.FORWARD -> filter.FORWARD

-> mangle.POSTROUTING -> nat.POSTROUTING

 

【如何理解表和链】

1、“table”、“chain”的命名让人有些费解,理解时可先不管其原本含义。

2、参照上图来理解表和链代表的控制点。

3、链对应包的流转阶段:如PREROUTING指从网卡进入系统的最开始阶段。

4、表对应包的控制/操作类型:

操作

raw

不进行连接跟踪(conntrack),常-j NOTRACK

mangle

修改包头字段

nat

NAT转换

filter

允许或禁止

 

2.4  规则rule与策略 policy(链尾动作)

设定规则时,要指定所在的表和链,如iptables -t nat -A PREROUTING …。

链内可有多条规则,内置链的最后有一个策略,即链尾动作。

image.png

 

【包在链内的匹配流程】:

进入链后从第一条规则开始,依次匹配。

若包与规则不匹配,则与链中下一条规则进行匹配。

若匹配到一条规则就执行该规则的target动作(允许、拒绝、改写包头、NAT等),然后按该动作的“后续操作”(NextRule、NextChain、NextPacket、Return)继续。

如果包与链中的任何规则都不匹配,即到达链尾,则执行该链的策略(链尾动作)。

 

2.5  match(匹配条件)

可分为通用匹配和扩展匹配(隐式和显示),其差异仅体现在指定参数的方式上,在功能本质上是统一的。

匹配类型

说明

参数方式

通用匹配

最常用的匹配条件,仅包括入站网卡、出站网卡、源IP、目的IP、协议等条件

直接给出参数(-s, -d, -i, -o, -p)

扩展匹配

每种匹配方式对应一个模块,以-m来设置

-m <匹配模块> <模块参数>

例:-m tcp --dport 80

隐式扩展匹配

当有通用匹配参数-p {tcp|udp|icmp}时,可不加“-m {tcp|udp|icmp}”,直接给出相关协议的参数,此为隐式匹配,实际上就是扩展匹配的一种省略“-m”的简化写法。

tcp:--sport --dport --tcp-flags

udp:--sport --dport

icmp:--icmp-type

例:-p tcp [-m tcp] --dport 80


SuSE12sp1自带的iptables 1.4.21,共有60种扩展匹配,列举常用的18种如下:

扩展匹配

说明

addrtype

地址类型:本地、广播等

comment

注释

connlimit

连接数

icmp

ICMP协议

length

IP净荷长度

limit

流量(以包个数计)

mac

MAC地址

mark

标志(U32整形数)

multiport

多端口

sctp

SCTP协议

socket

内核socket

state

TCP连接状态(NEW、ESTABLISHED、RELATED、INVALID)

string

字符串

tcp

TCP协议

tcpmss

建链时的TCP最大净荷参数

time

时间

u32

包数据看做是U32数组

udp

UDP协议


iptables -m tcp  --help

可以查看tcp模块 详情, 其他模块 类似

2.6  target(执行动作)

target就是iptables规则匹配之后执行的动作,分三类:

1、内置target(3个:ACCEPT/DROP/RETURN)

2、自定义链target

3、扩展target(40个)

 

target的“后续操作”是指执行完其本身动作后的下一步操作,分为以下4种:

1、【NextRule】匹配本链的下一条规则,若已到达本链末尾,则执行本链Policy。

2、【NextChain】结束本链(不受本链Policy约束),进入下一链。

3、【NextPacket】终止本包处理,继续处理一下个包。

4、【Return】自定义链中的-j RETURN返回调用链,内置链中的-j RETURN执行内置链中的Policy。

 

内置target和常用扩展target如下:

target

本次操作

后续操作

-j ACCEPT(内置)

允许

NextChain

-j RETURN(内置)

 

Return

-j DROP(内置)

丢弃,无回应

NextPacket

-j REJECT

丢弃,给出ICMP回应

NextPacket

-j SNAT

SNAT

NextChain

-j MASQUERADE

源IP修改为网卡IP(SNAT特例)

NextChain

-j DNAT

DNAT

NextChain

-j REDIRECT

重定向到另一个端口(DNAT特例)

NextRule

-j MARK

打标记

NextRule

-j LOG

写日志/var/log/message

NextRule

-j TPROXY

转发到本机端口

NextChain

 

下面的web链接的介绍也很详细

https://www.cnblogs.com/davidwang456/p/3540837.html


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM