歡迎您光臨本站 註冊首頁

linux25-代理伺服器

←手機掃碼閱讀     火星人 @ 2014-03-08 , reply:0

代理伺服器 iptables router 三種上網的比較

proxy 可以把訪問過的web頁,圖片等緩存緩存到本地,一般不用設置網關
iptables router 都要設置網關,DNS等參數


代理伺服器的作用

共享網路,加快網路訪問速度,防止內部主機受攻擊,限制用戶訪問等


三種代理類型

正向代理 客戶端需要設置代理伺服器的IP和代理埠
--代理內部主機上網(共享上網,並可以進行用戶限制等功能)

透明代理 客戶端不需要設置代理伺服器的IP和代理埠,對用戶是透明的


反向代理 從網路訪問內部伺服器,與正向相反


--關於它們的應用:
正向和透明用於控制上網行為,共享上網等網路管理功能

反向代理主要用架構. 有四層和七層等之分,可用於動靜分離等架構.

實驗環境


內網用戶VM1 squid 伺服器 (eth0實際情況下就是外網IP)
eth0 vmnet1 eth1
172.16.57.131 --> 172.16.57.1 172.19.1.17

第一步:安裝squid


生產環境盡量使用源碼版,優勢就是功能自定義,編譯時還會檢測內核相關參數,定做出適合操作系統運行的軟體,唯一缺點就是安裝比較麻煩


這裡使用的rpm版就可以做今天的所有實驗
[root@dns ~]# yum install squid* -y

Summary : The Squid proxy caching server.
Description :
Squid is a high-performance proxy caching server for Web clients,
supporting FTP, gopher, and HTTP data objects. Unlike traditional
caching software, Squid handles all requests in a single,
non-blocking, I/O-driven process. Squid keeps meta data and especially


hot objects cached in RAM, caches DNS lookups, supports non-blocking
DNS lookups, and implements negative caching of failed requests.

Squid consists of a main server program squid, a Domain Name System
lookup program (dnsserver), a program for retrieving FTP data
(ftpget), and some management and client tools.

# rpm -ql squid-2.6.STABLE21-3.el5 |grep conf
/etc/httpd/conf.d/squid.conf
/etc/squid/cachemgr.conf
/etc/squid/mime.conf
/etc/squid/mime.conf.default
/etc/squid/msntauth.conf
/etc/squid/msntauth.conf.default
/etc/squid/squid.conf --主配置文件
/etc/squid/squid.conf.default
/etc/sysconfig/squid

第二步:修改主配置文件
vim /etc/squid/squid.conf
919 http_port 3128 --默認代理埠
1576 cache_mem 100 MB --高速緩存,保存在內存上,一般設置為1/3左右
1784 cache_dir ufs /var/spool/squid 1024 16 256 --緩存目錄

1838 cache_swap_low 90
1839 cache_swap_high 95 --緩存空間達到95%時,新的緩存對象進來是替代而不是增加;當空間回到90%時,新的緩存對象進來是增加而不是替代

1946 access_log /var/log/squid/access.log squid --包含了訪問日誌,客戶端請求信息
1963 cache_log /var/log/squid/cache.log --緩存的狀態性和調試性信息
1970 cache_store_log /var/log/squid/store.log --包含進入和離開緩存的每個目標的記錄

2973 cache_effective_user squid
2986 cache_effective_group squid

3006 visible_hostname li.cluster.com --自己的主機名

637 http_access allow all --默認策略是都拒絕,要改為allow


第三步:
初始化緩存目錄

ls /var/spool/squid --初始化之前為空

squid -zX --z參數創建緩存目錄,X參數是打開調試功能,在這裡就是可以看到創建過程

ls /var/spool/squid --初始化之後再查看,就創建了16個目錄,每個目錄里256個子目錄

du -sh /var/spool/squid/ --查看一下大小,目前為17M

[root@dns ~]# du -sh /var/spool/squid/
17M /var/spool/squid/
[root@dns ~]# du -s /var/spool/squid/
16452 /var/spool/squid/

第三步:
啟動服務
/etc/init.d/squid start

重新裝載的話可以使用
/etc/init.d/squid reload
或者使用
squid -k reconfig

停服務可以使用
/etc/init.d/squid stop
或者使用
squid -k shutdown


[root@li ~]# lsof -i:3128 --查看3128埠
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
squid 4937 squid 12u IPv4 36871 TCP *:squid (LISTEN)

第四步:
客戶端的測試 --

主要是修改瀏覽器

--filefox配置
編輯--性能--高級--網路--設置-- 手動填寫代理伺服器的IP和代理埠

--IE配置
右鍵IE圖標--連接--區域網設置--為LAN使用代理伺服器前打勾並填上代理伺服器的內網IP及其代理埠


測試:
訪問已經訪問過的頁面是否能感覺到頁面加快
再次查看 du -s /var/spool/squid 發現增大,因為緩存了對象
查看相關日誌 /var/log/squid/squid/*.log


----------------------------------------------------------


透明代理:


第一步:
打開路由轉發功能


# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1

# sysctl -p

transparent Support for transparent interception of
outgoing requests without browser settings.


# vim /etc/squid/squid.conf

http_port 3128 transparent

[root@dns ~]# /etc/init.d/squid restart

第三步:
加上兩條iptables規則,做一個NAT地址轉換,和一個80埠到3128埠的重定向

[root@dns ~]# iptables -t nat -A PREROUTING -p tcp --dport 80 -i vmnet1 -j REDIRECT --to-port 3128
[root@dns ~]# iptables -t nat -A POSTROUTING -p tcp --dport 80 -o eth1 -j SNAT --to-source 172.19.1.17

# iptables -t nat -A POSTROUTING -p udp --dport 53 -o eth1 -j SNAT --to-source 172.19.1.17
# iptables -t nat -A POSTROUTING -p tcp --dport 53 -o eth1 -j SNAT --to-source 172.19.1.17

--上面目標埠為80和53的從eth1出去的包都SNAT給代理伺服器的出去的地址(172.19.1.17),上面的tcp的53埠那條可以不寫,因為dns請求主要是udp,tcp的53用於主從同步等方面


第四步:
客戶端的設置:
首先,選擇不使用代理


修改網關指向代理伺服器的內網地址(我這裡為172.16.57.1),DNS指向尚觀的172.19.1.1這個路由器IP


測試: OK

client squid 尚觀路由器
vmnet1 eth1
172.16.57.131 172.16.57.1 172.19.1.17 172.19.1.1
| |
| |
| |
clinet網關指向172.16.57.1-- |
clinetDNS指向172.19.1.1----------------------------------|


====================================

squid 里的 ACL 訪問控制列表


關於acl的一些實例:

acl badipclient src 192.168.66.132 --拒絕內網的192.168.66.132上網
http_access deny badipclient

acl denyip src 172.16.57.131-172.16.57.132/255.255.255.255
http_access deny denyip


acl baddsturl2 dst 220.11.22.33 --不能訪問這個外網IP的網站
http_access deny baddsturl2


acl baddsturl dstdomain -i www.baidu.com --不能訪問www.baidu.com和WWW.BAIDU.COM;-i參數定義大小寫都匹配; 但是可以訪問zhidao.baidu.com或tieba.baidu.com
http_access deny baddsturl


acl baddsturl dstdom_regex -i baidu.com --這是把baidu.com以下的所有域名都禁止
http_access deny baddsturl


acl baddsturl3 url_regex -i baidu --拒絕訪問url里有baidu這個關鍵字的網站
http_access deny baddsturl3


acl badfile urlpath_regex -i \.mp3$ \.rmvb$ \.exe$ \.zip$ \.mp4$ \.avi$ \.rar$
http_access deny badfile --禁止下載帶有定義後綴名的文件


acl vip arp 00:0C:29:79:0C:1A --rpm版不支持,需要編譯版squid加上此功能
http_access allow vip

acl badipclient2 src 10.1.1.0/255.255.255.0
acl worktime time MTWHF 9:00-17:00
http_access deny badipclient2 worktime --拒絕10.1.1.0網段工作時間不能上網

acl badipclient3 src 10.1.1.35
acl conn5 maxconn 5
http_access deny badipclient3 conn5 --最大連接數為5

實現如下要求:
1,允許周一到周五12:00-13:30和17:00-20:30和雙休能上網,別的時間不能上網
2,禁止下載.exe .rar .zip .mp3 .avi .rmvb .mp4後綴的文件
3,禁止訪問qq.com,mop.com,sina.com,163.com,youku.com
4,禁止訪問網址中包含某些關鍵字的網站:比如 sex news movie sport game
4, vip沒有任何限制


acl lunchtime time MTWHF 12:00-13:30
acl dinnertime time MTWHF 17:00-20:30
acl weekendtime time AS 00:00-24:00
acl badfiletype urlpath_regex -i \.mp3$ \.rmvb$ \.exe$ \.zip$ \.mp4$ \.avi$ \.rar$


acl badwebsite dstdom_regex -i "/etc/squid/badwebsitelist"
acl badkeyword url_regex -i sex news movie game sport love
acl vip src 192.168.66.131 --因為rpm版不支持mac地址的控制,我這裡使用ip來控制

http_access allow vip
http_access deny badfiletype
http_access deny badwebsite
http_access deny badkeyword

http_access allow all lunchtime
http_access allow all dinnertime
http_access allow all weekendtime
http_access deny all


vim /etc/squid/badwebsitelist
qq.com
mop.com
sina.com
163.com
youku.com

------------------------------

實驗環境

內網用戶VM1 squid VM2
eth0 vmnet1 eth1 eth0
172.16.57.131-->172.16.57.1 172.19.1.17 <-- 172.19.1.103
網關指向172.16.57.1 網關指向172.19.1.17


主機名web.cluster.com 主機名li.cluster.com


--注意:
VM1為內部web伺服器,綁定主機名為web.cluster.com
squid伺服器主機名為li.cluster.com

172.16.57.1為squid的一個內網IP
172.19.1.17為squid的外網IP

172.19.1.103 為外網客戶端


過程:
客戶端 通過http://web.cluster.com --> 172.19.1.17:80 -->squid 監聽80--> 內部web伺服器 172.16.57.131:80


1,用一個新的配置文件;如果是在上面的透明代理基礎上再做反向代理,先註釋掉前面所有的配置

vim /etc/squid/squid.conf

http_port 80 accel vhost vport
--accel 反向代理加速模式
--vhost 支持域名
--vport 支持埠

cache_peer 172.16.57.131 parent 80 0 no-query originserver name=web

--172.16.57.131 內網web伺服器的IP
--parent 上下關係,非平級關係
--80 代理內部web伺服器的80埠
--0 沒有使用icp,表示就一台squid伺服器
--no-query 不去查詢鄰居,與上面的0結合使用
--originserver 表示源實際伺服器
--name=web 定義一個名字,讓後面的參數引用

cache_peer_domain web web.cluster.com --對web.cluster.com的請求會給web這台伺服器(也就是上面定義的172.16.57.131);如果有多台web的話,可以多台web綁定同一個域名,還可以實現RR輪循調度

cache_peer_access web allow all --對web的所有訪問都允許


visible_hostname li.cluster.com

http_access allow all


保存后,先不要重啟squid;因為我這是在透明代理的基礎上再做的,要把前面做的緩存和日誌給刪除,清除iptables規則

# rm /var/spool/squid/* -rf
# rm /var/log/squid/*.log -rf
# iptables -t nat -F

# squid -zX --重新初始化

--測試:

172.19.1.103這台客戶端,使用http://172.19.1.17訪問不了


因為web.cluster.com和外網IP172.19.1.17綁定了,但是web.cluster.com確是內部web伺服器172.16.57.131的主機名


這裡客戶端的DNS解析web.cluster.com應該得到172.19.1.17的結果


這裡不做DNS的話,就直接在/etc/hosts里寫上

172.19.1.17 web.cluster.com


再使用http://web.cluster.com 就可以訪問到內部的web伺服器了

====================================


多台squid反向代理

參考
http://www.ibm.com/developerworks/cn/linux/l-cn-squid/


參考它實現


client


|
|
|-----------|
squid 1 squid 2
| |
|-----------|
|
|
|-----------|
lamp1 lamp 2
|-----------|
|
|
mysql nfs


兩台squid1使用icp協議共同工作
兩台lamp可以安裝一個phpwind或discuz論壇
lamp里mysql獨立出來,lamp的網站家目錄也獨立出來,使用nfs共享(--注意其許可權)
把mysql和nfs做在同一台


===========================================================
附:
編譯版squid的安裝

/share/soft/squid/squid-3.0.STABLE25.tar.gz

[root@squid /]# tar xf squid-3.0.STABLE25.tar.gz -C /usr/src/

[root@squid /]# cd /usr/src/squid-3.0.STABLE25/


[root@squid squid-3.0.STABLE25]# ./configure --enable-async-io=160 --enable-gnuregex --disable-carp --enable-storeio=ufs,aufs,diskd --enable-icmp --enable-delay-pools --enable-useragent-log --enable-referer-log --enable-arp-acl --enable-ssl --enable-ipfw-transparent --enable-ipf-transparent --enable-pf-transparent --enable-linux-netfilter --enable-linux-tproxy --enable-leakfinder --enable-x-accelerator-vary --with-pthreads --with-large-files

make ; make install

[root@squid ~]# ls /usr/local/squid/
bin etc libexec sbin share var


修改配置文件 --步驟省略

建立相關用戶和目錄

# useradd -d /dev/null -s /sbin/nologin squid
# mkdir /usr/local/squid/var/cache -p
# chown squid.squid /usr/local/squid/var/cache/
# chown squid.squid /usr/local/squid/var/logs/


初始化squid緩存目錄,並啟動
# /usr/local/squid/sbin/squid -zX


# /usr/local/squid/sbin/squid -D -N -d1 & --啟動,並打開調試信息


本文出自 「linuxart」 博客,請務必保留此出處http://linuxart.blog.51cto.com/686203/843987


[火星人 ] linux25-代理伺服器已經有751次圍觀

http://coctec.com/docs/linux/show-post-45762.html