Squid 正向代理配置及使用
也是笔记来的,随便整理一下吧!
安装 squid
1 | yum install -y squid |
配置 squid /etc/squid/squid.conf
主要是这 2 个:
1 | # 代理服务器端口 |
不同服务器默认配置可能不太一样,我的阿里云 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 | $ sudo firewall-cmd –permanent –zone=public –add-forward- port=port=80:proto=tcp:toport=3128:toaddr=192.168.1.10 |
或者
For RHEL/CentOS 6, the Iptables rules are
1 | sudo iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 80 -j DNAT –to 192.168.1.10:3128 |
(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 | http_access allow myacl !baidu |
代理客户端遇到特殊字符的配置
配置代理的格式一般是这样的:
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 | ~ : 0x7E, ! : 0x21 |
1 | export HTTP_PROXY=http://CodeCore:%40MingHou233%21@172.16.2.17:8787 |