Squid 是 Linux 系統中最多見的一塊開源代理服務軟件(官方網站爲 http://www.squid-cache.org ),能夠很好地實現HTTP、FTP、DNS、查詢,以及SSL等應用的緩存代理,功能十分強大。css
做爲應用層的代理服務軟件,Squid 主要提供緩存加速和應用層過濾控制的功能。vim
代理的工做機制windows
當客戶機經過代理來請求 Web 頁面時,指定的代理服務器輝縣檢查本身的緩存,若是緩存中已經有客戶機須要訪問的頁面,則直接將緩存中的頁面內容反饋給客戶機;若是緩存中沒有客戶機須要訪問的頁面,則由代理服務器想 Internet 發送訪問請求,得到返回的 Web 頁面之後,將網頁數據保存到緩存中併發送給客戶機。
HTTP 代理的緩存加速對象主要是文字、圖像等靜態 Web 元素。使用緩存機制後,當客戶及在不一樣的時候訪問統一 Web 元素,或者不一樣的客戶機訪問相同的 Web 元素時,能夠直接從代理服務器的緩存中得到結果。這樣就大大減小了像 Internet 重複提交 Web 請求的過程,提升了客戶機的 Web 響應速度。
因爲客戶機的 Web 訪問請求其實是由代理服務器代替完成的,從而能夠隱藏用戶的真實 IP 地址,起到必定的保護做用。另外一方面,代理服務器擔任着相似「經紀人」的角色,因此有機會針對要訪問的目標、客戶機的地址,訪問的時間段等進行過濾控制。瀏覽器
首先必須在客戶機的瀏覽器、QQ聊天工具、下載軟件等程序手動設置代理服務器的地址和端口,而後才能使用代理服務來訪問網絡。對於網頁瀏覽器,訪問網站時的域名解析也會發送給指定的代理服務器。緩存
提供與傳統代理相同的功能和服務,其區別在於客戶機不須要指定代理服務器的地址和端口,而是經過默認路由、防火牆策略將 Web 訪問重定向,實際上仍然交給代理服務器來處理。重定向的過程對客戶機來講是「透明」的,用戶甚至不知道本身在使用代理服務,因此稱爲「透明代理」。使用透明代理時,網頁瀏覽器訪問網站時的域名解析請求將優先發給 DNS 服務器。安全
經過 squid 反向代理能夠加速網站的訪問速度,可將不一樣的 URL 請求分發到後臺不一樣的 Web 服務器上,同時互聯網用戶只能看到反向代理服務器的地址,增強了網站的訪問安全。服務器
主機 | 操做系統 | IP地址 | 所用軟件 |
---|---|---|---|
Squid代理服務器 | CentOS 7.4 x86_64 | 192.168.100.135 | squid.x86_64 7:3.5.20-10.el7 |
Win10 客戶機 | windows 10 | 192.168.100.10 | Internet Explorer 11 |
1. 安裝squid軟件包網絡
yum -y install squid
2. 開啓squid服務併發
systemctl enable squid.service systemctl start squid.service
3. 查看啓動進程信息dom
# netstat -tunlp | grep squid tcp6 0 0 :::3128 :::* LISTEN 7374/(squid-1) udp 0 0 0.0.0.0:33427 0.0.0.0:* 7374/(squid-1) udp6 0 0 :::38585 :::* 7374/(squid-1)
4. 爲客戶機設置代理(IP:3128)
- 在IE瀏覽器中,選擇「工具」→「Internet選項」,在「鏈接」選項卡中點擊「局域網設置」按鈕,填寫代理服務器IP與端口信息。
- 若要在 Linux 客戶機的命令行界面中使用代理服務器,不準經過環境變量來指定代理服務器的地址、端口等信息。
# vim /etc/profile HTTP_PROXY=http://192.168.100.135:3128 //爲使用HTTP協議指定代理 HTTPS_PROXY=http://192.168.100.135:3128 //爲使用HTTPS協議指定代理 FTP_PROXY=http://192.168.100.135:3128 //爲使用FTP協議指定代理 NO_PROXY=192.168.1.,192.168.4. //對兩個局域網段不使用代理 export HTTP_PROXY HTTPS_PROXY FTP_PROXY NO_PROXY # source /etc/profile
1. 經過SNAT技術完成數據的轉發,讓客戶機將數據交給Squid代理服務器,再由其轉發到外網中
//清空防火牆規則 iptables -F iptables -t nat -F //開啓dns服務容許經過外網口 iptables -t nat -A POSTROUTING -p udp --dport 53 -o ens32 -j MASQUERADE //開啓路由轉發 echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf //當即生效 sysctl -p
2. 編輯squid配置文件
# vim /etc/squid/squid.conf http_port 3128 transparent cache_dir ufs /var/spool/squid 100 16 256
3. 檢查配置文件,初始化並重啓squid服務
squid -k parse //檢查配置文件 squid -z //初始化 systemctl restart squid.service
4. 添加防火牆規則
//將內網用戶對80端口的訪問都轉發到本機3128端口上 iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128 //將內網用戶對80端口的訪問都轉發到本機3128端口上 iptables -t nat -A PREROUTING -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3128 //保存防火牆規則 service iptables save
1. 編輯squid配置文件,添加如下規則
# vim /etc/squid.conf http_port IP:80 vhost cache_peer 網站源服務器IP parent 80 0 originserver
2. 重啓squid服務
systemctl restart squid
3. 自定義錯誤頁面
# 錯誤頁面默認在/usr/share/squid/errors/zh-cn/目錄下 # 修改logo爲公司logo ,/etc/squid/errorpage.css # vim /etc/squid/errorpage.css /* Page displayed title area */ #titles { margin-left: 15px; padding: 10px; padding-left: 100px; //ur('') 指向地址,替換爲公司的logo路徑地址便可 background: url('/squid-internal-static/icons/SN.png') no-repeat left; }
4. 修改系統管理員郵箱
# vim /etc/squid/squid.conf //主機名 visible_hostname squid.njxx.com //管理員郵箱信息 cache_mgr admin@njxx.com
acl 列表名稱 列表類型 列表內容 …
列表類型 | 含義/用途 |
---|---|
src | 源IP地址、網段、IP地址範圍 |
dst | 目標IP地址、網段、主機名 |
port | 目標端口 |
dstdomain | 目標域,匹配域內的全部站點 |
time | 使用代理服務的時間段,用字母表示一星期中各天的英文縮寫 |
maxconn | 每一個客戶機的併發鏈接數 |
url_regex | 目標資源的URL地址,-i表示忽略大小寫 |
urlpath_regex | 目標資源的整個URL路徑,-i表示忽略大小寫 |