在Ubuntu和CentOS中配置Squid正向代理

在Ubuntu和CentOS中配置Squid正向代理

背景

所谓正向代理,就是代替真实的client去做请求;反向代理,就是代替真实的server提供服务(我们最熟悉的nginx一般用在反向代理中)。

在某些场景下,我们需要配置一个正向代理的服务器,让特定的服务请求,从这台代理服务器发出。

下面尝试用Squid分别在ubuntu和centos系统中配置一个正向代理服务器。

操作步骤

安装

首先安装依赖包和squid;

ubuntu:

sudo apt update
sudo apt install apache2-utils apt-transport-https gnupg2 software-properties-common
sudo apt install squid

centos:

sudo yum update
sudo yum install -y vim
sudo yum install -y squid

配置参数

Squid配置文件位置如下:

/etc/squid/squid.conf

这里先做一个配置备份;

cp /etc/squid/squid.conf /etc/squid/squid.conf.bak

然后执行

sudo vim /etc/squid/squid.conf 

进行如下内容的编辑。

请注意:下述内容是以ubuntu系统的默认squid.conf作为示例进行说明的,我发现centos的默认squid.conf文件的内容比ubuntu的要少。如果使用的是centos系统,在squid.conf文件中没有看到下面描述的参数,则直接添加到文件中即可。

配置访问控制

http_access deny all 

这一行,前面添加#注释掉;然后在它前面加一行

http_access allow all

配置缓存

# cache_dir ufs /var/spool/squid 100 16 256

这一行,删除前面的#注释,让其生效。

配置Squid日志

找到

# access_log daemon:/var/log/squid/access.log squid
# cache_log /var/log/squid/cache.log

改为

access_log /var/log/squid/access.log squid
cache_log /var/log/squid/cache.log

配置端口

找到

http_port 3128

改为

http_port 31000

配置缓存文件大小

找到

# cache_mem 256 MB

这一行,删除前面的#注释,让其生效。

做完上述配置后:wq保存退出。

注:squid.conf中还有很多很多其他参数可以设置,这里只是做基本的配置。有其他需求可以参考squid.conf中的注释说明或者网上资料按需配置。

启动服务

重启squid服务,设置开机启动,并检查服务状态;

sudo systemctl restart squid
sudo systemctl enable squid
sudo systemctl status squid

修改服务器防火墙

centos系统默认防火墙是开启的。我们需要开放提供服务的tcp 31000端口,好让其他服务器使用我们配置的代理服务。

sudo firewall-cmd --list-all 
sudo firewall-cmd --permanent --add-port=31000/tcp
sudo firewall-cmd --reload
sudo systemctl restart squid
sudo systemctl enable squid
sudo systemctl status squid

我的ubuntu系统没有设置系统防火墙,所以没有做这部分操作。

验证可用性

在该服务器上执行

curl -x 127.0.0.1:31000 www.baidu.com

可以curl出结果;

我这台服务器的内网IP是10.55.4.20;

因此我从其他服务器上执行

curl -x 10.55.4.20:31000 www.baidu.com

也可以成功curl出结果。

证明代理服务器工作正常。

配置使用代理的Client服务器

上面我们完成了提供Squid正向代理的服务器。下面就可以配置实际的Client服务器来使用这个代理了。

这部分我参考了这个文章https://blog.csdn.net/Richardlygo/article/details/107496011。

临时设置代理

在Client服务器中执行

export proxy=http://10.55.4.20:31000
export http_proxy="http://10.55.4.20:31000"
export https_proxy="http://10.55.4.20:31000"

然后curl www.baidu.com成功后,在squid服务器中cat /var/log/squid/access.log,就可以看到这个请求的log,证明请求是走的代理服务器。

永久设置代理

在/etc/profile中全局设置的最前面,或最后部分,添加以下配置

# sudo vim /etc/profile
export proxy=http://10.55.4.20:31000
export http_proxy="http://10.55.4.20:31000"
export https_proxy="http://10.55.4.20:31000"
export ftp_proxy="http://10.55.4.20:31000"

保存文件后,执行

source /etc/profile

这样即使重启client服务器,代理配置依旧会生效。

上述指令中,还可添加类似如下的指令,来设置不通过代理的域名或者IP列表;

export no_proxy=localhost,127.0.0.1,192.168.0.200,192.168.0.100,192.168.0.101,10.244.0.0/16
export no_proxy=docker.ilanni.com,172.10.10.10
export no_proxy="*.xxx.com,10.*,www.baidu.com"

其他

其他可能有用的操作

根据上面的配置,通过cat /var/log/squid/access.log 可以查看访问的log,类似下图

如下指令可检查服务端口是否正常。

netstat -anplt | grep 31000
ss -anplt | grep 31000

生产环境需要注意的地方

1. 我这里是测试,所以访问控制是全放开的,实际上这部分应该限制的更严格;在/etc/squid/squid.conf中配置格式类似如下;

acl localnet src 192.168.1.0/24  //定义本地网段
http_access allow localnet  //允许本地网段使用

2. 如果是云端部署的机器,建议服务器的安全组只针对使用代理服务器的公网IP开放指定的服务端口,如本文中的31000;

3. 根据网上的资料,还可给代理服务器配置身份验证,这样请求的时候需要带上用户名密码,这部分可参考链接 https://blog.csdn.net/avatar_2009/article/details/131116230;

参考链接

https://pythonjishu.com/sseqmypcdpqxdku/

https://blog.csdn.net/Richardlygo/article/details/107496011

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注