首页 > 代码库 > iptables

iptables

table height=2188 style="border-collapse:collapse;width:803.25pt;">

 

 

防火墙就是透过订定一些有顺序的规则,并管制进入到我们网域内的主机 (或者可以说是网域) 数据封包的一种机制!防火墙又可以分为硬件防火墙与本机的软件防火墙。硬件防火墙是由厂商设计好的主机硬件, 这部硬件防火墙内的操作系统主要以提供封包数据的过滤机制为主,并将其他不必要的功能拿掉。因为单纯作为防火墙功能而已, 软件防火墙本身就是在保护系统网络安全的一套软件(或称为机制)所谓的封包过滤,亦即是分析进入主机的网络封包,将封包的表头数据捉出来进行分析,以决定该联机为放行或抵挡的机制。 由于这种方式可以直接分析封包表头数据,所以包括硬件地址(MAC), 软件地址 (IP), TCP, UDP, ICMP 等封包的信息都可以进行过滤分析的功能。

规则的功能分为以下4种:

    filter: 过滤功能,定义是否允许通过防火墙,INPUT,OUTPUT,FORWARD都需要用到过滤的功能

    nat: 地址转换,启用connection_track模块;PREROUTING,POSTROUTINIG,FORWARD都需要用到转换的功能

    mangle: 用于对数据包相关字段的修改;PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING都可以用到

    raw: 目标是关闭nat表上启用的连接追踪功能;PREROUTING, OUTPUT都需要用到此功能

wpsF559.tmp

 

 

匹配条件

通用匹配

 

 

20140825074040665

 

-s地址

指定报文源IP地址匹配的范围;可以是IP,也可以是网络地址;可使用!取反;--src, --source

-d地址

指定报文目标IP地址匹配的范围;  --dst, --destination

-p协议

指定匹配报文的协议类型,一般有三种tcp, udp和icmp以及all

-iINTERFACE

数据报文流入的接口;PREROUTING, INPUT, FORWARD 例如:eth0 ,lo 等需要与INPUT链配合

-oINTERFACE

据报文流出的接口;OUTPUT, FORWARD, POSTROUITING  需要于OUTPUT配合

-n

不进行 IP 与 HOSTNAME 的反查,显示讯息的速度会快很多!

-j

目标,后边接操作,主要操作有:接受(ACCEPT),丢弃(DROP),拒绝(REJECT),记录(LOG)。。。

ACCEPT

接受

DROP

丢弃

REJECT

拒绝

LOG

如果要记录日志,需要写在其他策略前面

SNAT

修改数据包报头来源,接受返回的数据在路由前就需要转换报头,否则会送往转换主机的内部去

DNAT

修改数据包报头的目标项目:主要是架设服务器使用,当访问给出的外部公网地址时,可以转换为内部的服务器地址。相当于SNAT的反传送。

PANT

MASQERADE

主要用于ADSL拨号上网,可以自动寻找公网IP。代理。

RETURN

目标,在自定义链中无法匹配报文时,将其返回

扩展匹配

调用nstfilter额外模块实现特殊检查机制,必须使用-m选项来指定调用那个模块

显式匹配

显式扩展:必须明确说明使用哪个模块进行扩展,需要-m指定那个模块,而后才能使用其扩展专用选项;

-m

multiport

多端口匹配

专用选项

--source-ports, --sports port[,port,port:port]

--destination-ports, --dports

--ports

示例

# iptables -I INPUT -d 172.16.100.7 -p tcp -m multiport --dports 22,80 -j ACCEPT

# iptables -I OUTPUT -s 172.16.100.7 -p tcp -m multiport --sports 22,80 -j ACCEPT

iprange

匹配指定范围内的地址,匹配一段连续的地址而非整个网络时有用

专用选项

[!] --src-ragne IP[-IP]

[!] --dst-range

示例

# iptables -A INPUT -d 172.16.100.7 -p tcp --dport 23 -m iprange --src-range 172.16.100.1-172.16.100.100 -j ACCEPT

# iptables -A OUTPUT -s 172.16.100.7 -p tcp --sport 23 -m iprange --dst-range 172.16.100.1-172.16.100.100 -j ACCEPT

string

字符串匹配,能够检测报文应用层中的字符串 算法:kmp  bm

专用选项

  --algo {kmp|bm}

  --string "STRING"

--hex-string  "HEX_STRING" :HEX_STRING为编码成16进制格式的字串

示例

# iptables -I OUTPUT -m string --algo kmp --string "sex" -j DROP

time

基于时间做访问控制

专用选项

--datestart YYYY[-MM][-DD[Thh[:mm[:ss]]]]

--datestop

--timestart hh:mm[:ss]

--timestop hh:mm[:ss]

--weekdays day[,day]

示例

# iptables -I INPUT -d 172.16.100.7 -p tcp --dport 80 -m time --timestart 08:20 --timestop 18:40 --weekdays Mon,Tue,Thu,Fri -j REJECT

connlimit

连接数限制,对每IP所能够发起并发连接数做限制

专用选项

[!]--connlimit-above N        小于N的连接数允许,大于拒绝

示例

   #iptables -A INPUT -d 172.16.100.7 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j DROP

limit

速率限制

专用选项

--limit n[/second|/minute|/hour|/day]

--limit-burst n   一次多放几个

示例

# iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 8 -m limit --limit 20/minute --limit-burst 5 -j ACCEPT

state

状态检查

专用选项

--state

状态类型

NEW:新建立一个会话

ESTABLISHED:已建立的连接

RELATED:有关联关系的连接  (ftb)

INVALID:无法识别的连接

/proc/sys/net/nf_conntrack_max:调整连接追踪功能所能容纳的连接的最大数目

/proc/net/nf_conntrack:当前追踪的所有连接

/proc/sys/net/netfilter/*:不同协议或连接类型追踪时的属性

示例

#iptables -A INPUT -d 172.16.100.7 -p tcp -m state RELATED -j ACCEPT

#iptables -R OUTPUT 1 -s 172.16.100.7  -m state ESRABLISHED,RELATED -j ACCEPT

mac

网卡硬件地址

专用选项

--mac-source 来源诸暨的MAC

示例

   #iptables -A INPUT -m mac

隐式匹配

隐式扩展:当使用-p {tcp|udp|icmp}中的一种时,需要-m指定那个模块,也可以直接使用扩展专用选项;

-p

-p [-m] tcp:

-p tcp == [-m tcp]

选项

--sport PORT[-PORT]: 指定源端口,端口可以是连续的范围port-port

--dport PORT[-PORT]: 指定目标端口,端口可以是连续的范围port-p

--tcp-flags 要检查的标志位列表(逗号分隔),必须为1的标志位列表(逗号分隔)

示例

例如:--tcp-flags syn,ack,rst,syn

-p [-m] udp:

-p udp == [-m udp]

选项

--sport PORT[-PORT]: 指定源端口,端口可以是连续的范围port-port

--dport PORT[-PORT]: 指定目标端口,端口可以是连续的范围port-port

-p [-m] icmp:

--icmp-type:后边必须要接ICMP的数据包类型,也可以使用代号。

选项

0: echo-reply, ping响应

8: echo-request, ping请求

-p all

三种协议

TABLE

默认是filter

filter

过滤功能,定义是否允许通过防火墙

nat

地址转换,需要启用connection_track模块

mangle

用于对数据包相关字段的修改

raw

目标是关闭nat表上启用的连接追踪功能

INPUT

进入本机路由后

OUTPUT

本机出来路由前

PREROUTING

进入本机路由前

POSTROUTING

出去

FORWARD

转发

链规则

-A

新增一条规则,该规则增加在原规则后边,

-I

:插入一条新规则,如果没有指定规则顺序,则此规则变成第一条规则,其他规则依次为2-N

-D

删除规则

-R

替换规则

-L

查询,list

-n:以数字格式显示主机地址和端口

-v:详细格式,vv,vvv

--line-numbers:显示规则编号

-x:exactly,不要对计数器的计数结果做单位换算,而显示其精确值。

注意:千万不要iptables -t net  -L -n  查看net 会启动链接追踪功能,

-N

new 自定义一个链,只可被调用 iptables [-t table] -N chain

-X

delete,删除自定义空链 iptables [-t table] -N chain

-E

重命名自定义链。iptables [-t table] -E old_name  new_name

-Z

zero,计数器归零。

-P

policy,设置默认策略,对filter表来讲,默认规则为ACCEPT或DROP;

通用匹配

-s 地址

指定报文源IP地址匹配的范围;可以是IP,也可以是网络地址;可使用!取反;--src, --source

-d 地址

指定报文目标IP地址匹配的范围;  --dst, --destination

-p 协议

指定匹配报文的协议类型,一般有三种tcp, udp和icmp以及all

-i  INTERFACE

数据报文流入的接口;PREROUTING, INPUT, FORWARD 例如:eth0 ,lo 等需要与INPUT链配合

-o INTERFACE

数据报文流出的接口;OUTPUT, FORWARD, POSTROUITING  需要于OUTPUT配合

-n

不进行 IP 与 HOSTNAME 的反查,显示讯息的速度会快很多!

-j

目标,后边接操作,主要操作有:接受(ACCEPT),丢弃(DROP),拒绝(REJECT),记录(LOG)。。。

ACCEPT

接受

DROP

丢弃

REJECT

拒绝

LOG

如果要记录日志,需要写在其他策略前边

SNAT

修改数据包报头来源,接受返回的数据在路由前就需要转换报头,否则会送往转换主机的内部去。

DNAT

修改数据包报头的目标项目:主要是架设服务器使用,当访问给出的外部公网地址时,可以转换为内部的服务器地址。相当于SNAT的反传送。

PNAT

MASQERADE

主要用于ADSL拨号上网,可以自动寻找公网IP。代理。

RETURN

目标,在自定义链中无法匹配报文时,将其返回

匹配条件

通用匹配

-s地址
指定报文源IP地址匹配的范围;可以是IP,也可以是网络地址;可使用!取反;--src, --source

-d地址
指定报文目标IP地址匹配的范围; --dst, --destination

-p协议
指定匹配报文的协议类型,一般有三种tcp, udp和icmp以及all

-iINTERFACE
数据报文流入的接口;PREROUTING, INPUT, FORWARD 例如:eth0 ,lo 等需要与INPUT链配合

-oINTERFACE
据报文流出的接口;OUTPUT, FORWARD, POSTROUITING 需要于OUTPUT配合

-n
不进行 IP 与 HOSTNAME 的反查,显示讯息的速度会快很多!

-j
目标,后边接操作,主要操作有:接受(ACCEPT),丢弃(DROP),拒绝(REJECT),记录(LOG)。。。

ACCEPT
接受

DROP
丢弃

REJECT
拒绝

LOG
如果要记录日志,需要写在其他策略前面

SNAT
修改数据包报头来源,接受返回的数据在路由前就需要转换报头,否则会送往转换主机的内部去

DNAT
修改数据包报头的目标项目:主要是架设服务器使用,当访问给出的外部公网地址时,可以转换为内部的服务器地址。相当于SNAT的反传送。

PANT

MASQERADE
主要用于ADSL拨号上网,可以自动寻找公网IP。代理。

RETURN
目标,在自定义链中无法匹配报文时,将其返回

扩展匹配
调用nstfilter额外模块实现特殊检查机制,必须使用-m选项来指定调用那个模块

显式匹配
显式扩展:必须明确说明使用哪个模块进行扩展,需要-m指定那个模块,而后才能使用其扩展专用选项;

-m
multiport
多端口匹配

专用选项
--source-ports, --sports port[,port,port:port]

--destination-ports, --dports

--ports

示例
# iptables -I INPUT -d 172.16.100.7 -p tcp -m multiport --dports 22,80 -j ACCEPT

# iptables -I OUTPUT -s 172.16.100.7 -p tcp -m multiport --sports 22,80 -j ACCEPT

iprange
匹配指定范围内的地址,匹配一段连续的地址而非整个网络时有用

专用选项
[!] --src-ragne IP[-IP]

[!] --dst-range

示例
# iptables -A INPUT -d 172.16.100.7 -p tcp --dport 23 -m iprange --src-range 172.16.100.1-172.16.100.100 -j ACCEPT

# iptables -A OUTPUT -s 172.16.100.7 -p tcp --sport 23 -m iprange --dst-range 172.16.100.1-172.16.100.100 -j ACCEPT

string
字符串匹配,能够检测报文应用层中的字符串 算法:kmp bm

专用选项
--algo {kmp|bm}

--string "STRING"

--hex-string "HEX_STRING" :HEX_STRING为编码成16进制格式的字串

示例
# iptables -I OUTPUT -m string --algo kmp --string "sex" -j DROP

time
基于时间做访问控制

专用选项
--datestart YYYY[-MM][-DD[Thh[:mm[:ss]]]]

--datestop

--timestart hh:mm[:ss]

--timestop hh:mm[:ss]

--weekdays day[,day]

示例
# iptables -I INPUT -d 172.16.100.7 -p tcp --dport 80 -m time --timestart 08:20 --timestop 18:40 --weekdays Mon,Tue,Thu,Fri -j REJECT

connlimit
连接数限制,对每IP所能够发起并发连接数做限制

专用选项
[!]--connlimit-above N 小于N的连接数允许,大于拒绝

示例
#iptables -A INPUT -d 172.16.100.7 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j DROP

limit
速率限制

专用选项
--limit n[/second|/minute|/hour|/day]

--limit-burst n 一次多放几个

示例
# iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 8 -m limit --limit 20/minute --limit-burst 5 -j ACCEPT

state
状态检查

专用选项
--state

状态类型
NEW:新建立一个会话

ESTABLISHED:已建立的连接

RELATED:有关联关系的连接 (ftb)

INVALID:无法识别的连接

/proc/sys/net/nf_conntrack_max:调整连接追踪功能所能容纳的连接的最大数目

/proc/net/nf_conntrack:当前追踪的所有连接

/proc/sys/net/netfilter/*:不同协议或连接类型追踪时的属性

示例
#iptables -A INPUT -d 172.16.100.7 -p tcp -m state RELATED -j ACCEPT

#iptables -R OUTPUT 1 -s 172.16.100.7 -m state ESRABLISHED,RELATED -j ACCEPT

mac
网卡硬件地址

专用选项
--mac-source 来源诸暨的MAC

示例
#iptables -A INPUT -m mac

隐式匹配
隐式扩展:当使用-p {tcp|udp|icmp}中的一种时,需要-m指定那个模块,也可以直接使用扩展专用选项;

-p
-p [-m] tcp:
-p tcp == [-m tcp]

选项
--sport PORT[-PORT]: 指定源端口,端口可以是连续的范围port-port

--dport PORT[-PORT]: 指定目标端口,端口可以是连续的范围port-p

--tcp-flags 要检查的标志位列表(逗号分隔),必须为1的标志位列表(逗号分隔)

示例
例如:--tcp-flags syn,ack,rst,syn

-p [-m] udp:
-p udp == [-m udp]

选项
--sport PORT[-PORT]: 指定源端口,端口可以是连续的范围port-port

--dport PORT[-PORT]: 指定目标端口,端口可以是连续的范围port-port

-p [-m] icmp:
--icmp-type:后边必须要接ICMP的数据包类型,也可以使用代号。

选项
0: echo-reply, ping响应

8: echo-request, ping请求

-p all
三种协议

iptables