Squid 代理 {#squid-代理}
Squid是一种开源的网络代理缓存服务器软件,它可以用来提高网络性能和安全性。它通过缓存经常访问的网页和资源,可以有效减少网络流量并提高访问速度。Squid还可以用于实施访问控制策略,例如阻止特定网站或限制特定类型的内容访问。
Squid 是 HTTP 类型的代理。
安装 {#安装}
sudo apt install squid -y
配置 {#配置}
编辑配置文件:
sudo vim /etc/squid/squid.conf
配置规则如下:
# http_port 3128 # 默认侦听在所有网卡的 3128 端口
# 如果是给内网的机器做代理就不应该侦听在外网网卡的 3128 端口上而侦听在内网网卡的 3128 端口上(假设有好几块网卡)
http_port 192.168.2.20:3128 # 设置侦听在某一块网卡的 3128 端口
# 定义日志文件位置
access_log daemon:/var/log/squid/access.log squid
# 配置缓存
cache_dir ufs /var/spool/squid3 100 16 256 # 缓存存放目录
refresh_pattern -i \.(gif|png|jpg|jpeg|ico)$ 3600 90% 86400 # 配置缓存图片文件,86400 秒刷新一次
# acl 访问控制列表,然后通过其他的配置选项来配置 acl 列表中的资源是否可以访问或者什么时候可以访问等
# 每列含义:定义 acl,此 acl 的名称,资源类型,具体的资源
acl localnet src 192.168.2.0/24 # 192.168.2.0/24 这个网段(设置只允许这个网段可以使用本机代理)
acl SSL_ports port 443 # 端口类型的访问控制列表
# acl名称可以分多条语句配置比如下面的 Safe_ports
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 # 方法类型的访问控制列表
# 访问控制规则
# 把禁止的放在前面,允许的放在后面,因为是从上往下匹配的,一条匹配中了就不会再往下匹配了
http_access deny !Safe_ports # !表示非,拒绝不在 Safe_ports 列表中的端口进行访问
http_access deny CONNECT !SSL_ports # 不在 SSL_ports 列表中的端口发起 CONNECT 请求都拒绝
http_access allow localhost manager # 允许本机访问缓存服务器
http_access deny manager # 静止其他机器访问缓存服务器
http_access allow localhost # 运行使用者对本机发起 http 请求
http_access deny all # 除了允许的,其他一切拒绝
# 例如,只允许访问 sina.com 和 163.com 这两个域名
acl localnet src 192.168.2.0/24 # 192.168.2.0/24 这个网段
acl menhu dstdomain .sina.com .163.com # 定义 acl 访问控制列表,定义域名资源使用 dstdomain,如果有资源中间使用空格来隔开,定义这个 acl 名称叫做 menhu(随意,自己认识就行)
# 下面这条语句要配置在 http_access deny all 的前面,因为规则是按先后顺序匹配的,匹配到一条之后就不会再往后匹配了
http_access allow localnet menhu # 允许 localnet 中定义的网段可以访问menhu中定义的域名
# 例如下班时间可以访问,上班时间不可以访问
acl localnet src 192.168.2.0/24
acl menhu dstdomain .sina.com .163.com
acl xiaban time MTWHFAS 18:00-23:59 # 定义下班时间,只当规则时根据的是服务器本地时间
# M:星期一 T:星期二 W:星期三 H:星期四 F:星期五 A:星期六 S:星期日
http_access allow localnet menhu xiaban # 在 xiaban 的时间段内,允许 localnet 中定义的网段可以访问 menhu 中定义的域名
# 例如,对 url 进行过滤,不允许下载 exe 文件
acl localnet src 192.168.2.0/24 # 192.168.2.0/24 这个网段
acl noexes url_regex -i \.exe$ # 使用 url 正则,-i 表示不区分大小写,.exe$ 表示以 exe 结尾的
http_access deny noexes # 禁止ulr 以 exe 结尾的不给通过
重新加载配置文件
sudo kill -SIGHUP `cat /var/run/squid.pid`
常用操作
sudo systemctl start squid.service # 启动
sudo systemctl stop squid.service # 停止
sudo systemctl restart squid.service # 重新启动
sudo systemctl status squid.service # 查看状态
Shadowsocks {#shadowsocks}
shadowsocks 是 scoks5 类型的代理。
Linux 服务端安装 {#linux-服务端安装}
这里演示安装 python 版本的 shadowsocks。
环境:
- ubuntu 20.04
- python 3.8.10
已知问题:ubuntu 22.04 上 python 版本默认是 3.10,无法运行最新的 shadowsocks 3.0.0 版本。
安装及配置步骤如下:
- 安装 pip3 和 git
sudo apt install python3-pip git
- 安装 python 版本的 shadowsocks
由于 pip 包中 shadowsocks 作者很久没有维护了,版本还是 2.8.2,所以选择从 github 仓库中安装最新的 3.0.0 版本。
sudo pip3 install git+https://github.com/shadowsocks/shadowsocks.git@master
查看版本
ssserver --version
- 配置
创建配置文件
sudo mkdir /etc/shadowsocks
sudo vim /etc/shadowsocks/shadowsocks.json
配置内容如下。
多用户配置:
{
"server": "::",
"port_password": {
"8888": "123456789",
"9999": "123456789"
},
"timeout": 300,
"method": "aes-256-gcm",
"fast_open": true
}
单用户配置:
{
"server": "::",
"server_port": 8388,
"password": "123456789",
"timeout": 300,
"method": "aes-256-gcm",
"fast_open": true
}
参数说明:
-
server : 监听地址,
::
表示监听所有 IP。 -
server_port : 监听端口。
-
password : 连接密码。
-
timeout : 超时时间。
-
method : 加密方式。
AES-256-GCM是一种高级的数据保护方法。它使用AES-256加密技术来保护数据的隐私,并使用GCM模式来确保数据没有被篡改。
好处包括:
- 强大的安全性:AES-256是一种非常强大的加密技术,使用256位密钥,使破解变得异常困难。这使得攻击者难以通过暴力破解方法来获取加密数据。
- 数据隐私:AES-256-GCM确保只有授权的人可以解密和访问数据。这对于保护敏感信息(如个人身份信息、金融数据等)非常重要。
- 数据完整性:GCM模式允许验证数据是否在传输过程中被修改。这意味着,如果数据在传输过程中被篡改,接收方可以检测到这种变化。
- 高效性:AES-256-GCM在提供强大安全性的同时,也在计算效率方面表现良好。它能够高效地处理加密和认证操作,因此不会过分降低性能。
- 广泛应用:AES-256-GCM被用于许多安全领域,如网络通信安全(TLS/SSL协议)、文件加密、存储加密等。因此,它已经得到广泛的验证和应用。
总之,AES-256-GCM是一种强大而高效的加密方式,可以在保护数据隐私和完整性方面提供可靠的解决方案。
-
fast_open : true / false,作用有减少连接延迟、改善性能、抵御封锁。
"fast_open"(快速打开)是Shadowsocks的一个特性,它具有以下作用:
减少连接延迟:在普通的网络连接中,客户端和服务器之间的通信需要经过握手过程,这会引入一定的延迟。"fast_open"允许在握手过程之前开始传输数据,从而减少连接建立的时间,提高数据传输的速度。
改善性能:特别在网络连接较差或延迟较高的情况下,"fast_open"可以显著改善通信的性能,因为它减少了开始数据传输前的等待时间。
抵御封锁:某些防火墙或网络审查系统会尝试检测Shadowsocks流量并封锁它。"fast_open"通过在连接建立时隐藏Shadowsocks流量的特征,使得阻止Shadowsocks流量变得更加困难。
总之,"fast_open"是Shadowsocks的一个优化特性,它通过减少连接延迟、提高性能以及抵御封锁等方式,增强了Shadowsocks作为一个隐私保护和翻墙工具的效果。但需要注意的是,"fast_open"的可用性可能受到操作系统和网络环境的影响。
- 创建服务配置文件
sudo vim /etc/systemd/system/shadowsocks.service
内容如下:
[Unit]
Description=Shadowsocks
[Service]
TimeoutStartSec=0
ExecStart=/usr/local/bin/ssserver -c /etc/shadowsocks/shadowsocks.json
[Install]
WantedBy=multi-user.target
- 启动服务并设置开机自启
sudo systemctl start shadowsocks.service
sudo systemctl restart shadowsocks.service
sudo systemctl stop shadowsocks.service
sudo systemctl enable shadowsocks.service
- 开启 bbr 加速
Linux Kernel 内核升级到 4.9 及以上版本可以实现 BBR 加速,由于 Ubuntu 20.04 默认的内核是 5.4
版本 ,并已经默认编译了 TCP BBR 模块,所以可以直接通过参数开启。
新的 TCP 拥塞控制算法 BBR (Bottleneck Bandwidth and RTT) 能够让服务器的带宽尽量跑满,并且尽量不出现排队的情况,所以可以让网络服务更佳稳定和高效。
修改系统变量:
echo net.core.default_qdisc=fq >> /etc/sysctl.conf
echo net.ipv4.tcp_congestion_control=bbr >> /etc/sysctl.conf
保存生效
sysctl -p
查看是否生效
# 执行下面这条命令
sysctl net.ipv4.tcp_available_congestion_control
# 如果输出下面的结果,则表示开启成功
net.ipv4.tcp_available_congestion_control = bbr cubic reno
# 也可以使用下面命令以检测 BBR 是否开启
lsmod | grep bbr
Linux 客户端 {#linux-客户端}
这里演示安装 python 版本的 shadowsocks。
环境:
- ubuntu 20.04
- python 3.8.10
已知问题:ubuntu 22.04 上 python 版本默认是 3.10,无法运行最新的 shadowsocks 3.0.0 版本。
- 安装 pip3 和 git
sudo apt install python3-pip git
- 安装 python 版本的 shadowsocks
由于 pip 包中 shadowsocks 作者很久没有维护了,版本还是 2.8.2,所以选择从 github 仓库中安装最新的 3.0.0 版本。
sudo pip3 install git+https://github.com/shadowsocks/shadowsocks.git@master
查看版本
sslocal --version
- 配置
创建配置文件
sudo mkdir /etc/shadowsocks
sudo vim /etc/shadowsocks/shadowsocks.json
配置内容如下:
{
"server": "::",
"server_port": 8388,
"local_address": "127.0.0.1",
"local_port":1080,
"password": "123456789",
"timeout": 300,
"method": "aes-256-gcm",
}
参数说明:
- server : 服务器地址。
- server_port : 服务器端口。
- local_address : 本地监听地址。
- local_port : 本地监听端口。
- password : 连接密码。
- timeout : 超时时间。
- method : 加密方式。
- 启动 / 停止
# 启动
sslocal -c /etc/shadowsocks/shadowsocks.json -d start
# 停止
sslocal -c /etc/shadowsocks/shadowsocks.json -d stop
Windows 客户端 {#windows-客户端}
从 shadowsocks/shadowsocks-windows: A C# port of shadowsocks (github.com) 这个仓库中下载最新版的客户端,配置好对应参数即可使用。
Android 客户端 {#android-客户端}
从 shadowsocks/shadowsocks-android: A shadowsocks client for Android (github.com) 这个仓库下载最新的 apk 文件安装,配置好对应参数即可使用。