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

-------------本文结束 感谢您的阅读-------------
-------------如果觉得这篇文章不错,可以请作者喝杯咖啡!-------------