CentOS下使用Docker搭建Squid Proxy代理服务器
作为一个老资格的网虫,有的时候需要使用socks5或者http代理服务器。socks5代理服务器我一般使用dante,网上有不少安装方法,还有一键安装脚本,但是http代理服务器比较少涉及,之前折腾过tinyproxy也搭建成功了,但是squid一直没有试过。对大名鼎鼎的squid敬仰已久,docker广泛应用之后,使原先似乎有点难度的squid也变得简单,今天就来试一试用docker搭建squid。网上搜索了一下,发现里面或多或少还是有些小“坑”的,因此自己动手一遍,把全程记录下来。
安装Docker
# 下载安装脚本 $ curl -fsSL get.docker.com -o get-docker.sh # 安装 docker $ sudo sh get-docker.sh # 启动 docker $ sudo service docker start
安装Squid容器
# 从docker hub下载容器 $ docker pull sameersbn/squid # 在docker中创建容器 $ docker run --name squid -d --restart=always --publish 3128:3128 --volume /srv/docker/squid/cache:/var/spool/squid sameersbn/squid
端口和目录可以进行修改,这里要注意有一个小坑,网上有的教程容器内squid的目录写成了squid3,而实际上容器内目录是squid,运行之后squid会闪退。我搭建的时候也出现了这个情况,进入容器内查了access.log和cache.log之后才找到这个问题的。其实还有一个比较常见的问题,“ipcCreate: fork: (12) Cannot allocate memory”以及“FATAL: Couldn't start logfile helper”,这主要是vps服务器没有设置swap所导致的,如下图所示
解决问题也很简单,如下操作
# 给vps添加swap curl -O https://raw.githubusercontent.com/stilleshan/code/main/shell/swap.sh && chmod +x swap.sh && ./swap.sh
之后按照脚本提示的操作就行了,以M为单位,一般是内存的2倍左右
配置用户名和密码认证
# 首先安装httpd $ sudo yum -y install httpd # 生成认证文件 $ sudo htpasswd -c squid_passwd username ## squid_passwd是认证文件的名字,不能改;后面的username改成proxy的登陆用户名,接下来在这里输入两次密码 # 将认证文件拷贝至容器 $ sudo docker cp squid_passwd squid:/etc/squid/ ## 注意这里容器的目录是squid而不是squid3
Squid配置文件
acl localnet src 10.0.0.0/8 acl localnet src 172.16.0.0/12 acl localnet src 192.168.0.0/16 acl localnet src fc00::/7 acl localnet src fe80::/10 acl localnet src 0.0.0.0/0.0.0.0 acl localnet src 0.0.0.0/8 acl SSL_ports port 443 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https 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 # username&password auth config auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/squid_passwd acl ncsa_users proxy_auth REQUIRED http_access allow ncsa_users http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localhost manager http_access deny manager http_access deny to_localhost http_access allow localnet http_access allow localhost http_access deny all http_port 3128 cache_dir ufs /var/spool/squid 100 16 256 coredump_dir /var/spool/squid refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880 refresh_pattern . 0 20% 4320
这个配置文件是网上找的,测试了确实可用,直接贴在这里了。
将配置文件导入容器
$ sudo docker cp squid.conf squid:/etc/squid/squid.conf # 这里是squid目录,而不是squid3目录 ## 这里还有一个小坑,容器内的/etc/squid/目录下如果有squid.conf,一定要先删掉,否则没有实际替换掉之前老的squid.conf文件 ## 附进入容器的方法 $ sudo docker ps # 列出docker容器列表,找到容器名或者容器id $ sudo docker exec -it id号 bash # 这样就可以在容器内进行各种操作了
启动容器
# 启动容器 $ sudo docker start squid # 重启容器 $ sudo docker restart squid
使用代理
# 编辑环境变量 $ sudo vi /etc/profile # 在profile文件的最后加上以下代码 http_proxy=http://username:password@yourproxy:3128/ https_proxy_proxy=http://username:password@yourproxy:3128/ export http_proxy export https_proxy # 最后让环境变量生效 $ sudo source /etc/profile