如何基于openSSH部署Socks代理服务?
- By : Will
- Category : 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,另外,系统的基本配置,请参阅以下章节,
然后,你需要确保该机器的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
没有评论