# docker

docker pull ubuntu/squid
1
docker run -d --name squid-container -e TZ=UTC -p 3128:3128 ubuntu/squid
1

# Parameters

Parameter Description
-e TZ=Asia/Shanghai Timezone.
-p 3128:3128 Expose the proxy service
-v /path/to/logs:/var/log/squid Volume to store squid logs
-v /path/to/data:/var/spool/squid Volume to store the squid cache
-v /path/to/main/config:/etc/squid/squid.conf Main squid configuration file
-v /path/to/config/snippet:/etc/squid/conf.d/snippet.conf Configuration snippets included by squid.conf

# Ubuntu

1.安装squid

sudo apt install squid
1

2.修改 squid.conf

cd /etc/squid
mv squid.conf squid.conf.bak
vi squid.conf
1
2
3

/etc/squid/squid.conf修改如下

http_port 3128 # 代理监听端口
cache_dir ufs /var/spool/squid 1000 64 1024
http_access allow all

# 默认端口3128
1
2
3
4
5
acl myip src 192.168.43.196/32
http_port 3128
cache_dir ufs /var/spool/squid 1000 64 1024
http_access allow myip
1
2
3
4
# auth
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/user.pass
auth_param basic realm Welcome to lxt
auth_param basic credentialsttl 4 hours
http_port 3128
cache_dir ufs /var/spool/squid 1000 64 1024

acl lxt proxy_auth REQUIRED
http_access allow lxt
1
2
3
4
5
6
7
8
9

3.启动squid

squid -k parse # 检查语法是否有错
squid -z # 初始化并启动squid 初始化缓存空间

sudo systemctl restart squid
1
2
3
4

# 命令

squid -v
squid -k shutdown # 停止 squid
squid -k parse # 验证 squid.conf 的 语法和配置  # 检查语法是否有错
squid -k reconfigure # 载入新的配置文件
/usr/sbin/squid -k rotate 轮循日志 

# 要使squid重新加载配置文件是不用重新启动squid服务的,只需要运行:
$ squid -k reconfigure

sudo systemctl restart squid # 服务重启
1
2
3
4
5
6
7
8
9
10

# 访问控制

# ACL 规则优先级 (opens new window)

当一个用户访问代理服务器时,Squid 会顺序匹配 Squid中定义的所有规则列表,一旦匹配成功,立即停止匹配。当所有规则都不匹配时,Squid 会使用与最后一条相反的规则。

1、ACL元素是squid的访问控制的基础。这里告诉你如何指定包括IP、端口、主机名、url匹配变量。每个ACL元素都有个名字在编写访问规则的时候需要引用,基本元素如下:

acl name type value1 value2 value3
acl myip src 192.168.43.196/32
1
2

ACL的元素语法

acl name acltype value1 value2 ....

示例

acl localnet src 10.0.0.0/8 定义原地址范围网段

acl localhost src 10.67.124.191 定义单个主机原地址

其中,acltype可以是src、dst、srcdomain、dstdomain、url_regex、time、port、proto、time中的任意一种,一下我们逐一分析!

列表类型 含义/用途 列表内容示例
src IP地址、网段、IP地址范围(客户机IP地址) 10.67.124.0/23 10.67.50.0/23
dst 目标IP地址、网段主机名(服务器IP地址 216.182.154.9 216.182.154.0/24
port 目标端口 80 443 20 22
srcdomain 源名称(客户机所属的域) 暂不测试
dstdomain 目标名称(服务器所属的域) .qq.com .weibo.com.163.com
time 字母表示一星期中各天的英文缩写MTWHFAS **MTWHF 8:30-17:30(周一至周五的时刻)**12:30-13:30AS(周六、日
maxconn 每个客户机的并发连接数 X
url_regex 目标资源的URL地址,-i表示忽略大小写 url_regex -i ^rtsp://
urlpath_regex 目标资源的整个URL路径 urlpath_regex -i sex adult urlpath_regex -i .mp3$

# htpasswd的用法:

4.其他电脑需要使用用户名和密码才能上网,主要是用于临时使用网络

a.首先需要生成一个密码文件

lixt@ubuntu:/$ sudo htpasswd -c /etc/squid/user.pass lixt
New password:
Re-type new password:
Adding password for user lixt
上面就已经增加了一个lixt帐户
1
2
3
4
5
1.增加用户
htpasswd  /etc/squid/user.pass lixt
2.修改用户密码:
htpasswd -d /etc/squid/user.pass lixt
3.删除用户:
htpasswd -D /etc/squid/user.pass lixt
1
2
3
4
5
6

b.编辑/etc/squid/squid.conf

find / -name "basic_ncsa*"
1
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/user.pass
# auth_param basic program /usr/lib64/squid/ncsa_auth /etc/squid/user.pass
# 由于我使用的是64位的centos所以上面是/usr/lib64/squid/ncsa_auth
# 那后面跟的就是刚才生成密码文件的位置/etc/squid/user.pass

# auth_param basic children 5
//指定认证程序的进程数
auth_param basic realm Welcome to lixt
//浏览器显示输入用户/密码对话框时的领域内容 

# auth_param basic credentialsttl 4 hours
# 基本的认证有效时间

acl lixt proxy_auth REQUIRED
# 普通用户需要通过认证才能访问Internet

http_access allow lixt
最后需要加入一行:
http_access deny all 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19