squid 防火牆安裝

由於最近公司內有內部網段要聯外的需求,因此,順便研究一下proxy相關資訊,順便實際安裝Proxy Server。本篇採用的是Proxy Server是squid(烏賊)-網路上公認較好的防火牆軟體使用(其實是公司同仁推薦)。

何為代理伺服器(Proxy Server)?

簡單來說就有點像是代辦黃牛,當你要辦理事情時,就請黃牛幫忙跑腿代辦,這樣你就不需要自己跑腿。應用到網路上來說,Proxy就像是代替內部網路去外面取得資料,再轉送回給內部電腦,這樣可以確保內網的封閉性(讓你無法上網)及被允許的電腦(老子不給,你不能硬要)才能使用Proxy,達到內網安全(控管)的目的。

安裝 squid Server

CentOS 作業系統安裝
sudo yum install squid -y

// 設定檔案位置 /etc/squid/squid.conf
cache_dir ufs /var/spool/squid 1000 16 256  // 將快取目錄容量設定為1G
// 設定自動清除快取資料(),請自行加入下方兩行
cache_swap_low 90
cache_swap_high 95
  • 關閉防火牆
vi /etc/selinux/config

SELINUX=enforce  改成:  SELINUX=disabled
SELINUXTYPE=targeted 改成:#SELINUXTYPE=targeted

存檔後退出

$>systemctl stop firewalld.service
$>systemctl disable firewalld.service

啟動squid

systemctl start squid  // 可用 netstat -antp | grep squid 查詢是否啟動
systemctl enable squid
ps ax |grep squid  // 查看是否正常啟動

一般操作

  • 停止
systemctl stop squid
  • 重新載入設定檔
/usr/sbin/squid -k reconfigure
  • 清除快取
sudo systemctl stop squid
sudo rm -rf /var/spool/squid/swap.state
sudo systemctl start squid

因為 squid 對硬碟讀寫 (I/O) 很頻繁且會有一堆資料 cache 在記憶體中,因此建議您若 Proxy Server 要重開機或關機前先把 squid service stop

設定內網能外聯

更改:vi /etc/squid/squid.conf

# 註解掉不需要的主機,只針對IP開啟需要的主機/DNS
# acl localnet src 10.0.0.0/8   # RFC1918 possible internal network
# acl localnet src 172.16.0.0/12        # RFC1918 possible internal network
# acl localnet src 192.168.0.0/16       # RFC1918 possible internal network
# acl localnet src fc00::/7       # RFC 4193 local private network range
# acl localnet src fe80::/10      # RFC 4291 link-local (directly plugged) machines
acl localnet src 10.109.110.219       # CI/CD Server
acl localnet src 10.109.110.229       # Docker Registry
### 另一種方式,把IP放在某個設定檔中集中管理
acl localnet src "/root/squid/squid.hostallow"

# 不需要的port也關掉
acl Safe_ports port 80          # http
acl SSL_ports port 443
acl Safe_ports port 443         # https
# acl Safe_ports port 21                # ftp
# 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
acl CONNECT method CONNECT

內網電腦Client 設定

  • 環境變數
export http_proxy=http://proxyhost:proxyport
export HTTP_PROXY_AUTH=basic:*:proxyuser:proxypass
  • yum
vi /etc/yum.conf

proxy=http://proxyIP:port   // ex: http://140.102.3.1:3128

若執行時出現:Repodata is over 2 weeks old. Install yum-cron? Or run:yum makecache fase時,可以先執行: yum clean all後,再執行:yum update -y。

sudo mkdir -p /etc/systemd/system/docker.service.d  // 建立目錄

vi /etc/systemd/system/docker.service.d/http-proxy.conf

[Service]
Environment="HTTP_PROXY=http://proxy.example.com:80/"
// 存檔

sudo systemctl daemon-reload
sudo systemctl restart docker
systemctl show --property=Environment docker
  • Git
// 單一專案
git config http.proxy http://myusername:mypassword@proxy.server:port

// 全部
git config --global http.proxy http://proxy.server:port
  • wget
export  http_proxy=http://proxyIP:3128

// 或常開啟

vi ~/.wgetrc
// 加入
http_proxy = http://proxy.hinet.net:3128/
use_proxy = on

程式透過Proxy連外部系統