Squid 正向代理配置及使用

也是笔记来的,随便整理一下吧!

安装 squid

1
yum install -y squid

配置 squid /etc/squid/squid.conf

主要是这 2 个:

1
2
3
4
# 代理服务器端口
http_port 3128
# 允许访问所有地址,默认是 deny,这个要主动改一下
http_access allow all

不同服务器默认配置可能不太一样,我的阿里云 Centos 安装后压根就不用配置,全配置好了(连注释都是中文的):

启动

1
systemctl start squid

停止

1
systemctl stop squid

重启

1
systemctl restart squid

重新加载配置文件

1
squid -k reconfigure

查看是否正在运行

1
systemctl status squid

全部命令:{start|stop|status|reload|force-reload|restart|condrestart|try-restart|probe}

配置代理

[yum 的代理服务器配置]
如果想让 CentOS 中的 yum 可以通过代理服务器更新程序,则需要修改文件 /etc/yum.conf,在此文件中加上:
proxy=http://easwy:123456@192.168.1.1:8080

方法是在你的~/.bashrc 里加上类似下面的话:
export http_proxy=http://username:password@proxyserver:port/
export ftp_proxy=http://username:password@proxyserver:port/

[subversion 的代理服务器配置]
要配置 subversion 的代理服务器,需要修改 $HOME/.subversion/servers 文件,在此文件的 [global] 段加上:
http-proxy-host = 192.168.1.1
http-proxy-port = 8080
http-proxy-username = easwy
http-proxy-password = 123456

禁用 3128 端口访问

1
http_port 3128 intercept

透明代理 squid + iptables

(1)修改 /etc/squid/squid.conf 配置文件,配置支持透明代理

改:http_port 3128

为:http_port 3128 transparent (透明的)

1
systemctl restart squid

(2)开启路由转发功能:

编辑 /etc/sysctl.conf 配置文件

改:net.ipv4.ip_forward = 0

为:net.ipv4.ip_forward = 1

1
sysctl -p

(3)配置防火墙:
RHEL/CentOS 7

1
2
3
4
$ sudo firewall-cmd –permanent –zone=public –add-forward- port=port=80:proto=tcp:toport=3128:toaddr=192.168.1.10
$ sudo firewall-cmd –permanent –zone=public –add-port=3128/tcp
$ sudo firewall-cmd –permanent –add-masquerade
$ sudo firewall-cmd –reload

或者

For RHEL/CentOS 6, the Iptables rules are

1
2
3
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 80 -j DNAT –to 192.168.1.10:3128
sudo iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 80 -j REDIRECT –to-port 3128
sudo iptables –t nat -A POSTROUTING –out-interface eth1 -j MASQUERADE

(4)测试:把网关配置成代理 IP,大功告成!

acl 控制

1 src       源地址
2 dst      目标地址
3 port      目标端口
4 dstdomain   目标域
5 time     访问时间
6 maxconn    最大并发连接
7 url_regex   目标 URL 地址 # 可以定义大的范围比如 http://www.baidu.com
8 urlpath_regex  整个目标 URL 路径 # 可以定位到每个网站的具体目标的 url,比如百度音乐的一首歌的 url
例:urlpath_regex -i .mp3$ #:-i 参数适用于任何可能需要区分大小写的地方

通过黑名单限制目标网站
(1)首先创建地址列表文件(直接在配置文件里写也行,但是这种用列表文件的方式适合拒绝或允许的网站域名比较多的情况,而且方便增删管理)
1 vim /etc/squid/ipblock.list
2 61.135.167.36
3 60.28.14.0/24
4 ~]#vim /etc/squid/dmblock.list
5 .qq.com
(2)配置 acl
1 ~]#vim /etc/squid.conf
2 acl IPBLOCK dst “/etc/squid/ipblock.list”
3 acl DMBLOCK dstdomain “/etc/squid/dmblock.list”
4 http_access deny IPBLOCK
5 http_access deny DMBLOCK
6 ~]#service squid reload

squid 安全配置

建立帐号文件
htpasswd -c /etc/squid/passd

设置认证方式
参数 auth_param basic program 定义了认证方式为 basic(从 Squid 2.5 版以后,NCSA 认证包含在了 basic 中)、认证程序路径和认证程序需要读取的账号文件。

1
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd

设置认证程序的进程数
参数 auth_param basic children 定义了认证程序的进程数。

1
auth_param basic children 5

设置认证领域内容
参数 auth_param basic realm 定义了 Web 浏览器显示用户名 / 密码对话框时的领域内容。

1
auth_param basic realm user squid server

设置认证有效时间
参数 auth_param basic credentialsttl 定义了用户经过认证后的有效时间,用户在有效时间后如果还需要继续使用 Squid 代理服务,则必须重新输入用户名和密码。

1
auth_param basic credentialsttl 2 hours

用户名不区分大小写,可改为 ON 区分大小写

1
auth_param basic casesensitive off

生成规则名 myacl

1
acl myacl proxy_auth REQUIRED

规则生效,! 号代表取反。

1
2
http_access allow myacl !baidu
http_access deny all

代理客户端遇到特殊字符的配置

配置代理的格式一般是这样的:
export https_proxy=https:// 用户名:密码 @代理地址:代理端口
比如需要配置这些:
export http_proxy=http://CodeCore:@MingHou233!@172.16.2.17:8787
export https_proxy=http://CodeCore:@MingHou233!@172.16.2.17:8787
export no_proxy=127.0.0.1,localhost
export ftp_proxy=http://CodeCore:@MingHou233!@172.16.2.17:8787

如果直接输入 BASH 会报错: bash: !@172.16.2.17: event not found
解决办法 就是将特殊字符转换成 ASIIC 码形式输入,以 % + Hex 形式 (0x 忽略).
参考链接: ASCII Reference
比如常见的会出现在密码中的特殊字符:

1
2
3
4
5
~ : 0x7E,         ! : 0x21
@ : 0x40, # : 0x23
$ : 0x24, % : 0x25
^ : 0x5E, & : 0x26
* : 0x2A, ? : 0x3F
1
2
export HTTP_PROXY=http://CodeCore:%40MingHou233%21@172.16.2.17:8787
export HTTPS_PROXY=https://CodeCore:%40MingHou233%21@172.16.2.17:8787