iptables从入门到精通

一.主要知识点:

1. Iptables表链结构

2. 数据包过滤流程

3. Iptables书写规则

4. Iptables条件匹配

5. Iptables数据包控制

6. Iptables七层过滤

7. Iptables脚本

二.具体的知识点介绍

1. Iptables表链结构

1)默认的4个规则表

*         raw表:确定是否对该数据包进行状态跟踪

*         mangle表:为数据包设置标记

*         nat表:修改数据包中的源、目标IP地址或端口

*         filter表:确定是否放行该数据包(过滤)

2)默认的5种规则链

*         INPUT:处理入站数据包

*         OUTPUT:处理出站数据包

*         FORWARD:处理转发数据包

*         POSTROUTING链:在进行路由选择后处理数据包

*         PREROUTING链:在进行路由选择前处理数据包

2. 数据包过滤流程

规则表间的优先顺序

*         依次为:raw à mangle à nat à filter

规则链间的匹配顺序

*         入站数据:PREROUTING à INPUT

*         出站数据:OUTPUT à POSTROUTING

*         转发数据:PREROUTING à FORWARD à POSTROUTING

如图:

wKioL1RBGbiw8jvRAAFnKrA0Vtw367.jpg

3. Iptables书写规则

iptables命令的语法格式

*         iptables [-t 表名] 管理选项 [链名] [条件匹配] [-j 目标动作或跳转]

几个注意事项

*         不指定表名时,默认表示filter表

*         不指定链名时,默认表示该表内所有链

*         除非设置规则链的缺省策略,否则需要指定匹配条件

清除规则

*         -D:删除指定位置或内容的规则

*         -F:清空规则链内的所有规则

*         -Z:清空计数器

自定义规则链

*         -N:创建一条新的规则链

*         -X:删除自定义的规则链

其他

*         -h:查看iptables命令的使用帮助

例如:

[root@localhost ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT

[root@localhost ~]# iptables -I INPUT -p udp -j ACCEPT

[root@localhost ~]# iptables -I INPUT 2 -p icmp -j ACCEPT

[root@localhost ~]# iptables -P INPUT DROP

[root@localhost ~]# iptables -L INPUT �Cline-numbers

Chain INPUT (policy DROP)

num target     prot opt source               destination

1    ACCEPT     udp �C anywhere             anywhere

2    ACCEPT     icmp �C anywhere             anywhere

3    ACCEPT     tcp �C anywhere             anywhere

4. Iptables条件匹配

1)通用条件匹配

协议匹配

*         使用“-p 协议名”的形式

*         协议名可使用在“/etc/protocols”文件中定义的名称

*         常用的协议包括tcp、udp、icmp等

地址匹配

*         使用“-s 源地址”、 “-d 目标地址”的形式

*         地址可以是单个IP地址、网络地址(带掩码长度)

接口匹配

*         使用“-i 网络接口名”、 “-o 网络接口名”的形式,分别对应接收、发送数据包的网络接口

例如:

[root@localhost ~]# iptables -I INPUT -p icmp -j REJECT

[root@localhost ~]# iptables -A FORWARD -p ! icmp -j ACCEPT

[root@localhost ~]# iptables -A FORWARD -s 192.168.1.11 -j REJECT

[root@localhost ~]# iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP

[root@localhost ~]# iptables -A FORWARD -o eth1 -d 61.35.4.3 -j DROP

2)Iptables隐含条件匹配

端口匹配

*         使用“�Csport 源端口”、“�Cdport 目标端口”的形式

*         采用“端口1:端口2”的形式可以指定一个范围的端口

TCP标记匹配

*         使用“�Ctcp-flags 检查范围  被设置的标记”的形式

*         如“�Ctcp-flags SYN,RST,ACK SYN”表示检查SYN、RST、ACK这3个标记,只有SYN为1时满足条件

ICMP类型匹配

*         使用“�Cicmp-type ICMP类型”的形式

*         ICMP类型可以使用类型字符串或者对应的数值,例如Echo-Request、Echo-Reply

例如:

[root@localhost ~]# iptables -A FORWARD -p tcp �Cdport 22 -j ACCEPT

[root@localhost ~]# iptables -A OUTPUT -p tcp �Csport 20:80 -j ACCEPT

[root@localhost ~]# iptables -I INPUT -i eth1 -p tcp �Ctcp-flags SYN,RST,ACK SYN -j REJECT

[root@localhost ~]# iptables -A INPUT -i eth0 -p icmp �Cicmp-type Echo-Request -j DROP

[root@localhost ~]# iptables -A INPUT -p icmp �Cicmp-type Echo-Reply -j ACCEPT

3)Iptables扩展条件匹配

MAC地址匹配

*         使用“-m mac”结合“�Cmac-source MAC地址”的形式

多端口匹配

*         使用“-m multiport”结合“�Csports 源端口列表”或者“�Cdports 目标端口列表”的形式

*         多个端口之间使用逗号“,”分隔,连续的端口也可以使用冒号“:”分隔

IP地址范围匹配

*         使用“-m iprange”结合“�Csrc-range 源IP范围”或者“�Cdst-range 目标IP范围” 的形式

*         以“-”符号连接起始IP地址、结束IP地址

例如:

[root@localhost ~]# iptables -A FORWARD -m mac �Cmac-source 00:0C:29:27:55:3F -j DROP

[root@localhost ~]# iptables -A INPUT -p tcp -m multiport �Cdport 20,21,25,110,1250:1280 -j ACCEPT

[root@localhost ~]# iptables -A FORWARD -p tcp -m iprange �Csrc-range 192.168.1.20-192.168.1.99 -j DROP

5. Iptables数据包控制

常见的数据包处理方式

*         ACCEPT:放行数据包

*         DROP:丢弃数据包

*         REJECT:拒绝数据包

*         LOG:记录日志信息,并传递给下一条规则处理

*         用户自定义链名:传递给自定义链内的规则进行处理

*         SNAT:修改数据包的源地址信息

*         DNAT:修改数据包的目标地址信息

[root@localhost ~]# iptables -A INPUT -p tcp �Cdport 22 -m limit �Climit   3/minute �Climit-burst 8 -j LOG

[root@localhost ~]# iptables -A INPUT -p tcp �Cdport 22 -j DROP

[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT   �Cto-source 218.29.30.31

[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

[root@localhost ~]#iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 -p tcp �Cdport 80 -j DNAT �Cto-destination 192.168.1.6(:80)

6. Iptables七层过滤

1). 整体实现过程

*         添加内核补丁,重新编译内核,并以新内核引导系统

*         添加iptables补丁,重新编译安装iptables

*         安装l7-protocols协议定义包

*         使用iptables命令设置应用层过滤规则

2). 使用的软件包列表

*         Linux内核源码包:linux-2.6.28.8.tar.bz2

*         iptables源码包:iptables-1.4.2.tar.bz2

*         layer7补丁源码包:netfilter-layer7-v2.21.tar.gz

*         协议定义包:l7-protocols-2009-05-10.tar.gz

3). layer7应用层协议匹配

*         匹配格式:-m layer7 �Cl7proto 协议名

*         支持以下常见应用层协议的过滤

*          qq:腾讯公司QQ程序的通讯协议

*          msnmessenger:微软公司MSN程序的通讯协议

*          msn-filetransfer:MSN程序的文件传输协议

*          bittorrent:BT下载类软件使用的通讯协议

*          xunlei:迅雷下载工具使用的通讯协议

*          edonkey:电驴下载工具使用的通讯协议

*         其他各种应用层协议:ftp、http、dns、imap、pop3……

4). 规则示例:过滤使用qq协议的转发数据包

*          iptables -A FORWARD -m layer7 �Cl7proto qq -j DROP

7. Iptables脚本

防火墙脚本的一般结构

1).设置网段、网卡、IP地址等变量

2).加载包过滤相关的内核模块

*          FTP相关:ip_nat_ftp、ip_conntrack_ftp

3).确认开启路由转发功能

*          方法1:/sbin/sysctl -w net.ipv4.ip_forward=1

*          方法2:echo 1 > /proc/sys/net/ipv4/ip_forward

*          方法3:修改/etc/sysctl.conf,设置 net.ipv4.ip_forward = 1

4).用于添加的具体防火墙规则内容

*          清空原有规则,建立新的规则

例如:

/sbin/modprobe ip_tables

/sbin/modprobe ip_nat_ftp

iptables -F

iptables -X

iptables -Z

#――――――――default rule ――――――――――

iptables -P INPUT DROP

iptables -P OUTPUT DROP

iptables -P FORWARD DROP

#――――――――limit packet per second――――――――――

/sbin/iptables -A INPUT -f -m limit �Climit 100/sec �Climit-burst 100 -j ACCEPT

/sbin/iptables -A INPUT -p tcp -m tcp �Ctcp-flags SYN,RST,ACK SYN -m limit �Climit 20/sec �Climit-burst 200 -j ACCEPT

/sbin/iptables -A INPUT -p icmp -m limit �Climit 12/min �Climit-burst 2 -j DROP

#――――――――ssh rule ――――――――――――――-

iptables -t filter -A   INPUT -i eth0 -p tcp �Cdport 22 -j ACCEPT

iptables -t filter -A OUTPUT -o eth0 -p tcp �Csport 22 -j ACCEPT

#――――――――www-ftp-mail-dns rule ――――――――――�C

iptables -t filter -A   INPUT -i   eth0 -p tcp �Cdport 80     -j ACCEPT

iptables -t filter -A   OUTPUT -o eth0 -p tcp �Csport 80     -j ACCEPT

#――――――――-ICMP rule ――――――――――――――

iptables -A INPUT -p icmp �Cicmp-type echo-request -j ACCEPT

iptables -A INPUT -p icmp �Cicmp-type echo-reply -j ACCEPT

iptables -A OUTPUT -p icmp �Cicmp-type echo-request -j ACCEPT

iptables -A OUTPUT -p icmp �Cicmp-type echo-reply -j ACCEPT


你可能感兴趣的:(iptables从入门到精通)