Squid是Linux系統中最常用的一款開源代理服務軟件,主要提供緩存加速和應用層過濾控制的功能,可以很好的實現HTTP、FTP、DNS查詢以及SSL等應用的緩存代理
透明代理:提供與傳統代理相同的功能和服務,多見於局域網環境,其區別在於客戶機不需要指定代理服務器的地址和端口,而是通過默認路由、防火牆策略將Web訪問重定向,實際上仍然交給代理服務器處理 網頁瀏覽器訪問網站時的域名解析請求會優先發給DNS服務器
構建透明代理服務器
基於局域網主機通過Linux網關訪問Internet的環境
一台Linux主機作為Internet上的web服務器(CentOS7 192.168.94.22 NAT),啟動httpd服務
一台Linux主機作為局域網網關服務器(CentOS7 192.168.111.11 VMnet3),並構建Squid服務(192.168.94.11 NAT)提供代理服務
一台windows主機(192.168.111.22 VMnet3)作為局域網的客戶機,只需正確設置IP地址、默認網關
網關服務器添加網卡,內網卡ens37 192.168.111.0/24 ,外網卡ens33 192.168.94.0/24
安裝squid支持透明模式
[root@squid ~]# rz # 上傳源碼包 [root@squid ~]# tar xf squid-4.2-20180806-r6d8f397.tar.gz [root@squid ~]# mv squid-4.2-20180806-r6d8f397 /opt/squid [root@squid ~]# cd /opt/squid [root@squid squid]# ./configure --prefix=/usr/local/squid \ --sysconfdir=/etc \ --enable-arp-acl \ --enable-linux-netfilter \ --enable-linux-tproxy \ --enable-async-io=100 \ --enable-err-language="Simplify_Chinese" \ --enable-underscore \ --enable-poll \ --enable-gnuregex && make -j 4 && make -j 4 install
--enable-arp-acl # 可以在規則鏈中設置為直接通過客戶端MAC管理,防止客戶端使用IP欺騙 --enable-linux-netfilter # 使用內核過濾 --enable-linux-tproxy # 使用透明模式 --enable-async-io=100 # 異步I/O,提升存儲性能 --enable-err-language="Simplify_Chinese" # 錯誤信息顯示語言 --enable-underscore # 允許URL中有下划線 --enable-poll # 使用poll模式,提升性能 --enable-gnuregex # 使用GNU正則表達式
編譯有點慢 , 先配置web服務器
[root@web ~]# yum -y install httpd [root@web ~]# echo "<h1>Squid-Web1</h1>" > /var/www/html/index.html [root@web ~]# systemctl start httpd
再配置Windows網絡 IP和內網一個網段 , 網關指定內網網卡IP
編譯的很慢 , 先把后續的准備工作做了 , 在squid上再開一個終端
開啟路由轉發
[root@squid squid]# vim /etc/sysctl.conf # 添加 net.ipv4.ip_forward = 1 [root@squid squid]# sysctl -p # 或者臨時開啟 [root@squid squid]# echo "1" > /proc/sys/net/ipv4/ip_forward
寫入防火牆nat策略
[root@squit squid]# iptables -F [root@squit squid]# iptables -F -t nat [root@squit squid]# iptables -t nat -I PREROUTING -i ens37 -s 192.168.111.0/24 -p tcp --dport 80 -j REDIRECT --to 3129 # 后期配置squid配置文件里的監聽端口為3129 [root@squit squid]# iptables -t nat -I PREROUTING -i ens37 -s 192.168.111.0/24 -p tcp --dport 443 -j REDIRECT --to 3129 [root@squit squid]# iptables -I INPUT -p tcp --dport 3219 -j ACCEPT
配置squid配置文件
之前用3.6版本的squid做透明代理 監聽的端口就是IP:3128 這個4.2新版本可能默認監聽端口就是3128所以可能端口沖突 , 但是也沒有提示 , 官方手冊也沒找到具體原因 , 弄了兩天 , 不是服務起不來就是跑起來了沒效果 , 果斷換端口
[root@squid squid]# ln -s /usr/local/squid/sbin/* /usr/local/sbin/ [root@squid squid]# useradd -M -s /sbin/nologin squid [root@squid squid]# chown -R squid.squid /usr/local/squid/var/ [root@squid squid]# vim /etc/squid.conf # 在 http_port 3128 這行的下面添加 http_port 192.168.111.11:3129 transparent cache_mem 64 MB # 指定緩存功能所使用的內存空間大小,便於保持訪問較頻繁的WEB對象,容量最好為4的倍數,單位為MB,建議設為物理內存的1/4 maximum_object_size 4096 KB # 允許保存到緩存空間的最大對象大小,以KB為單位,超過大小限制的文件將不被緩存,而是直接轉發給用戶 # 在 coredump_dir /usr/local/squid/var/cache/squid 這一行上方添加 cache_effective_user squid # 指定程序用戶 cache_effective_group squid # 指定賬號基本組 # 在 http_access deny all 這行上面添加 http_access allow all # 把 cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256 這行的注釋去掉
開啟squid服務
[root@squit squid]# squid -z [root@squit squid]# squid [root@squit squid]# netstat -antup|grep squid tcp 0 0 192.168.111.11:3129 0.0.0.0:* LISTEN 49263/(squid-1) tcp6 0 0 :::3128 :::* LISTEN 49263/(squid-1) udp 0 0 0.0.0.0:55297 0.0.0.0:* 49263/(squid-1) udp6 0 0 :::37642 :::* 49263/(squid-1)
測試
查看squid代理服務器日志
查看Web服務器日志
顯示的是squid服務器的IP , 並不能看到用戶IP
測試成功