Iptables詳解七層過濾


《Iptables詳解七層過濾》

 

 

 

一、防火牆簡介

防火牆其實就是一個加固主機或網絡安全的一個設備或者軟件而已,通過防火牆可以隔離風險區域與安全區域的連接,同時不會妨礙風險區域的訪問。當然需要注意的是世界上沒有絕對的安全,防火牆也只是啟到一定的安全防護。大多數的安全風險還是在內網當中!

二、防火牆的分類

(1).從特點上分類

第一種,軟件防火牆,軟件防火牆需要運行在特定的計算機上,而且需要計算機的操作系統的支持。

第二種,硬件防火牆,硬件防火牆其實就是一個普通pc機的架構,然后上面跑有專門的操作系統。

第三種,芯片級的防火牆,這種防火牆基於專門的硬件平台,沒有操作系統,專有的ASIC芯片使它們比其他類的防火牆速度更快,處理能力極強,性能更高,但是價格卻極其昂貴。

(2).從技術上分類

第一種,包過濾型防火牆,這類的防火牆主要是工作在網絡層,根據事先設定好的規則進行檢查,檢查結果根據事先設定好的處理機制進行處理。

第二種,應用層防火牆,它是工作在TCP/IP模型中的最高層應用層,相比較來說速度要慢一點。

第三種,狀態監視器,狀態監視做為防火牆其安全性為最佳,但配置比較復雜,且網絡速度較慢。

三、防火牆在企業中的部署

(1). 單宿主堡壘主機:是單台服務器有防火牆,只為單台服務器防護。

(2). 雙宿主堡壘主機:雙宿主堡壘主機是一台裝有兩塊網卡的堡壘主機,一般這台堡壘主機應用在網關,防護局域網跟廣域網之間通信等安全。

(3).三宿主堡壘主機:三宿主堡壘主機是一台裝有三塊網卡的堡壘主機,那么他將外網,內網,DMZ 三個區域隔離開來,同時保護內網已經DMZ區域的安全等。

 

四、IPTABLES的簡介

IPTABLES/netfilter(官方網站,http://www.netfilter.org) 其實大多數人都認為iptables是linux系統上的一個服務,其實不是的. 我們linux系統上的服務比如說httpd服務在啟動起來的時候,是不是在后台啟動一個相應的服務進程且在網卡上監聽一個端口,而iptables卻不然,那么iptables到底是什么呢?其實iptables只是一個工具而已.我們的linux系統有用戶空間,和內核空間,而iptables有兩個組件,一是netfilter,  netfilter組件只是用來過濾防火牆規則,及作出相應的處理機制的,它是集成在內核中的一部分,也就是說它是工作在內核空間的,那么大家都知道用戶是不可能直接跟內核空間打交道的,那么netfilter只是工作在內核空間對規則進行處理的,那么規則從何而來呢? 是從iptables的第二個組件iptables而來的,我們上面說了IPTABLES只是一個工作在用戶空間的一個工具而已,那么用戶就使用這個工具的一個命令來跟工作在內核空間中的netfiter組件打交道的.其實IPTABLES防火牆就是這樣的。

 

五、IPTABLES的表和鏈IPTABLES

常用的表和鏈有三個,分別為 filter表 nat表 mangle表, 和五個鏈 INPUT鏈 OUTPUT鏈 FORWARE鏈 POSTROUTING鏈 PREROUTING鏈,下面來介紹下它們的各個功能, 

1.filter表 


      filter表主要是過濾數據包的,IPTABLES幾乎所有的數據包過濾都在此表中實現的,filter表也是IPTABLES中默認的表,此表中還包含三個鏈如下: 
(1).INPUT鏈 
       過濾所有的目標地址是本機的數據包 
(2).OUTPUT鏈 
         過濾所有從本機出去的數據包 
(3).FORWORD鏈 
         過濾所有從本機路過的數據包 


2.nat表 


      nat表主要是用於做網絡地址轉換的(NAT),在IPTABLES中可以做SNAT(源地址轉換),DNAT(目標地址轉換),PANT(即跟SNAT差不多,不一樣的是SNAT的源地址是固定的,而PNAT的源地址是不固定的,當使用ppp或pppoe的方式連接互聯網的時候一般適應這個) nat表中包含兩個鏈如下: 
(1).PREROUTING鏈 
   在數據包到達防火牆的時候改變目標地址 DNAT應用於此鏈. 
(2).OUTPUT鏈 
         可以改變本地產生的數據包的目標地址 
(3).POSTROUTING鏈 
         在數據包離開防火牆的時候改變源地址,SNAT應用於次鏈 


3.mangle表 


       mangle表主要是修改數據包頭部信息的,此表中包含以下5條鏈: 
(1).PREROUTING鏈, 
         在數據包進入防火牆之后,也稱為路由前, 
(2).POSTROUTING鏈, 
          在數據包確定目標地址后,也稱為路由后, 
(3).OUTPUT鏈 
          從本機出去的時間包路由前 
(4).INPUT鏈 
          數據包進入本機后,路由后 
(5).FORWARD鏈 
          第一次路由判斷之后,最后一次路由判斷之前改變數據包

 

4.數據包過濾匹配流程

 

六、IPTABLES的幾個狀態

IPTABLES的狀態跟蹤連接有4種,分別是,NEW,ESTABLISHED,RELATED,INVALID,除了從本機出去的數據包有NAT表的OUTPUT鏈處理外,其他所有的狀態跟蹤都在NAT表中的PREROUTING鏈中處理,下面來說下4種狀態是什么,

1.NEW狀態 
       NEW狀態的數據包說明這個數據包是收到的第一個數據包。 
2.ESTABLISHED狀態 
      只要發送並接到應答,一個數據包的狀態就從NEW變為ESTABLEISHED,而且該狀態會繼續匹配這個連接后繼數據包。 
3.RELATED狀態 
      當一個數據包的狀態處於ESTABLSHED狀態的連接有關系的時候,就會被認為是RELATED,也就是說一個鏈接想要是RELATED狀態,首先要有一個ESTABLISHED的連接。 
4.INVALID狀態 
      不能被識別屬於哪個連接狀態或沒有任何關系的狀態,一般這中數據包要被拒絕的。

七、IPTABLES的命令及使用

iptables在CentOS或RHEL的系統上默認安裝的, IPTABLES的命令選項主要分為這么幾大類,規則管理,鏈管理,默認規則管理,查看,匹配條件,處理動作等,下面我們就來說明一下,

 

1.規則管理

 

1

2

3

4

iptables -A    添加一條新規則

iptables -I    插入一條新規則 -I 后面加一數字表示插入到哪行

iptables -D    刪除一條新規則 -D 后面加一數字表示刪除哪行

iptables -R    替換一條新規則 -R 后面加一數字表示替換哪行

2.鏈管理

1

2

3

4

iptables -F    清空鏈中的所有規則

iptables -N    新建一個鏈

iptables -X    刪除一個自定義鏈,刪除之前要保證次鏈是空的,而且沒有被引用

iptables -E    重命名鏈

3.默認規則管理

 

1

iptables -P    設置默認規則

4.查看

1

2

3

4

5

iptables -L    查看規則 –L 還有幾個子選項如下

iptables -L -n 以數字的方式顯示

iptables -L -v 顯示詳細信息

iptables -L -x 顯示精確信息

iptables -L --line-numbers 顯示行號

5.條件匹配

(1).基本匹配

條件匹配也可以使用 ! 取反

1

2

3

4

5

-s    源地址

-d    目標地址

-p    協議{tcp|udp|icmp}

-i    從哪個網絡接口進入,比如 -i eth0

-o    從哪個網絡接口出去,比如 -o eth0

(2).擴展匹配

隱含擴展匹配

1

2

-p {tcp|udp} --sport   指定源端口

-p {tcp|udp} --dport   指定目標端口

顯示擴展匹配

1

2

3

4

5

6

7

8

9

-m state --state   匹配狀態的

-m mutiport --source-port   端口匹配 ,指定一組端口

-m limit --limit 3/minute   每三分種一次

-m limit --limit-burst  5   只匹配5個數據包

-m string --string --algo bm|kmp --string "xxxx"  匹配字符串

-m time --timestart 8:00 --timestop 12:00  表示從哪個時間到哪個時間段

-m time --days    表示那天

-m mac --mac-source xx:xx:xx:xx:xx:xx 匹配源MAC地址

-m layer7 --l7proto qq   表示匹配騰訊qq的 當然也支持很多協議,這個默認是沒有的,需要我們給內核打補丁並重新編譯內核及iptables才可以使用 -m layer7 這個顯示擴展匹配

6.處理動作

1

2

3

4

5

6

7

8

-j ACCEPT   允許

-j REJECT    拒絕

-j DROP       拒絕並提示信息

-j SNAT       源地址轉換

-j DNAT       目標地址轉換

-j REDIRECT   重定向

-j MASQUERAED  地址偽裝

-j LOG --log-prefix "說明信息,自己隨便定義"      記錄日志

八、IPTABLES的腳本編寫

IPTABLES 腳本里面其實就是敲的一系列命令而已下面給個例子,介紹下iptables命令的使用及IPTABLES腳本的編寫

 

1.IPTABLES腳本實例 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

#vim iptables.sh

#!/bin/bash

#

#定義變量

mynet=192.168.10.0/24

myip=192.168.10.100

IPT=/sbin/iptables

#加載ftp模塊

modprobe ip_conntrack-ftp

modprobe ip_nat_ftp

#開啟路由轉發功能

echo "1" /proc/sys/net/ipv4/ip_forward

#清空所有表中的規則

$IPT -F

$IPT -t nat –F

$IPT -t mangle –F

#刪除所有自定義鏈

$IPT -X

$IPT -t nat -X

$IPT -t mangle –X

#設置默認策略

$IPT -P INPUT DROP

$IPT -P OUTPUT DROP

$IPT -P FORWARD ACCEPT

#允許狀態為ESTABLISHED,RELATED的訪問本機,及狀態為NEW的從本機出去

$IPT -A INOUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#允許本地環回口訪問

$IPT -A INPUT -i lo -j ACCEPT

$IPT -A OUTPUT -o lo -j ACCEPT

#允許管理員主機訪問本地ssh服務

$IPT -A INPUT -s $myip -m state --state NEW -p tcp --dport 22 -j ACCEPT

$IPT -A OUTPUT -d $myip -p tcp --sport 22 -j ACCEPT

#允許局域網的ping請求

$IPT -A INPUT -s $mynet -p icmp --icmp-type 8 -j ACCEPT

$IPT -A OUTPUT -d $mynet -p icmp --icmp-type 0 -j ACCEPT

#為局域網做SNAT

$IPT -t nat -A POSTROUTING -s $mynet -j SNAT --to-source 222.95.1.97

#為局域網內部的web服務器做DNAT

$IPT -t nat -A PREROUTING -d 222.95.1.97 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.1

2.讓下次開機自動加載腳本 

1

[root@localhost ~]# echo "/bin/bash /root/shell/iptables.sh" >> /etc/rc.local

九、IPTABLES的7層過濾

說明:為網絡管理員,對P2P,QQ,酷狗,等軟件是又愛又恨,大多數公司,為了提高工作效率禁止公司員工上QQ,看視頻等,  在市場上買專門的上網行為管理設備,隨便都是好幾W,而使用linux來做網關,一樣可以禁止qq,酷狗等軟件,成本才幾千塊,下面將介紹下怎么實現的!

1.簡介

     在Linux的防火牆體系Netfilter下有一個獨立的模塊L7 filter 。從字面上看Netfilter是對網絡數據的過濾,L7 filter是基於數據流應用層內容的過濾。不過實際上 L7 filter的本職工作不是對數據流進行過濾而是對數據流進行分類。它使用模式匹配算法把進入設備的數據包應用層內容與事先定義好的協議規則進行比對,如果匹配成功就說明這個數據包屬於某種協議。

L7 filter是基於數據流工作的,建立在Netfilter connstrack功能之上。因為一個數據流或者說一個連接的所有數據都是屬於同一個應用的,所以L7 filter沒有必要對所以的數據包進行模式匹配,而只匹配一個流的前面幾個數據包 (比如5或10個數據包)。當一個流的前面幾個數據包包含了某種應用層協議的特征碼時 (比如QQ),則這個數據流被L7 filter識別;當前面幾個數據包的內容沒有包含某種應用層協議的特征碼時,則L7 filter放棄繼續做模式匹配,這個數據流也就沒有辦法被識別。

2.下載相關軟件

7層過濾首先需要內核支持,現在最新的內核是3.10(https://www.kernel.org/)但是L7 filter的支持列表只更新到2.6.30.5而且有部份的功能未經測試,而所有經過測試的版本的內核是2.6.28(http://l7-filter.sourceforge.net/kernelcompat),為了保證其穩定所以決定將內核升級為2.6.28!

1

2

3

4

5

6

7

8

9

10

11

[root@localhost src]# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.28.tar.bz2

[root@localhost src]# wget http://netfilter.org/projects/iptables/files/iptables-1.4.7.tar.bz2

[root@localhost src]# wget http://downloads.sourceforge.net/project/l7-filter/Protocol%20definitions/2009-05-28/l7-protocols-2009-05-28.tar.gz?use_mirror=nchc

[root@localhost src]# wget http://downloads.sourceforge.net/project/l7-filter/l7-filter%20kernel%20version/2.22/netfilter-layer7-v2.22.tar.gz?use_mirror=nchc

[root@localhost src]# ll

total 52264

-rw-r--r-- 1 root root   462420 Jan  3  2012 iptables-1.4.7.tar.bz2

-rw-r--r-- 1 root root   142050 May 29  2009 l7-protocols-2009-05-28.tar.gz

-rw-r--r-- 1 root root 52665364 Dec 25  2008 linux-2.6.28.tar.bz2

-rw-r--r-- 1 root root   174853 Jul 14  2009 netfilter-layer7-v2.22.tar.gz

[root@localhost src]#

3.卸載系統自帶的 iptables

在卸載之前,我們先把iptables的啟動腳本及腳本配置文件拷貝到/root目錄下待會有用

1

2

3

4

5

6

7

8

[root@localhost src]# cp /etc/init.d/iptables /root

[root@localhost src]# cp /etc/sysconfig/iptables-config /root

[root@localhost src]# rpm -qa | grep iptables

iptables-1.3.5-5.3.el5_4.1

iptables-ipv6-1.3.5-5.3.el5_4.1

[root@localhost src]# rpm -e --nodeps  `rpm -qa | grep iptables`

warning: /etc/sysconfig/iptables-config saved as /etc/sysconfig/iptables-config.rpmsave

[root@localhost src]#

4.給新內核加入Layer 7補丁

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

[root@localhost src]# tar xf linux-2.6.28.tar.bz2 -C /usr/src

[root@localhost src]# tar xf netfilter-layer7-v2.22.tar.gz -C /usr/src

[root@localhost src]# cd /usr/src/

[root@localhost src]# ls

debug  kernels  linux-2.6.28  netfilter-layer7-v2.22  redhat

[root@localhost src]# ln -sv linux-2.6.28/ linux

create symbolic link `linux' to `linux-2.6.28/'

[root@localhost src]# ls

debug  kernels  linux  linux-2.6.28  netfilter-layer7-v2.22  redhat

[root@localhost src]# cd /usr/src/linux

[root@localhost linux]# patch -p1 < ../netfilter-layer7-v2.22/kernel-2.

kernel-2.4-layer7-2.22.patch            kernel-2.6.25-2.6.28-layer7-2.22.patch

[root@localhost linux]# patch -p1 < ../netfilter-layer7-v2.22/kernel-2.6.25-2.6.28-layer7-2.22.patch

patching file net/netfilter/Kconfig

patching file net/netfilter/Makefile

patching file net/netfilter/xt_layer7.c

patching file net/netfilter/regexp/regexp.c

patching file net/netfilter/regexp/regexp.h

patching file net/netfilter/regexp/regmagic.h

patching file net/netfilter/regexp/regsub.c

patching file net/netfilter/nf_conntrack_core.c

patching file net/netfilter/nf_conntrack_standalone.c

patching file include/net/netfilter/nf_conntrack.h

patching file include/linux/netfilter/xt_layer7.h

[root@localhost linux]# cp /boot/config-2.6.18-194.el5 /usr/src/linux/.config

5.編譯內核

說明:(需要增加的編譯模塊)

Networking support → Networking Options → Network packet filtering framework → Core Netfilter Configuration 
<M>  Netfilter connection tracking support 
<M>  "layer7" match support 
<M>  "string" match support 
<M>  "time"  match support 
<M>  "iprange"  match support 
<M>  "connlimit"  match support 
<M>  "state"  match support 
<M>  "conntrack"  connection  match support 
<M>  "mac"  address  match support 
<M>  "multiport" Multiple port match support

 

Networking support → Networking Options →Network packet filtering framework → IP Netfilter Configuration 

<M> IPv4 connection tracking support (required for NAT)

<M> Full NA

<M> MASQUERADE target support

<M> NETMAP target support                            

<M> REDIRECT target support

具體操作:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

[root@localhost linux]#make  menuconfig

  HOSTCC  scripts/basic/fixdep

  HOSTCC  scripts/basic/docproc

  HOSTCC  scripts/basic/hash

  HOSTCC  scripts/kconfig/conf.o

  HOSTCC  scripts/kconfig/kxgettext.o

  HOSTCC  scripts/kconfig/lxdialog/checklist.o

  HOSTCC  scripts/kconfig/lxdialog/inputbox.o

  HOSTCC  scripts/kconfig/lxdialog/menubox.o

  HOSTCC  scripts/kconfig/lxdialog/textbox.o

  HOSTCC  scripts/kconfig/lxdialog/util.o

  HOSTCC  scripts/kconfig/lxdialog/yesno.o

  HOSTCC  scripts/kconfig/mconf.o

  SHIPPED scripts/kconfig/zconf.tab.c

  SHIPPED scripts/kconfig/lex.zconf.c

  SHIPPED scripts/kconfig/zconf.hash.c

  HOSTCC  scripts/kconfig/zconf.tab.o

  HOSTLD  scripts/kconfig/mconf

scripts/kconfig/mconf arch/x86/Kconfig

.config:1359:warning: symbol value 'm' invalid for FIXED_PHY

.config:1659:warning: symbol value 'm' invalid for ISDN

.config:2765:warning: symbol value 'm' invalid for RTC_INTF_SYSFS

.config:2766:warning: symbol value 'm' invalid for RTC_INTF_PROC

.config:2767:warning: symbol value 'm' invalid for RTC_INTF_DEV

.config:2789:warning: symbol value 'm' invalid for DMA_ENGINE

.config - Linux Kernel v2.6.28 Configuration

────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

  ┌─────────────────────────────────────────── Linux Kernel Configuration ────────────────────────────────────────────┐

  │  Arrow keys navigate the menu.  <Enter> selects submenus --->.  Highlighted letters are hotkeys.  Pressing <Y>    │

  │  includes, <N> excludes, <M> modularizes features.  Press <Esc><Esc> to exit, <?> for Help, </> for Search.       │

  │  Legend: [*] built-in  [ ] excluded  <M> module  < > module capable                                               │

  │                                                                                                                   │

  │ ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │

  │ │                        General setup  --->                                                                    │ │

  │ │                    [*] Enable loadable module support  --->                                                   │ │

  │ │                    -*- Enable the block layer  --->                                                           │ │

  │ │                        Processor type and features  --->                                                      │ │

  │ │                        Power management and ACPI options  --->                                                │ │

  │ │                        Bus options (PCI etc.)  --->                                                           │ │

  │ │                        Executable file formats / Emulations  --->                                             │ │

  │ │                    -*- Networking support  --->                                                               │ │

  │ │                        Device Drivers  --->                                                                   │ │

  │ │                        Firmware Drivers  --->                                                                 │ │

  │ │                        File systems  --->                                                                     │ │

  │ │                        Kernel hacking  --->                                                                   │ │

  │ │                        Security options  --->                                                                 │ │

  │ │                    -*- Cryptographic API  --->                                                                │ │

  │ │                    [*] Virtualization (NEW)  --->                                                             │ │

  │ │                        Library routines  --->                                                                 │ │

  │ │                    ---                                                                                        │ │

  │ │                        Load an Alternate Configuration File                                                   │ │

  │ │                        Save an Alternate Configuration File                                                   │ │

  │ └───────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ │

  ├───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤

  │                                         <Select>    < Exit >    < Help >                                          │

  └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

.config - Linux Kernel v2.6.28 Configuration

────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

  ┌─────────────────────────────────────────── Linux Kernel Configuration ────────────────────────────────────────────┐

  │  Arrow keys navigate the menu.  <Enter> selects submenus --->.  Highlighted letters are hotkeys.  Pressing <Y>    │

  │  includes, <N> excludes, <M> modularizes features.  Press <Esc><Esc> to exit, <?> for Help, </> for Search.       │

  │  Legend: [*] built-in  [ ] excluded  <M> module  < > module capable                                               │

  │                                                                                                                   │

  │ ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │

  │ │                        General setup  --->                                                                    │ │

  │ │                    [*] Enable loadable module support  --->                                                   │ │

  │ │                    -*- Enable the block layer  --->                                                           │ │

  │ │                        Processor type and features  --->                                                      │ │

  │ │                        Power management and ACPI options  --->                                                │ │

  │ │                        Bus options (PCI etc.)  --->                                                           │ │

  │ │                        Executable file formats / Emulations  --->                                             │ │

  │ │                    -*- Networking support  --->                                                               │ │

  │ │                        Device Drivers  --->                                                                   │ │

  │ │                        Firmware Drivers  --->                                                                 │ │

  │ │                        File systems  --->                                                                     │ │

  │ │                        Kernel hacking  --->                                                                   │ │

  │ │                        Security options  --->                                                                 │ │

  │ │                    -*- Cryptographic API  --->                                                                │ │

  │ │                    [*] Virtualization (NEW)  --->                                                             │ │

  │ │                        Library routines  --->                                                                 │ │

  │ │                    ---                                                                                        │ │

  │ │                        Load an Alternate Configuration File                                                   │ │

  │ │                        Save an Alternate Configuration File                                                   │ │

  │ └───────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ │

  ├───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤

  │                                         <Select>    < Exit >    < Help >                                          │

  └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

.config - Linux Kernel v2.6.28 Configuration

────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

  ┌─────────────────────────────────────────────── Networking support ────────────────────────────────────────────────┐

  │  Arrow keys navigate the menu.  <Enter> selects submenus --->.  Highlighted letters are hotkeys.  Pressing <Y>    │

  │  includes, <N> excludes, <M> modularizes features.  Press <Esc><Esc> to exit, <?> for Help, </> for Search.       │

  │  Legend: [*] built-in  [ ] excluded  <M> module  < > module capable                                               │

  │                                                                                                                   │

  │ ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │

  │ │                    --- Networking support                                                                     │ │

  │ │                          Networking options  --->                                                             │ │

  │ │                    [ ]   Amateur Radio support  --->                                                          │ │

  │ │                    < >   CAN bus subsystem support (NEW)  --->                                                │ │

  │ │                    < >   IrDA (infrared) subsystem support  --->                                              │ │

  │ │                    <M>   Bluetooth subsystem support  --->                                                    │ │

  │ │                    < >   RxRPC session sockets (NEW)                                                          │ │

  │ │                    < >   Phonet protocols family (NEW)                                                        │ │

  │ │                    [*]   Wireless (NEW)  --->                                                                 │ │

  │ │                    {M}   RF switch subsystem support  --->                                                    │ │

  │ │                    < >   Plan 9 Resource Sharing Support (9P2000) (Experimental) (NEW)  --->                  │ │

  │ │                                                                                                               │ │

  │ │                                                                                                               │ │

  │ │                                                                                                               │ │

  │ │                                                                                                               │ │

  │ │                                                                                                               │ │

  │ │                                                                                                               │ │

  │ │                                                                                                               │ │

  │ │                                                                                                               │ │

  │ └───────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ │

  ├───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤

  │                                         <Select>    < Exit >    < Help >                                          │

  └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

.config - Linux Kernel v2.6.28 Configuration

────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

┌─────────────────────────────────────────────── Networking options ────────────────────────────────────────────────┐

│  Arrow keys navigate the menu.  <Enter> selects submenus --->.  Highlighted letters are hotkeys.  Pressing <Y>    │

│  includes, <N> excludes, <M> modularizes features.  Press <Esc><Esc> to exit, <?> for Help, </> for Search.       │

│  Legend: [*] built-in  [ ] excluded  <M> module  < > module capable                                               │

│                                                                                                                   │

│ ┌────────────────────↑(-)───────────────────────────────────────────────────────────────────────────────────────┐ │

│ │                    <M>   IP: ESP transformation                                                               │ │

│ │                    <M>   IP: IPComp transformation                                                            │ │

│ │                    <M>   IP: IPsec transport mode                                                             │ │

│ │                    <M>   IP: IPsec tunnel mode                                                                │ │

│ │                    <*>   IP: IPsec BEET mode (NEW)                                                            │ │

│ │                    {*}   Large Receive Offload (ipv4/tcp)                                                     │ │

│ │                    <M>   INET: socket monitoring interface                                                    │ │

│ │                    [*]   TCP: advanced congestion control  --->                                               │ │

│ │                    [ ]   TCP: MD5 Signature Option support (RFC2385) (EXPERIMENTAL) (NEW)                     │ │

│ │                    <M>   The IPv6 protocol  --->                                                              │ │

│ │                    [*]   NetLabel subsystem support                                                           │ │

│ │                    -*- Security Marking                                                                       │ │

│ │                    [*] Network packet filtering framework (Netfilter)  --->                                   │ │

│ │                    <M> The DCCP Protocol (EXPERIMENTAL)  --->                                                 │ │

│ │                    -M- The SCTP Protocol (EXPERIMENTAL)  --->                                                 │ │

│ │                    <M> The TIPC Protocol (EXPERIMENTAL)  --->                                                 │ │

│ │                    <M> Asynchronous Transfer Mode (ATM)                                                       │ │

│ │                    <M>   Classical IP over ATM                                                                │ │

│ │                    [ ]     Do NOT send ICMP if no neighbour                                                   │ │

│ └────────────────────↓(+)───────────────────────────────────────────────────────────────────────────────────────┘ │

├───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤

│                                         <Select>    < Exit >    < Help >                                          │

└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

.config - Linux Kernel v2.6.28 Configuration

────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

┌───────────────────────────────── Network packet filtering framework (Netfilter) ──────────────────────────────────┐

│  Arrow keys navigate the menu.  <Enter> selects submenus --->.  Highlighted letters are hotkeys.  Pressing <Y>    │

│  includes, <N> excludes, <M> modularizes features.  Press <Esc><Esc> to exit, <?> for Help, </> for Search.       │

│  Legend: [*] built-in  [ ] excluded  <M> module  < > module capable                                               │

│                                                                                                                   │

│ ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │

│ │                    --- Network packet filtering framework (Netfilter)                                         │ │

│ │                    [ ]   Network packet filtering debugging                                                   │ │

│ │                    [*]   Advanced netfilter configuration (NEW)                                               │ │

│ │                    [*]     Bridged IP/ARP packets filtering                                                   │ │

│ │                          Core Netfilter Configuration  --->                                                   │ │

│ │                    <M>   IP virtual server support  --->                                                      │ │

│ │                          IP: Netfilter Configuration  --->                                                    │ │

│ │                          IPv6: Netfilter Configuration  --->                                                  │ │

│ │                    <M>   Ethernet Bridge tables (ebtables) support  --->                                      │ │

│ │                                                                                                               │ │

│ │ 

……

──────────────────────────────────────────┘ │

├───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤

│                                         <Select>    < Exit >    < Help >                                          │

└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

.config - Linux Kernel v2.6.28 Configuration

────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

  ┌────────────────────────────────────────── Core Netfilter Configuration ───────────────────────────────────────────┐

  │  Arrow keys navigate the menu.  <Enter> selects submenus --->.  Highlighted letters are hotkeys.  Pressing <Y>    │

  │  includes, <N> excludes, <M> modularizes features.  Press <Esc><Esc> to exit, <?> for Help, </> for Search.       │

  │  Legend: [*] built-in  [ ] excluded  <M> module  < > module capable                                               │

  │                                                                                                                   │

  │ ┌────────────────────↑(-)───────────────────────────────────────────────────────────────────────────────────────┐ │

  │ │                    <M>   "multiport" Multiple port match support                                              │ │

  │ │                    <M>   "owner" match support                                                                │ │

  │ │                    <M>   IPsec "policy" match support                                                         │ │

  │ │                    <M>   "physdev" match support                                                              │ │

  │ │                    <M>   "pkttype" packet type match support                                                  │ │

  │ │                    <M>   "quota" match support                                                                │ │

  │ │                    <M>   "rateest" match support                                                              │ │

  │ │                    <M>   "realm" match support                                                                │ │

  │ │                    <M>   "recent" match support                                                               │ │

  │ │                    [*]     Enable obsolete /proc/net/ipt_recent                                               │ │

  │ │                    <M>   "sctp" protocol match support (EXPERIMENTAL)                                         │ │

  │ │                    <M>   "state" match support                                                                │ │

  │ │                    <M>   "layer7" match support                                                               │ │

  │ │                    [*]     Layer 7 debugging output                                                           │ │

  │ │                    <M>   "statistic" match support                                                            │ │

  │ │                    <M>   "string" match support                                                               │ │

  │ │                    <M>   "tcpmss" match support                                                               │ │

  │ │                    <M>   "time" match support                                                                 │ │

  │ │                    <M>   "u32" match support                                                                  │ │

  │ └───────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ │

  ├───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤

  │                                         <Select>    < Exit >    < Help >                                          │

  └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

                               ┌──────────────────────────────────────────────────────────┐

                               │  Do you wish to save your new kernel configuration?      │

                               │  <ESC><ESC> to continue.                                 │

                               ├──────────────────────────────────────────────────────────┤

                               │                   < Yes >      <  No  >                  │

                               └──────────────────────────────────────────────────────────┘

#

# configuration written to .config

#

*** End of Linux kernel configuration.

*** Execute 'make' to build the kernel or try 'make help'.

[root@localhost linux]# make

[root@localhost linux]# make modules_install

[root@localhost linux]# make install

[root@localhost linux]# vim /boot/grub/grub.conf #更改啟動項

  # grub.conf generated by anaconda

  #

  # Note that you do not have to rerun grub after making changes to this file

  # NOTICE:  You have a /boot partition.  This means that

  #          all kernel and initrd paths are relative to /boot/, eg.

  #          root (hd0,0)

  #          kernel /vmlinuz-version ro root=/dev/sda2

  #          initrd /initrd-version.img

  #boot=/dev/sda

  default=1 #修改為0

  timeout=5

  splashimage=(hd0,0)/grub/splash.xpm.gz

  hiddenmenu

  title CentOS (2.6.28l7)

          root (hd0,0)

          kernel /vmlinuz-2.6.28l7 ro root=LABEL=/

          initrd /initrd-2.6.28l7.img

  title CentOS (2.6.18-194.el5)

          root (hd0,0)

          kernel /vmlinuz-2.6.18-194.el5 ro root=LABEL=/

          initrd /initrd-2.6.18-194.el5.img

[root@localhost linux]# reboot #重新啟動

[root@localhost ~]# uname  -r #查看編譯好的內核

2.6.28l7

6.編譯安裝iptables並支持Layer 7

1

2

3

4

5

6

7

8

9

10

11

12

[root@localhost ~]# tar xf iptables-1.4.7.tar.bz2 -C /usr/src

[root@localhost ~]# cd /usr/src/linux

[root@localhost linux]# cp /usr/src/netfilter-layer7-v2.22/iptables-1.4.3forward-for-kernel-2.6.20forward/* extensions/

[root@localhost linux]#./configure --prefix=/usr --with-ksource=/usr/src/linux

[root@localhost linux]# make && make install

[root@localhost linux]# iptables –V

[root@localhost ~]# cp iptables-config /etc/sysconfig/ #復制配置文件

[root@localhost ~]# cp iptables /etc/init.d/ #復制sysV腳本

[root@localhost ~]# chmod +x /etc/init.d/iptables

[root@localhost ~]# which iptables

/usr/sbin/iptables

[root@localhost ~]#vim /etc/init.d/iptables #把所有/sbin/$IPTABLES替換為/usr/sbin/$IPTABLES   在vim命令模式下:%s@/sbin/$IPTABLES@/usr/sbin/$IPTABLES@g  然后保存退出

修改后的配置

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305

306

307

#!/bin/sh

#

# iptables  Start iptables firewall

#

# chkconfig: 2345 08 92

# description:  Starts, stops and saves iptables firewall

#

# config: /etc/sysconfig/iptables

# config: /etc/sysconfig/iptables-config

# Source function library.

. /etc/init.d/functions

IPTABLES=iptables

IPTABLES_DATA=/etc/sysconfig/$IPTABLES

IPTABLES_CONFIG=/etc/sysconfig/${IPTABLES}-config

IPV=${IPTABLES%tables} # ip for ipv4 | ip6 for ipv6

PROC_IPTABLES_NAMES=/proc/net/${IPV}_tables_names

VAR_SUBSYS_IPTABLES=/var/lock/subsys/$IPTABLES

if [ ! -x /usr/sbin/$IPTABLES ]; then

    echo -n $"/usr/sbin/$IPTABLES does not exist."; warning; echo

    exit 0

fi

if lsmod 2>/dev/null | grep -q ipchains ; then

    echo -n $"ipchains and $IPTABLES can not be used together."; warning; echo

    exit 1

fi

# Old or new modutils

/sbin/modprobe --version 2>&1 | grep -q module-init-tools \

    && NEW_MODUTILS=1 \

    || NEW_MODUTILS=0

# Default firewall configuration:

IPTABLES_MODULES=""

IPTABLES_MODULES_UNLOAD="yes"

IPTABLES_SAVE_ON_STOP="no"

IPTABLES_SAVE_ON_RESTART="no"

IPTABLES_SAVE_COUNTER="no"

IPTABLES_STATUS_NUMERIC="yes"

IPTABLES_SYSCTL_LOAD_LIST=""

# Load firewall configuration.

[ -f "$IPTABLES_CONFIG" ] && . "$IPTABLES_CONFIG"

rmmod_r() {

    # Unload module with all referring modules.

    # At first all referring modules will be unloaded, then the module itself.

    local mod=$1

    local ret=0

    local ref=

    # Get referring modules.

    # New modutils have another output format.

    [ $NEW_MODUTILS = 1 ] \

    && ref=`lsmod | awk "/^${mod}/ { print \\\$4; }" | tr ',' ' '` \

    || ref=`lsmod | grep ^${mod} | cut -d "[" -s -f 2 | cut -d "]" -s -f 1`

    # recursive call for all referring modules

    for i in $ref; do

    rmmod_r $i

    let ret+=$?;

    done

    # Unload module.

    # The extra test is for 2.6: The module might have autocleaned,

    # after all referring modules are unloaded.

    if grep -q "^${mod}" /proc/modules ; then

    modprobe -r $mod > /dev/null 2>&1

    let ret+=$?;

    fi

    return $ret

}

flush_n_delete() {

    # Flush firewall rules and delete chains.

    [ -e "$PROC_IPTABLES_NAMES" ] || return 1

    # Check if firewall is configured (has tables)

tables=`cat $PROC_IPTABLES_NAMES 2>/dev/null`

    [ -z "$tables" ] && return 1

    echo -n $"Flushing firewall rules: "

ret=0

    # For all tables

    for i in $tables; do

        # Flush firewall rules.

    $IPTABLES -t $i -F;

    let ret+=$?;

        # Delete firewall chains.

    $IPTABLES -t $i -X;

    let ret+=$?;

    # Set counter to zero.

    $IPTABLES -t $i -Z;

    let ret+=$?;

    done

    [ $ret -eq 0 ] && success || failure

    echo

    return $ret

}

set_policy() {

    # Set policy for configured tables.

policy=$1

    # Check if iptable module is loaded

    [ ! -e "$PROC_IPTABLES_NAMES" ] && return 1

    # Check if firewall is configured (has tables)

tables=`cat $PROC_IPTABLES_NAMES 2>/dev/null`

    [ -z "$tables" ] && return 1

    echo -n $"Setting chains to policy $policy: "

ret=0

    for i in $tables; do

    echo -n "$i "

    case "$i" in

        raw)

        $IPTABLES -t raw -P PREROUTING $policy \

            && $IPTABLES -t raw -P OUTPUT $policy \

            || let ret+=1

        ;;

        filter)

                $IPTABLES -t filter -P INPUT $policy \

            && $IPTABLES -t filter -P OUTPUT $policy \

            && $IPTABLES -t filter -P FORWARD $policy \

            || let ret+=1

        ;;

        nat)

        $IPTABLES -t nat -P PREROUTING $policy \

            && $IPTABLES -t nat -P POSTROUTING $policy \

            && $IPTABLES -t nat -P OUTPUT $policy \

            || let ret+=1

        ;;

        mangle)

            $IPTABLES -t mangle -P PREROUTING $policy \

            && $IPTABLES -t mangle -P POSTROUTING $policy \

            && $IPTABLES -t mangle -P INPUT $policy \

            && $IPTABLES -t mangle -P OUTPUT $policy \

            && $IPTABLES -t mangle -P FORWARD $policy \

            || let ret+=1

        ;;

        *)

            let ret+=1

        ;;

        esac

    done

    [ $ret -eq 0 ] && success || failure

    echo

    return $ret

}

load_sysctl() {

    # load matched sysctl values

    if [ -n "$IPTABLES_SYSCTL_LOAD_LIST" ]; then

        echo -n $"Loading sysctl settings: "

ret=0

        for item in $IPTABLES_SYSCTL_LOAD_LIST; do

            fgrep $item /etc/sysctl.conf | sysctl -p - >/dev/null

            let ret+=$?;

        done

        [ $ret -eq 0 ] && success || failure

        echo

    fi

    return $ret

}

start() {

    # Do not start if there is no config file.

    [ -f "$IPTABLES_DATA" ] || return 1

    echo -n $"Applying $IPTABLES firewall rules: "

OPT=

    [ "x$IPTABLES_SAVE_COUNTER" = "xyes" ] && OPT="-c"

    $IPTABLES-restore $OPT $IPTABLES_DATA

    if [ $? -eq 0 ]; then

    success; echo

    else

    failure; echo; return 1

    fi

    # Load additional modules (helpers)

    if [ -n "$IPTABLES_MODULES" ]; then

    echo -n $"Loading additional $IPTABLES modules: "

ret=0

    for mod in $IPTABLES_MODULES; do

        echo -n "$mod "

        modprobe $mod > /dev/null 2>&1

        let ret+=$?;

    done

    [ $ret -eq 0 ] && success || failure

    echo

    fi

    # Load sysctl settings

    load_sysctl

    touch $VAR_SUBSYS_IPTABLES

    return $ret

}

stop() {

    # Do not stop if iptables module is not loaded.

    [ -e "$PROC_IPTABLES_NAMES" ] || return 1

    flush_n_delete

    set_policy ACCEPT

    if [ "x$IPTABLES_MODULES_UNLOAD" = "xyes" ]; then

    echo -n $"Unloading $IPTABLES modules: "

ret=0

    rmmod_r ${IPV}_tables

    let ret+=$?;

    rmmod_r ${IPV}_conntrack

    let ret+=$?;

    [ $ret -eq 0 ] && success || failure

    echo

    fi

    rm -f $VAR_SUBSYS_IPTABLES

    return $ret

}

save() {

    # Check if iptable module is loaded

    [ ! -e "$PROC_IPTABLES_NAMES" ] && return 1

    # Check if firewall is configured (has tables)

tables=`cat $PROC_IPTABLES_NAMES 2>/dev/null`

    [ -z "$tables" ] && return 1

    echo -n $"Saving firewall rules to $IPTABLES_DATA: "

OPT=

    [ "x$IPTABLES_SAVE_COUNTER" = "xyes" ] && OPT="-c"

ret=0

TMP_FILE=`/bin/mktemp -q /tmp/$IPTABLES.XXXXXX` \

    && chmod 600 "$TMP_FILE" \

    && $IPTABLES-save $OPT > $TMP_FILE 2>/dev/null \

    && size=`stat -c '%s' $TMP_FILE` && [ $size -gt 0 ] \

    || ret=1

    if [ $ret -eq 0 ]; then

    if [ -e $IPTABLES_DATA ]; then

        cp -f $IPTABLES_DATA $IPTABLES_DATA.save \

        && chmod 600 $IPTABLES_DATA.save \

        || ret=1

    fi

    if [ $ret -eq 0 ]; then

        cp -f $TMP_FILE $IPTABLES_DATA \

        && chmod 600 $IPTABLES_DATA \

            || ret=1

    fi

    fi

    [ $ret -eq 0 ] && success || failure

    echo

    rm -f $TMP_FILE

    return $ret

}

status() {

tables=`cat $PROC_IPTABLES_NAMES 2>/dev/null`

    # Do not print status if lockfile is missing and iptables modules are not

    # loaded.

    # Check if iptable module is loaded

    if [ ! -f "$VAR_SUBSYS_IPTABLES" -a -z "$tables" ]; then

    echo $"Firewall is stopped."

    return 1

    fi

    # Check if firewall is configured (has tables)

    if [ ! -e "$PROC_IPTABLES_NAMES" ]; then

    echo $"Firewall is not configured. "

    return 1

    fi

    if [ -z "$tables" ]; then

    echo $"Firewall is not configured. "

    return 1

    fi

NUM=

    [ "x$IPTABLES_STATUS_NUMERIC" = "xyes" ] && NUM="-n"

VERBOSE=

    [ "x$IPTABLES_STATUS_VERBOSE" = "xyes" ] && VERBOSE="--verbose"

COUNT=

    [ "x$IPTABLES_STATUS_LINENUMBERS" = "xyes" ] && COUNT="--line-numbers"

    for table in $tables; do

    echo $"Table: $table"

    $IPTABLES -t $table --list $NUM $VERBOSE $COUNT && echo

    done

    return 0

}

reload() {

IPTABLES_MODULES_UNLOAD="no"

    restart

}

restart() {

    [ "x$IPTABLES_SAVE_ON_RESTART" = "xyes" ] && save

    stop

    start

}

case "$1" in

    start)

    stop

    start

RETVAL=$?

    ;;

    stop)

    [ "x$IPTABLES_SAVE_ON_STOP" = "xyes" ] && save

    stop

RETVAL=$?

    ;;

    reload)

    [ -e "$VAR_SUBSYS_IPTABLES" ] && reload

    ;;

    restart)

    restart

RETVAL=$?

    ;;

    condrestart)

    [ -e "$VAR_SUBSYS_IPTABLES" ] && restart

    ;;

    status)

    status

RETVAL=$?

    ;;

    panic)

    flush_n_delete

    set_policy DROP

RETVAL=$?

        ;;

    save)

    save

RETVAL=$?

    ;;

    *)

    echo $"Usage: $0 {start|stop|reload|restart|condrestart|status|panic|save}"

    exit 1

    ;;

esac

exit $RETVAL

7.安裝Layer 7協議

1

2

3

4

5

6

[root@localhost src]# tar xf l7-protocols-2009-05-28.tar.gz -C /usr/src

[root@localhost src]# cd /usr/src/l7-protocols-2009-05-28/

[root@localhost l7-protocols-2009-05-28]# make install

mkdir -p /etc/l7-protocols

cp -R * /etc/l7-protocols

[root@localhost l7-protocols-2009-05-28]#

8.測試

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

[root@localhost l7-protocols-2009-05-28]# iptables -m layer7 –help #查看幫助信息

iptables v1.4.7

Usage: iptables -[AD] chain rule-specification [options]

       iptables -I chain [rulenum] rule-specification [options]

       iptables -R chain rulenum rule-specification [options]

       iptables -D chain rulenum [options]

       iptables -[LS] [chain [rulenum]] [options]

       iptables -[FZ] [chain] [options]

       iptables -[NX] chain

       iptables -E old-chain-name new-chain-name

       iptables -P chain target [options]

       iptables -h (print this help information)

Commands:

Either long or short options are allowed.

  --append  -A chain            Append to chain

  --delete  -D chain            Delete matching rule from chain

  --delete  -D chain rulenum

                                Delete rule rulenum (1 = first) from chain

  --insert  -I chain [rulenum]

                                Insert in chain as rulenum (default 1=first)

  --replace -R chain rulenum

                                Replace rule rulenum (1 = first) in chain

  --list    -L [chain [rulenum]]

                                List the rules in a chain or all chains

  --list-rules -S [chain [rulenum]]

                                Print the rules in a chain or all chains

  --flush   -F [chain]          Delete all rules in  chain or all chains

  --zero    -Z [chain [rulenum]]

                                Zero counters in chain or all chains

  --new     -N chain            Create a new user-defined chain

  --delete-chain

            -X [chain]          Delete a user-defined chain

  --policy  -P chain target

                                Change policy on chain to target

  --rename-chain

            -E old-chain new-chain

                                Change chain name, (moving any references)

Options:

[!] --proto     -p proto        protocol: by number or name, eg. `tcp'

[!] --source    -s address[/mask][...]

                                source specification

[!] --destination -d address[/mask][...]

                                destination specification

[!] --in-interface -i input name[+]

                                network interface name ([+] for wildcard)

--jump -j target

                                target for rule (may load target extension)

  --goto      -g chain

                              jump to chain with no return

  --match       -m match

                                extended match (may load extension)

  --numeric     -n              numeric output of addresses and ports

[!] --out-interface -o output name[+]

                                network interface name ([+] for wildcard)

  --table       -t table        table to manipulate (default: `filter')

  --verbose     -v              verbose mode

  --line-numbers                print line numbers when listing

  --exact       -x              expand numbers (display exact values)

[!] --fragment  -f              match second or further fragments only

  --modprobe=<command>          try to insert modules using this command

  --set-counters PKTS BYTES     set the counter during insert/append

[!] --version   -V              print package version.

layer7 match options:

    --l7dir <directory> : Look for patterns here instead of /etc/l7-protocols/

                          (--l7dir must be specified before --l7proto if used)

[!] --l7proto <name>: Match named protocol using /etc/l7-protocols/.../name.pat

[root@localhost l7-protocols-2009-05-28]#

9.重新啟動iptables

1

[root@localhost ~]# service iptables restart

10.封qq,酷狗,迅雷等

1

2

3

4

5

6

封QQ

[root@localhost ~]# iptables -A FORWARD -s 192.168.10.0/24 -m layer7 --l7proto qq -j DROP

封酷狗

[root@localhost ~]# iptables -A FORWARD -s 192.168.10.0/24 -m layer7 --l7proto kugoo -j DROP

封迅雷

[root@localhost ~]# iptables -A FORWARD -s 192.168.10.0/24 -m layer7 --l7proto xunlei -j DROP

11.查看支持的協議

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

[root@localhost ~]# ls /etc/l7-protocols/protocols/

100bao.pat                doom3.pat                 jabber.pat            radmin.pat        teamfortress2.pat

aim.pat                   edonkey.pat               kugoo.pat             rdp.pat           teamspeak.pat

aimwebcontent.pat         fasttrack.pat             live365.pat           replaytv-ivs.pat  telnet.pat

applejuice.pat            finger.pat                liveforspeed.pat      rlogin.pat        tesla.pat

ares.pat                  freenet.pat               lpd.pat               rtp.pat           tftp.pat

armagetron.pat            ftp.pat                   mohaa.pat             rtsp.pat          thecircle.pat

battlefield1942.pat       gkrellm.pat               msn-filetransfer.pat  runesofmagic.pat  tonghuashun.pat

battlefield2142.pat       gnucleuslan.pat           msnmessenger.pat      shoutcast.pat     tor.pat

battlefield2.pat          gnutella.pat              mute.pat              sip.pat           tsp.pat

bgp.pat                   goboogy.pat               napster.pat           skypeout.pat      unknown.pat

biff.pat                  gopher.pat                nbns.pat              skypetoskype.pat  unset.pat

bittorrent.pat            guildwars.pat             ncp.pat               smb.pat           uucp.pat

chikka.pat                h323.pat                  netbios.pat           smtp.pat          validcertssl.pat

cimd.pat                  halflife2-deathmatch.pat  nntp.pat              snmp.pat          ventrilo.pat

ciscovpn.pat              hddtemp.pat               ntp.pat               socks.pat         vnc.pat

citrix.pat                hotline.pat               openft.pat            soribada.pat      whois.pat

counterstrike-source.pat  http.pat                  pcanywhere.pat        soulseek.pat      worldofwarcraft.pat

cvs.pat                   http-rtsp.pat             poco.pat              ssdp.pat          x11.pat

dayofdefeat-source.pat    ident.pat                 pop3.pat              ssh.pat           xboxlive.pat

dazhihui.pat              imap.pat                  pplive.pat            ssl.pat           xunlei.pat

dhcp.pat                  imesh.pat                 qq.pat                stun.pat          yahoo.pat

directconnect.pat         ipp.pat                   quake1.pat            subspace.pat      zmaap.pat

dns.pat                   irc.pat                   quake-halflife.pat    subversion.pat

[root@localhost ~]#

1

2

[root@localhost ~]#ls /etc/l7-protocols/protocols/ | wc -l

114

 

 

 

常見查詢語法

查詢INPUT的所有蓮規則並加入序號

[root@cPLiso117496 ~]#iptables -L INPUT --line-numbers

禁止ping操作

[root@cPLiso117496 ~]# iptables –I INPUT -d 0.0.0.0/0 -p icmp --icmp-type 8 -j DROP

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM