iptables 本机内部通信 iptables --to_iptables 本机内部通信

数据包先经过PREOUTING,由该链确定数据包的走向:

    1、目的地址是本地,则发送到INPUT,让INPUT决定是否接收下来送到用户空间,流程为①--->②;

 ①--->③--->④--->⑥

主机发送数据包时,流程则是⑤--->⑥

iptables安装配置

linux一般默认都已经安装iptables,只需要开启服务即可



service iptables start



iptables规则书写

基本语法:iptables [-t 表] [操作命令] [链][规则匹配器][-j 目标动作]


说明

支持的链

raw

一般是为了不再让iptables对数据包进行跟踪,提高性能

PREROUTING、OUTPUT

mangle

对数据包进行修改

五个链都可以

nat

进行地址转换

PREROUTING、OUTPUT、POSTROUTING

filter(默认)

对包进行过滤

INPUT、FORWARD、OUTPUT

常用操作命令

说明

-A

在指定链尾部添加规则

-D

删除匹配的规则

-R

替换匹配的规则

-I

在指定位置插入规则

例:iptables -I INPUT 1 --dport 80 -j ACCEPT

(将规则插入到filter表INPUT链中的第一位上)

-L/S

列出指定链或所有链的规则

-F

删除指定链或所有链的规则

-N

创建用户自定义链

例:iptables -N allowed

-X

删除指定的用户自定义链

-P

为指定链设置默认规则策略,对自定义链不起作

例:iptables -P OUTPUT DROP

-Z

将指定链或所有链的计数器清零

-E

更改自定义链的名称

例:iptables -E allowed disallowed

-n

ip地址和端口号以数字方式显示

例:iptables -Ln

常见规则匹配器

说明

-p tcp|udp|icmp|all

匹配协议,all会匹配所有协议

-s addr[/mask]

匹配源地址

-d addr[/mask]

匹配目标地址

--sport port1[:port2]

匹配源端口(可指定连续的端口)

--dport port1[:port2]

匹配目的端口(可指定连续的端口)

-o interface

匹配出口网卡,只适用FORWARD、POSTROUTING、OUTPUT。

例:iptables -A FORWARD -o eth0

-i interface

匹配入口网卡,只使用PREROUTING、INPUT、FORWARD。

--icmp-type 

匹配icmp类型(使用iptables -p icmp -h可查看可用的ICMP类型)

--tcp-flags mask comp

匹配TCP标记,mask表示检查范围,comp表示匹配mask中的哪些标记。

例:iptables -A FORWARD -p tcp --tcp-flags ALL SYN,ACK -j ACCEPT

(表示匹配SYN和ACK标记的数据包)

目标动作

说明

ACCEPT

允许数据包通过

DROP

丢弃数据包

REJECT

丢弃数据包,并且将拒绝信息发送给发送方

SNAT

源地址转换(在nat表上)

例:iptables -t nat -A POSTROUTING -d 192.168.0.102 -j SNAT --to 192.168.0.1

DNAT

目标地址转换(在nat表上)

例:iptables -t nat -A PREROUTING -d 202.202.202.2 -j DNAT --to-destination 192.168.0.102

REDIRECT

目标端口转换(在nat表上)

例:iptables -t nat -D PREROUTING -p tcp --dport 8080 -i eth2.2 -j REDIRECT --to 80

MARK

将数据包打上标记

例:iptables -t mangle -A PREROUTING -s 192.168.1.3 -j MARK --set-mark 60

注意要点:

    1、目标地址转换一般在PREROUTING链上操作

    2、源地址转换一般在POSTROUTING链上操作

 

保存和恢复iptables规则

    使用iptables-save可以保存到特定文件中



iptables-save >           /etc/sysconfig/iptables_save



    使用iptables-restore可以恢复规则



iptables-restore<           /etc/sysconfig/iptables_save



iptables的进阶使用

   1、limit限制流量:

        -m limit --limit-burst 15        #设置一开始匹配的最���数据包数量

        -m limit --limit 1000/s            #设置最大平均匹配速率

        -m limit --limit 5/m --limit-burst 15     #表示一开始能匹配的数据包数量为15个,每匹配到一个,   

                                                                    limit-burst的值减1,所以匹配到15个时,该值为0,以后每过   

                                                                    12s,limit-burst的值会加1,表示又能匹配1个数据包

例子:



iptables -A INPUT -i eth0 -m limit --limit 5           /m            --limit-burst 15 -j ACCEPT           
           iptables -A INPUT -i eth0 -j DROP



    注意要点:

        1、--limit-burst的值要比--limit的大

        2、limit本身没有丢弃数据包的功能,因此,需要第二条规则一起才能实现限速的功能

    2、time :在特定时间内匹配

-m time 

说明

--monthdays day1[,day2]

在每个月的特定天匹配

--timestart hh:mm:ss

在每天的指定时间开始匹配

--timestop hh:mm:ss

在每天的指定时间停止匹配

--weekdays day1[,day2]

在每个星期的指定工作日匹配,值可以是1-7

例子:


iptables -A INPUT -i eth0 -m            time            --weekdays 1,2,3,4 -jACCEPT          
           iptables -A INPUT -i eth0 -j DROP



    3、ttl:匹配符合规则的ttl值的数据包

参数

说明

--ttl-eq 100

匹配TTL值为100的数据包

--ttl-gt 100

匹配TTL值大于100的数据包

--ttl-lt 100

匹配TTL值小于100的数据包

例子:



iptables -A OUTPUT -m ttl --ttl-           eq            100 -j ACCEPT



    4、multiport:匹配离散的多个端口

参数

说明

--sports port1[,port2,port3]

匹配源端口

--dports port1[,port2,port3]

匹配目的端口

--ports port1[,port2,port3]

匹配源端口或目的端口

例子:



iptables -A INPUT -m multiport --sports 22,80,8080 -j DROP



   

    5、state:匹配指定的状态数据包

参数

说明

--state value

value可以为NEW、RELATED(有关联的)、ESTABLISHED、INVALID(未知连接)

例子:



iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT



    6、mark:匹配带有指定mark值的数据包

参数

说明

--mark value

匹配mark标记为value的数据包

例子:



iptables -t mangle -A INPUT -m mark --mark 1 -j DROP



    7、mac:匹配特定的mac地址

例子:



iptables -A FORWARD -m mac --mac-           source            00:0C:24:FA:19:80 -j DROP