天天看點

Iptables+L7+squid實作完善的軟體防火牆

Iptables+L7+squid實作完善的軟體防火牆

Iptables是用linux作業系統作為一個軟體防火牆做到宏觀上的保護,資料包要經過防火牆首先來到tcp/ip協定棧,防火牆通過核心的一些機制來做到對資料的過濾,核心裡有這樣五個函數INPUT、OUTPUT、FORWARD、POSTROUTING、PREROUTING,核心沒辦法直接修改我們通過使用iptables使用者空間工具來對這五個函數下發規則,進而達到對流量的過濾,五個函數的架構稱為netfilter,根據函數的功能可以分為下面三類:

nat:postrouting路由判斷之後也就是snat,prerouting路由判斷之前也就是dnat

filter:實作流量過濾,input流量目标位防火牆,output流量從防火牆出,forward流量經過防火牆

mangle:TOS、QOS

下面是五個函數對流量過濾的方式:

Input過濾進入防火牆的流量

Iptables+L7+squid實作完善的軟體防火牆

OUTput過濾來自防火牆的流量

Iptables+L7+squid實作完善的軟體防火牆

Forward過濾從防火牆經過的流量

Iptables+L7+squid實作完善的軟體防火牆

Postrouting過濾從某接口出去的流量

Iptables+L7+squid實作完善的軟體防火牆

Prerouting過濾從某接口進去的流量

Iptables+L7+squid實作完善的軟體防火牆

為增加iptables防火牆(網絡層過濾)的功能可以增加L7(七層協定子產品化)更新檔來加強對流量的過濾,另外增加squid(應用層過濾)可以使防火牆更加靈活,這樣結合起來可以使防火牆更加完善

案例:

Iptables+L7+squid實作完善的軟體防火牆

要求:

公司有三個部門:

工程部門192.168.20.10—192.168.20.20

軟體部門192.168.20.21-192.168.20.30

經理辦192.168.20.31-192.168.20.40

上班時間(周一---周五 08:20:00)

工程部門:上班時間隻能通路192.168.102.10的ftp,不允許登入qq不允許上網,下班後無限制。

軟體部門:通過squid可以上網,但不允許通路非法站點sina ,連接配接數最多3個,不允許看圖檔,下班後無限制。

經理辦公室:可以上網可以登入qq,下班後無限制

dmz區域:開啟遠端控制用于外部人員控制通路。

配置步驟:

為iptables增加layer7更新檔,實作應用層過濾

重新編譯核心

1、合并kernel+layer7更新檔

tar jxvf linux-2.6.25.19.tar.gz2 -C /usr/src/

tar zxvf netfilter-layer7-v2.20.tar.gz -C /usr/src/

cd /usr/src/linux-2.6.25.19/

patch -p1 < /usr/src/netfilter-layer7-v2.20/kernel-2.6.25-layer7-2.20.patch

2、配置新核心

cp /boot/config-2.6.18-8.el5 .config//沿用舊的核心配置

make menuconfig

//配置核心時,在“Networking ---> Networking Options ---> Network Packet filtering framework (Netfilter) ”處主要注意兩個地方:---> Core Netfilter Configuration将“Netfilter connection tracking suport (NEW)”選擇編譯為子產品(M),需選取此項才能看到layer7支援的配置。

//将layer7、string、state、time、IPsec、iprange、connlimit……等編譯成子產品,根據需要看着辦。---> IP: Netfilter Configuration将“IPv4 connection tracking support (require for NAT)”編譯成子產品。将“Full NAT”下的“MASQUERADE target support”和“REDIRECT target support”編譯成子產品。

3、編譯及安裝子產品、新核心

make && make modules_install && make install

編譯安裝成後後,重新開機選擇使用新的核心(2.6.25.19)引導系統

重新編譯iptables

1、解除安裝現有iptables

rpm -e iptables iptstat --nodeps

2、合并iptables+layer7更新檔

tar jxvf iptables-1.4.2.tar.bz2 -C /usr/src/

cd /usr/src/netfilter-layer7-v2.20/iptables-1.4.1.1-for-kernel-2.6.20forward/

cp libxt_layer7.c libxt_layer7.man /usr/src/iptables-1.4.2/extensions/

3、編譯安裝

cd /usr/src/iptables-1.4.2/

./configure --prefix=/ --with-ksource=/usr/src/linux-2.6.25.19

make && make install

4、安裝l7-protocols模式包

tar zxvf l7-protocols-2008-10-04.tar.gz -C /etc/

mv /etc/l7-protocols-2008-10-04 /etc/l7-protocols

接下來去配置防火牆:

安裝squid

[root@localhost Server]# rpm -ivh squid-2.6.STABLE21-3.el5.i386.rpm

檢視規則

[root@localhost ~]# iptables -L

Chain INPUT (policy ACCEPT)

targetprot opt sourcedestination

Chain FORWARD (policy ACCEPT)

Chain OUTPUT (policy ACCEPT)

保證自己能夠正常連接配接到防火牆

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

[root@localhost ~]# iptables -t filter -A OUTPUT -d 192.168.20.129 -p tcp --sport 22 -j ACCEPT

拒絕所有過防火牆的流量

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

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

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

允許内網使用者流量通過POSTROUTING從eth2網卡出去

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

允許工程部的人員在上班時間能夠通路ftp

[root@localhost ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.20.10-192.168.20.20 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport 21 -j ACCEPT

接收進入内網的所有流量

[root@localhost ~]# iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

隻允許工程部人員在上班時間通路192.168.102.10的ftp

[root@localhost ~]# iptables -t filter -R FORWARD 1 -m iprange --src-range 192.168.20.10-192.168.20.20 -m time --timestart 08:00 --timestop 20:00 -d 192.168.102.10 -o eth2 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport 21 -j ACCEPT

驗證

[root@localhost ~]# date

Thu May 16 10:00:04 CST 2013

Iptables+L7+squid實作完善的軟體防火牆

不允許工程部人員在上班時間登入qq

[root@localhost ~]# iptables -t filter -A FORWARD-m iprange --src-range 192.168.20.10-192.168.20.20 -m time --timestart 08:00 --timestop 20:00-o eth2 --weekdays Mon,Tue,Wed,Thu,Fri -m layer7 --l7proto qq-j DROP

Thu May 16 10:06:47 CST 2013

Iptables+L7+squid實作完善的軟體防火牆
Iptables+L7+squid實作完善的軟體防火牆

下班時間無限制

[root@localhost ~]# iptables -t filter -A FORWARD -s 192.168.20.0/24 -m time --timestart 20:01 --timestop 07:59 -o eth2 -j ACCEPT

[root@localhost ~]# date -s 21:00:00

Thu May 16 21:00:00 CST 2013

Iptables+L7+squid實作完善的軟體防火牆
Iptables+L7+squid實作完善的軟體防火牆

軟體部通路外網時使用squid代理

[root@localhost ~]# iptables -t nat -A PREROUTING -m iprange --src-range 192.168.20.21-192.168.20.30 -p tcp --dport 80 -j REDIRECT --to-port 3128

編輯squid配置檔案

Iptables+L7+squid實作完善的軟體防火牆
Iptables+L7+squid實作完善的軟體防火牆
Iptables+L7+squid實作完善的軟體防火牆

允許流量通過squid端口進入防火牆檢視緩存

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

[root@localhost ~]# iptables -t filter -A INPUT -m state --state ESTABLISHED -j ACCEPT

允許squid使用自己的位址去通路外部網絡

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

[root@localhost ~]# iptables -t filter -A OUTPUT -m state --state ESTABLISHED -j ACCEPT

允許軟體部和經理辦通過eth2的流量能夠使用外部dns

[root@localhost ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.20.21-192.168.20.40 -p udp --dport 53 -o eth2 -j ACCEPT

[root@localhost ~]# vim /etc/resolv.conf 

Iptables+L7+squid實作完善的軟體防火牆

[root@localhost ~]# vim /etc/squid/squid.conf

Iptables+L7+squid實作完善的軟體防火牆

[root@localhost ~]# iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT

Iptables+L7+squid實作完善的軟體防火牆
Iptables+L7+squid實作完善的軟體防火牆
Iptables+L7+squid實作完善的軟體防火牆
Iptables+L7+squid實作完善的軟體防火牆
Iptables+L7+squid實作完善的軟體防火牆
Iptables+L7+squid實作完善的軟體防火牆
Iptables+L7+squid實作完善的軟體防火牆
Iptables+L7+squid實作完善的軟體防火牆

經理辦上班時間不受限制

[root@localhost ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.20.31-192.168.20.40 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport 80 -o eth2 -j ACCEPT

DMZ

允許來自eth2端口的通路能夠通路到dmz區域的192.168.3.200的3389端口

[root@localhost ~]# iptables -t nat -A PREROUTING -i eth2 -d 192.168.102.200 -p tcp --dport 3389 -j DNAT --to 192.168.3.200

[root@localhost ~]# iptables -t filter -A FORWARD -d 192.168.3.200 -p tcp --dport 3389 -j ACCEPT

Iptables+L7+squid實作完善的軟體防火牆

繼續閱讀