如何基于openSSH部署Socks代理服务?

Forward Proxy

1 前言

一个问题,一篇文章,一出故事。
笔者需要实现Socks代理服务以便于内网的电脑客户端可以通过此代理上网,于是整理此文。

2 最佳实践

2.1 准备代理服务器

OS = Oracle Linux 9.x x86_64
IP Address = 192.168.0.90
Host Name = socks.cmdschool.org
以上服务器需要允许连接Internet,另外,系统的基本配置,请参阅以下章节,

如何完成CentOS 7.x的基本服务?


然后,你需要确保该机器的SSHD服务处于运行状态,

systemctl status sshd.service | grep "Active:"

可见如下显示,

   Active: active (running) since Tue 2024-01-16 22:00:43 CST; 4 days ago

2.2 配置代理服务

2.2.1 创建运行用户

groupadd socks
useradd -g socks -d /var/lib/socks -s /bin/bash -c "Socks Server" socks

2.2.2 配置公钥认证

如何部署公钥认证?


请参阅以上章节配置公钥认证,简单地直接执行如下命令即可,

su - socks
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys 

执行以上命令后,执行以下命令则无需输入密码可以完成登录,

su - socks
ssh socks@localhost

2.2.3 手动测试Socks代理服务命令

ssh -vv -ND 0.0.0.0:1080 socks@localhost

参数信息如下,
参数“-v”,为详细模式,使ssh打印有关其进度的调试消息
参数“-N”,禁用执行远程命令
参数“-D”,定义绑定的地址和端口
参数“root@localhost”,定义通讯转发服务器的用户名和目标地址
然后,你可以使用如下命令查看启动的进程,

pgrep -u socks ^ssh$ -a

可见如下显示,

26375 ssh -vv -ND 0.0.0.0:1080 socks@localhost

你可以使用如下命令查看倾听的端口,

netstat -antp | grep `pgrep -u socks ^ssh$`

可见如下显示,

tcp        0      0 0.0.0.0:1080            0.0.0.0:*               LISTEN      26375/ssh

根据上面的命令,我们需要使用如下命令开放防火墙端口,

firewall-cmd --permanent --add-port 1080/tcp
firewall-cmd --reload
firewall-cmd --list-all

然后,你可以使用命令行测试,

curl -s -w "%{http_code}\n" -o /dev/null -x socks5h://192.168.0.90:1080 www.baidu.com

命令行可见如下返回值,

200

或者,通过参阅下图的方法设置火狐浏览器测试,

2.2.4 配置服务控制脚本

vim /etc/systemd/system/socks.service

创建如下脚本,

[Unit]
Description=Socks server daemon
After=network.target sshd.service
Wants=sshd-keygen.target

[Service]
Type=simple
User=socks
ExecStart=/usr/bin/ssh -vv -E /var/log/socks/socks.log -ND 0.0.0.0:1080 socks@localhost
ExecReload=/bin/kill -HUP $MAINPID
UMask=0007
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

根据以上配置,你需要使用如下命令准备日志文件夹,

mkdir -p /var/log/socks/
chown socks:socks -R /var/log/socks/
chmod 775 -R /var/log/socks/

配置保存后,需要使用如下命令重载使配置生效,

systemctl daemon-reload

然后,你可以使用如下命令启动服务或配置自启动,

systemctl start socks.service
systemctl enable socks.service
systemctl status socks.service

参阅文档
===========
Socks服务的使用方法
——————–
https://coderwall.com/p/-_gmcg/ssh-sock-proxy
https://stackoverflow.com/questions/10722327/socks-proxy-forwarding

ssh客户端通过Socks服务链接SSH服务器的方法
—————————-
https://www.cnblogs.com/liuxianshen/p/use-socks-proxy-connect-remote-server-in-ssh.html

没有评论

发表回复

Forward Proxy
如何修改Squid的日志格式?

1 前言 一个问题,一篇文章,一出故事。 笔者查看Squid的访问日志发现时间部分是时间戳,笔者感觉 …

Forward Proxy
如何配实现Squid多开实例同时运行?

1 前言 一个问题,一篇文章,一出故事。 笔者整理本文的原因是遇到Squid遇到需要在同一台服务器启 …

Debian-Like
如何避免Debian客户端多处保存代理密码?

1 前言 一个问题,一篇文章,一出故事。 笔者公司的域密码策略很敏感,每次改密码,稍有不慎10分钟后 …