
本次对iptabbles+l7的介绍分为两部分:6 l* z+ ]3 F* k4 l: z
第一部分——————对系统升级打l7补丁9 O9 f2 Z" G+ H" z. C3 N
第二部分——————对iptables+l7的应用
" Q+ `+ {3 U3 L$ K- n& `! ~& A第一部分:对系统升级打补丁
. O% [* H7 H! R' i, F8 o% \7 P# w$ M为了使用l7层协议进行控制,我们要在内核中打补丁文件,需要重新编译内核文件,下面的每一步都需要小心谨慎,不然就要重头开始了~需要软件的朋友可以Q395061796
4 y3 G. Z& l0 K/ F# C6 v软件需求:- z0 j% ?8 H% h2 ~2 I$ }
2 a( e# ?* w4 z: A5 r6 t: @) ~
1、 拆解内核文件与layer7文件:6 s' k# E R8 K/ G7 l
[root@zhangc ~]# tar jxvf linux-2.6.25.19.tar.bz2 -C /usr/src/5 Q! p9 g& ?1 j/ u& n6 K7 r
[root@zhangc ~]# tar zxvf netfilter-layer7-v2.20.tar.gz -C /usr/src/
, E A8 X, N, A% ~* H r2 H/ [' c6 {' s2、 将补丁文件放入内核文件夹内8 B) K2 n8 @) f& s1 e! k4 r
[root@zhangc ~]# cd /usr/src/linux-2.6.25.19/
: k# \! N3 H/ p( V- M$ a) V[root@zhangc linux-2.6.25.19]# patch -p1 < /usr/src/netfilter-layer7-v2.20/kernel-2.6.25-layer7-2.20.patch
* m% {0 ^. Y3 z5 C2 @/ ]3、 使用内核文件配置新内核. O3 a6 l) d4 N% Z
[root@zhangc linux-2.6.25.19]# cp /boot/config-2.6.18-164.el5 .config" M' w* m$ H$ W- A4 ^+ G0 [/ K
[root@zhangc linux-2.6.25.19]#make menuconfig U m. _/ `7 ~3 O" H9 k( n z9 E( z
将一些需要的服务选项选为M,编译为模块。9 W+ P' m$ S9 X/ A. V* a1 l5 g( _5 n
第一部分选项:5 i; S9 w* Y6 M( j
) o5 F7 G( t& G3 _

' ?5 q% H/ a4 n \6 z; J
/ s% m1 k& T. m" J! w( _
$ ?3 S$ ^% o7 \" V. y2 e编译以下3个模块+ d5 ~ g6 P& F, p1 C5 v: k! r4 Q$ j
3 E8 C6 h* h: E+ t6 j4 W9 G# ^# R! x' J
! C$ n6 S7 D% \, W+ K) T

8 S- F* \3 ^ l. ]4 f第二部分选项:3 k# {( }+ h3 e, f& a! S' v( V

: ]/ _9 A; M) O' ]2 Q
7 @" v+ N R6 R2 b; g9 ]
. g; J h: A0 d8 D$ k! U$ e
! k2 z v( h+ N; S( O编译以下4个模块/ v. d# s6 K [4 G2 a5 }
3 N% @) g$ N+ h5 ~$ e: o

4 @# {" _3 j' D; f* H) C% x' ?. T! s
6 I/ } E& l, A1 N: |4 {1 ~6 x : S, X4 R" V7 {5 t4 l8 X. F
4.编译内核、安装模块、安装内核& G! X3 p1 K" S8 A; @( H. x
[root@zhangc linux-2.6.25.19]# make
0 U% J' K2 b4 o[root@zhangc linux-2.6.25.19]# make modules_install
& N J5 R) \$ h: i2 r( `[root@zhangc linux-2.6.25.19]# make install+ e, Z# w! `2 v% F
5.卸载老版本iptables; H" s X0 V2 R2 o
[root@zhangc ~]# rpm -e iptables –nodeps; o! m' H- }2 e2 P' N: M2 c
6.拆解并合并iptables+layer7补丁! Y. e6 M! c+ ~* _1 H7 ?5 I
[root@zhangc ~]# tar jxvf iptables-1.4.2.tar.bz2 -C /usr/src/% ^; n A$ i+ Z8 v; P9 {
[root@zhangc ~]# cd /usr/src/netfilter-layer7-v2.20/iptables-1.4.1.1-for-kernel-2.6.20forward/
% p$ D7 n0 \- k& I. d+ N$ x0 X( r! I4 @[root@zhangc iptables-1.4.1.1-for-kernel-2.6.20forward]# cp * /usr/src/iptables-1.4.2/extensions/
2 }+ l: I; c. ~+ T+ ~+ i) z7.编译并安装
: W3 |5 Z6 D3 C[root@zhangc iptables-1.4.1.1-for-kernel-2.6.20forward]# cd /usr/src/iptables-1.4.2/* l) A5 A2 _* P. w1 q$ L
[root@zhangc iptables-1.4.2]# ./configure --prefix=/ --with-ksource=/usr/src/linux-2.6.25.19/
9 m3 [8 i% o7 _, V8 k; u[root@zhangc iptables-1.4.2]# make
5 d1 s$ g, d9 ~7 Z" G- u[root@zhangc iptables-1.4.2]# make install% h# m2 x$ G: `, W
8.安装l7-prorocols模式包4 i. H2 Z4 G' j1 e5 l# u# {; Y
[root@zhangc ~]# tar zxvf l7-protocols-2008-10-04.tar.gz -C /etc/8 c, V9 c" p9 s9 u- o$ D
[root@zhangc ~]# mv /etc/l7-protocols-2008-10-04/ /etc/l7-protocols( q+ }8 u- k' d! m4 x
9.修改文件ip6tables,能正常启用service' S/ S% I* s, D$ q% ]- v1 I1 v
[root@zhangc ~]# vim /etc/init.d/ip6tables /etc/init.d/iptables2 Q8 u4 A" I$ x
[root@zhangc ~]# service iptables save【这条命令进行测试】( L! ? q% p% `$ `
[root@zhangc ~]# service iptables restart
% r, u5 Z1 h; l' u* r- X * t: [/ f* {1 @
10.系统的修补已经完成,可以正常使用iptables+l7.
, d) ~* U+ c# \$ A
6 B y( J* k$ o+ p2 }第二部分:iptables+l7的应用2 L7 _! A) c$ s1 p) k& g% O& K3 A9 N
l7规则的格式:
0 H! w2 _ j& X; L' |通过向防火墙提供有关对来自某个源地址、到某个目的地或具有特定协议类型的信息包要做些什么的指令,规则控制信息包的过滤。通过使用iptables系统提供的特殊命令iptables建立这些规则,并将其添加到内核空间特定信息包过滤表内的链中。关于添加、去除、编辑规则的命令,一般语法如下:- C% w/ u1 u E8 R
iptables [-t table] command [match] [target]
4 p' Z( e8 J6 T( P5 ~1.表(table)
, A( o( w, F. Y[-t table]选项允许使用标准表之外的任何表。表是包含仅处理特定类型信息包的规则和链的信息包过滤表。有三个可用的表选项:filter、nat和mangle。该选项不是必需的,如果未指定,则filter作为缺省表。3 i5 Y7 @6 O- U/ w: C d3 j+ N3 v2 r
Filter用于一般的信息包过滤,包含INPUT,OUTPUT,FORWARD链# |8 [ u1 d. \' n4 b
Nat 用于要转发的信息包,包含PREROUTING,OUTPUT,POSTROUTING链9 d: Z& e+ h. Q% o5 i
2.命令(command): V% V4 w3 n: L- _* B& K
command部分是iptables命令最重要的部分。它告诉iptables命令要做什么,例如插入规则、将规则添加到链的末尾或删除规则。
" ~9 D1 m- D! D) [( Y-A或—append:将一条规则附加到链的末尾
1 v; O/ u5 ]+ H9 G0 Y" p-D或—delete:删除一条规则5 `: u: C6 h0 I) I
-P或—policy : 设置链的缺省目标6 x3 B8 U' i& {( U/ {
-R或—replace:替换指定链的相应规则
1 B3 a1 |& y% B; m8 W-L 或—list : 列出指定链中的所有规则
" l# M# v6 Y/ M( [9 e-F 或—flush:默认删除所有链中的规则;如果指定链名,该命令删除链中的所有规则1 b7 o/ l9 U5 D
-N或—new-chain:创建新的链(名称为命令中的指定名称)4 b& _. v6 e. R. n9 ?9 C
-X:删除用户的空链5 w) V, d1 c* P9 G
-i指的是数据流入的那个入口网卡& I2 w( j1 o0 R) i3 ~
-o指的是出口网卡& M" Q& z2 T. s# P8 @! r4 k
-t指的是表格
! g @; {; C) e-p则是指协议
' @& ~# |7 L5 V- w6 F0 [; n2 G-m表示调用模块
! g; D& A, k' y1 r, w' C8 N6 _-j代表执行的动作
* A" A: z/ G: O. z--sport代表源端口 r* \" O! S' O0 l5 v8 k" H
--dport代表目的端口 z) @) ]: Y8 {4 n6 i
--syn则表示带有syn标识设置的TCP数据包。SYN用于初始化一个TCP连接,如果自己机器上没有运行任何服务器,别人也就不会向你发送SYN数据包。# e/ ~, h/ E- i+ {/ j* }# V4 V
3.匹配(match)0 o& _$ B+ K- k9 ~$ I- w
iptables命令的可选match部分指定信息包与规则匹配所应具有的特征(如源地址、目的地址、协议等)。匹配分为通用匹配和特定于协议的匹配两大类。9 ]* t r7 g/ b* O) o- G/ q4 V4 Y5 X
-p或–protocol:该通用协议匹配用于检查某些特定协议。其中ALL为缺省值,缺省源于所有IP地址匹配。可以使用!符号表示不与该项匹配。- d2 ]8 Q1 v9 p- [
-s或—source:根据数据包的源地址进行匹配。可以使用!表示不与该选项匹配。4 q# ]) @$ f- A9 q* B
-d或—destination:根据数据包的目的地址进行匹配。可以使用!表示取反。
: C( Y9 b8 \9 Q4.目标(target)4 `) `+ S2 L0 G/ N6 ` N6 a% m
目标是由规则指定的操作,对与那些规则匹配的信息包执行这些操作。除了允许用户定义的目标之外,还有许多可用的目标选项。许多用于建立高级规则的其它目标,如LOG、REDIRECT、MARK、MIRROR和MASQUERADE等。在此对常用的3个进行简单介绍。
3 _* \, {0 F8 t4 u7 pACCEPT:当数据包与规则完全匹配时,会允许数据包通过。
* u- U: y2 n# B# ~! aDROP:当数据包与规则完全匹配是,会丢弃数据包。2 Y: M: N* ?% T+ K- O& y
MASQUERADE:当数据包与规则完全匹配时,将数据包的源IP地址伪装为当前接口的IP地址。
; n8 u: y* o: K7 L. F. z5.使用方法:1 e) J# a' _( P y
增加规则:- H7 t) ? l; T3 c0 d5 j' j
阻止来自某一特定IP范围内的数据包
) ], X, P& T' ^" A5 ~% b; \( v#Iptables –t filter –A INPUT –s 192.168.100.0/24 –j DROP
, D7 P" {" M- N/ T阻止所有流向攻击者IP地址的数据包/ l9 x, T' r" Z$ r% Z) k
#Iptables –t filter –A OUTPUT –d 192.168.100.0/24 –j DROP: A7 a/ ?# X: J9 W
删除规则:% ^; |/ E* H, r
#Iptabels –t filter –D OUTPUT –d 192.168.100.0/24 –j DROP, u/ h' w. _1 h
缺省策略
* K3 a1 A- t" C! j5 G#iptabels –P INPUT DROP) a, j) k( u( ]% c: L
地址伪装
# U* W# I* S' t& e4 g' m9 y. F#iptabels –t nat –A POSTROUTING –s 192.168.100.0/24 –o eth1 –j MASQUERADE# W6 k( l( [5 c3 Z: K7 c
6.常用的iptables 模块
0 n) I6 |: q' h(1)string(字符串匹配,可以用做内容过滤)
- O8 `* ?. k x# Y9 ^$ M#iptables -I FORWARD -d 192.168.3.0/24 -p tcp --sport 80 -m string --string "广告" -j DROP
$ e+ ?8 M3 ^3 Z1 p1 Q0 D7 Q(2)comment (备注匹配,可以支持最多256个字符)! n c( o0 O; n5 x2 X. j& n/ \
#iptables -I FORWARD -s 192.168.3.159 -m string --string "qq.com" -j DROP -m comment --comment "denny go to qq.com"9 |/ m3 d1 ^- G: A
(3)connlimit(同时连接个数限制匹配) --connlimit-above n 限制为多少个。--connlimit-mask n 这组主机的掩码,默认是connlimit-mask 32 ,即每个ip." C1 |1 s# j. P- u: k# d5 B+ b
#iptables -p tcp --syn --dport 23 -m connlimit --connlimit-above 2 -j REJECT
& o' J; Y6 | l2 l: i0 n" o4 H(4)time(时间匹配)—timestart开始时间。--timestop结束时间。
4 k; x- i' ~1 ]1 J6 p) l# N7 F' n#iptables -t filter-A INPUT -m time --timestart 8:00 --timestop 18:00 --days Mon,Tue,Wed,Thu,Fri
# S* Y/ ~# N+ r% ?(5) iprange (ip范围匹配)
! D* q" u M) x ^6 w% A#iptables -A FORWARD -m iprange --src-range 192.168.1.5-192.168.1.124 -j ACCEPT
" V! ~+ n1 z0 v5 }2 {; m(6)state模块 –-state 分文三种状态:NEW、ESTABLISHED、RELATED
* h) M1 C4 N. ^9 z#iptables -t filter -A -m state --state ESTABLISHED,RELATED -j ACCEPT {9 ?1 ?* O# @+ p( V$ j' h
7.案例:
: `3 e0 `/ N: d7 U9 K试验目的:100.21-30网段上班时间能够能够访问FTP服务器,禁止上班时间访问sina网站,禁止使用迅雷、qq软件。
* \5 i9 W6 j9 i# `; v! B
; m/ p/ ?+ n% ]( n* C1 N第一、 打开转发功能拒绝所有通过$ ^1 G; J8 ~6 _: w) z5 ^
[root@zhangc ~]# vim /etc/sysctl.conf
- ]2 b) F5 g( I2 D( Y Q# a4 o$ j
, k3 [' p4 b! W% p[root@zhangc ~]# sysctl –p
( ~6 U9 c3 B( w第二、实现对FTP服务器的访问
9 d; ?2 c8 N3 l' t! `允许http通过
9 h8 J# y! d* {9 e$ X. Y# q8 q+ G[root@zhangc ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.100.21-192.168.100.30 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tun,Wed,Thu,Fri -p tcp --dport 80 -j ACCEPT
. S& v h5 Q3 k1 r* p6 V/ x/ y, t1 {允许DNS通过
8 X5 l. [/ h. K( z1 C/ m/ f" O[root@zhangc ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.100.21-192.168.100.30 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tun,Wed,Thu,Fri -p udp --dport 53 -j ACCEPT
3 R6 f6 U: {0 F6 v* U: g标准包过滤:每禁用一个服务,都要过滤掉流出的数据包和流入的数据包,相对比较稍微有些繁琐。
+ v" r' n: J( O+ N& Y; Z: l( t[root@zhangc ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.100.10-192.168.100.20 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport 21 -j ACCEPT
' f! _/ z5 k+ {7 d; i* e6 {[root@zhangc ~]# iptbales -t filter -A FORWARD -p tcp --sport 21 -j ACCEPT【服务器端请求的接收21端口】
* ~, s9 X! Z, K+ ~* ?" j[root@zhangc ~]# iptables -t filter -A FORWARD -p tcp --sport 20 -j ACCEPT【服务器回应】' B. Y# G6 W/ q- q( d- [ A# ?6 z
[root@zhangc ~]# iptables -t filter -A FORWARD -p tcp --dport 20 -j ACCEPT【客户端接收20端口】
& I0 Q# j: m/ M- ^- K3 O# r% y状态包过滤:记录一个会话的状态,从防火墙出去的数据包回应的时候默认允许通过。
3 u4 i3 E4 q+ K; p& H[root@zhangc ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.100.10-192.168.100.20 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport 21 -j ACCEPT
! g" w5 Q; _' G- X0 m' I7 x9 j[root@zhangc ~]# iptables -t filter -A -m state --state ESTABLISHED,RELATED -j ACCEPT
! h, K( h I# D W1 z5 t' Z以上两种方法都有可以使用进行FTP的访问 r5 |7 u$ D/ o/ k7 S* o/ p
第三、禁止上班时间访问sina、迅雷、qq1 u1 n- e- R Z: h0 A# P
[root@zhangc ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.145.21-192.168.145.30 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport 80 -j ACCEPT6 i! J. @! P" V! n. `
[root@zhangc ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.220.21-192.168.220.30 -m time --timestart 08:00 --timestop 20:00 –weekdays Mon,Tun,Wed,Thu,Fri -m string --string "sina" --algo bm -j DROP
% E4 M* S/ z% p5 n* o. @/ _7 b[root@zhangc ~]# iptables -A FORWARD -m iprange --src-range 192.168.145.21-192.168.145.30 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Fri -m layer7 --l7proto qq -j DROP
( L& T4 a; z7 z[root@zhangc ~]# iptables -A FORWARD -m iprange --src-range 192.168.145.21-192.168.145.30 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Fri -m layer7 --l7proto xunlei -j DROP
1 P) c/ ~$ ]/ g& y |
|