天天看點

Iptables+l7+squid的應用

 Iptables+l7+squid的應用

    Iptables是網絡層防火牆 ,主要用于網絡層、傳輸層的過濾,對應用層的過濾較少,但是支援的應用比較多,如NAT轉換

    Layer7  能使iptables基于應用層過濾

    Squid 是一個應用層代理伺服器,不僅可以過濾網絡層、還可以過濾應用層,就是支援的應用比較少。

    是以iptables+l7+squid不愧是一個完美組合。下面就通過一個小案例來說明一下

     一個公司有兩個部門和一個經理部,要求對他們在上班時間(周一到周六 08:00--20:00)做如下的上網限制:

技術部:可以使用ftp來上傳和下載下傳資料 ,不允許使用QQ聊天,不允許浏覽網頁,不允許使用迅雷下載下傳東西。

市場部:可以浏覽網頁,但不允許通路一些非法站點,如sina ,也不允許使用迅雷,和QQ聊天,不允許使用pplive,不允許浏覽圖檔,每個使用者的最大連接配接數為5

經理辦  http qq 都可以使用

下班後,沒用任何限制。

公司還要釋出自己的www伺服器

Linux防火牆的eth0網卡連接配接内網,eth1網卡連接配接外網,eth2網卡連接配接DMZ

Eth0  192.168.101.166

Eth1  192.168.2.253

Eth2  192.168.3.253

技術部ip範圍  192.168.2.1----192.168.2.100

市場部ip範圍  192.168.2.101-----192.168.2.200

經理辦ip範圍  192.168.2.201---192.168.2.210

www伺服器ip位址為 192.168.3.66

拓撲圖就不畫了

分析:

ftp的控制我們使用iptables ,對于QQ的聊天、迅雷下載下傳控制我們用L7控制,對于網頁浏覽、禁止浏覽非法站點,圖檔資訊我們用squid控制。

1、首先開啟資料包轉發功能

vim /etc/sysctl.conf  

net.ipv4.ip_forward = 1  --修改為1即開啟轉發

sysctl -p              --立即生效

2、設定預設拒絕所用

iptables -P INPUT DROP

iptables -P OUTPUT DROP

iptables -P FORWARD DROP

3、配置SNAT,使内網使用者可以上網

iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth1 -j MASQUERADE 

4、控制

(1) 允許ftp

iptables -t filter -A FORWARD -m iprange --src-range 192.168.2.1-192.168.2.100 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport 21 -j ACCEPT

iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT

--允許轉發的通過

(2)禁用QQ 、迅雷(不寫規則也是可以的,預設是拒絕的,加強一下)

iptables -t filter -A FORWARD -m iprange --src-range 192.168.2.1-192.168.2.200 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m layer7 --l7proto qq  -j DROP

iptables -t filter -A FORWARD -m iprange --src-range 192.168.2.1-192.168.2.200 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m layer7 --l7proto xunlei  -j DROP

(3)squid的控制

Vim  /etc/squid/squid.conf  修改和添加如下幾行如下:

919   http_port 3128  transparent

2994  visible_hostname 192.168.2.253

4134  dns_nameservers 222.88.88.88 222.85.85.85

重新開機squid,以上是squid的基本配置,下面的是控制配置

(4) iptables控制

iptables -t nat -A PREROUTING  -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri  -m connlimit --connlimit-above 5  --connlimit-mask 32 -p tcp --dport 80 -j REDIRECT --to-port 3128 

--将80端口重定上到3128,來實作透明代理

iptables -t filter -A OUTPUT -m state  --state EASTABLISHED -j ACCEPT

iptables -t nat -A POSTROUTING -m iprange --src-range 192.168.2.101-192.168.2.210 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p udp --dport 53 -j MASQUERADE --對DNS解析進行NAT(這一條規則好像沒用流量比對)

iptables -t filter -A FORWARD -m iprange --src-range 192.168.2.101-192.168.2.210 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p udp --dport 53 -j ACCEPT  --

iptables -t filter -A OUTPUT -p tcp --dport 80 -s 192.168.101.166 -j ACCEPT

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

iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT  --允許squid代理的查詢

iptables -t filter -A FORWARD -m iprange --src-range 192.168.2.101-192.168.2.200 -m layer7 --l7proto pplive -j DROP

市場部的squid控制

<a href="http://blog.51cto.com/attachment/201212/195337193.png" target="_blank"></a>

重新開機squid

<a href="http://blog.51cto.com/attachment/201212/195351766.png" target="_blank"></a>

iptables -t filter -R FORWARD 8  -m iprange --src-range 192.168.2.201-192.168.2.210 -o eth1 -j ACCEPT

伺服器釋出

iptables -t nat -A POSTROUTING -s 192.168.3.66/32 -o eth1 -j SNAT --to 192.168.101.166

(5)下班後無限制

iptables -t filter -A  FORWARD   -m iprange --src-range 192.168.2.201-192.168.2.210 -o eth1 -j ACCEPT

(星期六、日不允許的是。)功能以實作!!!!

本文轉自 abc16810 51CTO部落格,原文連結:http://blog.51cto.com/abc16810/1097184

繼續閱讀