配置squid+iptables透明代理+上網管控的公司網關

下載源代碼並解壓



Squid Cache: Version 3.0.STABLE26


cd /usr/src

wget -c http://www.squid-cache.org/Versi ... 3.0.STABLE26.tar.gz

tar -zxvf squid-3.0.STABLE26.tar.gz



3.安裝Squid Proxy Server


cd /usr/src/


./configure --prefix=/usr/local/squid/ --sysconfdir=/etc/squid/ --bindir=/usr/bin/ --sbindir=/usr/sbin/ --enable-gnuregex --enable-async-io=240 --enable-icmp --enable-snmp --enable-err-languages="Simplify_Chinese" --enable-underscore --enable-linux-netfilter --enable-arp-acl --enable-default-err-language="Simplify_Chinese"  --enable-linux-tproxy --enable-delay-pools   --with-maxfd=65535


make && make install


4.設置squid.conf


cd


先備份  cp /etc/squid/squid.conf /etc/squid/squid.conf.bak


vi /etc/squid/squid.conf  


http_port IP:端口設置squid監聽的IP地址和端口

http_port 192.168.1.120:3128


cache_mem    64MB  

指定使用多少物理內存作爲高速緩存.如果這臺服務器僅用於共享上網,沒有其他服務,

則可加大物理內存的1/2,但如果還有其他服務則cache_mem的大小不應超過物理內存

的1/3,否則會影響服務器的總體性能.


cache_dir ufs /var/spool/squid 4096 16 256

指定硬盤緩衝區的大小,其中ufs指的是緩衝的存儲類型,一般爲ufs,/var/spool/squid指硬盤緩衝存放的目錄,4096代表緩存空間最大爲4096M,16代表squid可以在硬盤緩衝存放的目錄下建立的第一級子目錄的數目,缺省值爲16.

最後的256是可以建立第二級子目錄的數目,缺省值256.


maximum_object_size   最大/最小單文件大小


maximum_object_size_in_memory


內存中最大/最小單文件大小


error_directory        錯誤文檔目錄


dns_nameservers IP     爲了使Squid能解析域名,必須告訴squid有效DNS服務器..


cache_access_log    定義了訪問記錄日誌文件的路徑,該日誌記錄了用戶訪問Internet的詳細信息,

通過日誌文件可以查看每臺客戶機上網的記錄...所以大家不要幹壞事的...


cache_log    設置記錄緩存的相關信息日誌文件的路徑...


cache_store_log         定義了記錄網頁在緩存中調用情況日誌文件的路徑...


visible_hostname    定義了運行squid的主機名稱,當訪問發生錯誤時,該選項的值會顯示在錯誤提示網頁

中.建議輸入主機的IP地址.


cache_mgr定義設置squid管理員的d E-mail地址,當訪問發生錯誤時,該選項會顯示在頁面上.


reply_body_max_size緩存目錄大小


cache_effective_user squid         設定使用緩存的有效用戶.(系統默認)


cache_effective_group squid       設定使用緩存的有效用戶組(系統默認)




acl訪問控制:

列表類型:

src IP                源IP地址(客戶機的IP地址).

dst IP                目標地址(服務的器IP地址).

scrdomain             源名稱  (客戶機所屬的域).

dstdomain             目標名稱(服務器所屬的域).

url_regex             URL規則的表達式

urlpath_regex:        URL-path  略去協議和主機名的URL規則表達式匹配.

proxy_auth            通過外部程序進行用戶認證.

maxconn               單一IP最大連接數.

time                  語法:[星期][時間段]

                     Monday-M;Tuesday-T ... Sunday-S

例子:

# 禁止地址或者網段(修改掩碼可以設置網段,修改dst或src實現目的或源)

acl dropip src 192.168.5.110/32

http_access deny dropip

# 禁止源地址 /etc/squid/clist 列表

acl clist src "/etc/squid/clist"

http_access deny clist

# 禁止用戶訪問新浪域名

acl dropurl dstdomain www.sina.com.cn

http_access deny dropurl

# 禁止訪問域名包含sina.com的網站(-i 忽略大小寫)

acl dropurl1 url_regex -i sina.com

http_access deny dropurl1

# 限制IP地址爲192.168.5.200客戶機併發最大連接數爲5

acl clientip src 192.168.5.200

acl conn5 maxconn 5

http_access deny clientip1 conn5

# 禁止192.168.5.0這個網段在週一至週五的9:00至15:00上網

acl clientnet src 192.168.5.0/24

acl worktime tiem MTWHF 9:00-15:00

http_access deny clientnet worktime

# 禁止下載MP3 exe rar爲後輟名的文件

acl download urlpath_regex -i \.MP3$ \.exe$ \.rar$

http_access deny download






博主所用的生產環境下的squid.conf


cache_mem 2048 MB

dns_nameservers DNS1-name DNS2-name

visible_hostname  proxy ##主機名

maximum_object_size  2048 KB

maximum_object_size_in_memory 256 KB

cache_mgr [email protected]        ##管理員

logfile_rotate 10

cache_swap_high 90

cache_swap_low 88

acl manager proto cache_object

acl localhost src 10.2.16.1/32 10.2.17.1/32 10.2.18.1/32 10.2.19.1/32 公網ip/32

acl localnet src 10.2.16.0/24

acl localnet src 10.2.17.0/24

acl localnet src 10.2.18.0/24

acl localnet src 10.2.19.0/24

acl worktime time MTWHF 9:30-11:30 13:30-17:30

acl gouwu dstdomain -i "/etc/squid/gouwu.txt"     #所禁止的域名列表,豎排排列,一個域名一行的格式

http_access deny  gouwu worktime

http_access allow manager localhost

http_access allow localnet

acl SSL_ports port 443

acl Safe_ports port 80# http

acl Safe_ports port 21# ftp

acl Safe_ports port 443# https

acl Safe_ports port 70# gopher

acl Safe_ports port 210# wais

acl Safe_ports port 1025-65535# unregistered ports

acl Safe_ports port 280# http-mgmt

acl Safe_ports port 488# gss-http

acl Safe_ports port 591# filemaker

acl Safe_ports port 777# multiling http

http_access deny !Safe_ports

acl CONNECT method CONNECT

http_access deny CONNECT !SSL_ports

http_access deny all

http_port 10.2.16.1:3128 transparent#設置網關及透明代理

http_port 10.2.17.1:3128 transparent

http_port 10.2.18.1:3128 transparent

http_port 10.2.19.1:3128 transparent

hierarchy_stoplist cgi-bin ?

access_log /usr/local/squid/var/logs/access.log 

cache_log /usr/local/squid/var/logs/cache.log

cache_store_log /usr/local/squid/var/logs/store.log

cache_dir ufs  /var/squid/cache/  2048 16 256

coredump_dir /usr/local/squid/var/cache

refresh_pattern ^ftp:144020%10080

refresh_pattern ^gopher:14400%1440

refresh_pattern -i (/cgi-bin/|\?)00%0

refresh_pattern .020%4320




配置完成後


創建子目錄

squid -z

賦權

chown  -R nobody.nobody /usr/local/squid/var


檢查語法

squid -k parse 不提示任何信息則爲成功


squid -DNdl

2014/03/29 15:34:16| Starting Squid Cache version 3.0.STABLE26 for x86_64-unknown-linux-gnu...

最後停留在一行不動,則表示可以啓動

用Ctrl+c終止


現在可以啓動Squid了

squid -s



二.設置iptables腳本


INSIDENET=10.2.16.0/24,10.2.17.0/24,10.2.18.0/24,10.2.19.0/24     

OUTSIDENET=公網ip/255.255.255.240

INSIDE=10.2.16.1,10.2.17.1,10.2.18.1,10.2.19.1

OUTSIDE=公網Ip

INCARD=eth1

OUTCARD=eth0

iptables -t nat -F;

iptables -t filter -F;

echo 1 > /proc/sys/net/ipv4/ip_forward;

iptables -t filter -P INPUT DROP;

iptables -t filter -P OUTPUT ACCEPT;

iptables -t filter -P FORWARD DROP;

iptables -t filter -A FORWARD -s $INSIDENET -j ACCEPT;

iptables -t filter -A FORWARD -s $INSIDENET -d $OUTSIDENET -p all -j ACCEPT;

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

iptables -t nat -A PREROUTING -m state --state ESTABLISHED,RELATED -j ACCEPT;

iptables -t filter -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT;

iptables -t filter -A INPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT;


#開放控制策略

iptables -t nat -A PREROUTING -m mac --mac-source D0:67:E5:1D:6D:B7 -p tcp --dport 80 -j ACCEPT;


iptables -t filter -A INPUT  -p tcp --dport 22 -j ACCEPT;


iptables -t filter -A INPUT -s $INSIDENET -p tcp -m multiport --dport 3128 -j ACCEPT;


iptables -t filter -A INPUT -p icmp --icmp-type echo-request  -m limit --limit 1/s --limit-burst 10 -j ACCEPT;

iptables -t filter -A INPUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -m limit --limit 20/sec --limit-burst 200 -j ACCEPT;


iptables -t filter -A INPUT -i lo -j ACCEPT;

iptables -t filter -A OUTPUT -o lo -j ACCEPT;


#配置SNAT轉發給SQUID

iptables -t nat -A POSTROUTING -s $INSIDENET -o eth0 -j SNAT --to-source $OUTSIDE;

iptables -t nat -A PREROUTING -s $INSIDENET -p tcp --dport 80 -j REDIRECT --to-ports 3128;


執行Iptalbes之後,所有80端口都歸squid管控,至此啓動成功


#############################所有配置完成!!#########################


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章