#!/bin/bash
# SOCKS5 一键安装脚本
# 支持系统:Ubuntu/Debian/CentOS
red(){
echo -e "\033[31m\033[01m$1\033[0m"
}
green(){
echo -e "\033[32m\033[01m$1\033[0m"
}
yellow(){
echo -e "\033[33m\033[01m$1\033[0m"
}
blue(){
echo -e "\033[34m\033[01m$1\033[0m"
}
# 检查系统
check_sys(){
if [[ -f /etc/redhat-release ]]; then
release="centos"
elif cat /etc/issue | grep -q -E -i "debian"; then
release="debian"
elif cat /etc/issue | grep -q -E -i "ubuntu"; then
release="ubuntu"
elif cat /etc/issue | grep -q -E -i "centos|red hat|redhat"; then
release="centos"
elif cat /proc/version | grep -q -E -i "debian"; then
release="debian"
elif cat /proc/version | grep -q -E -i "ubuntu"; then
release="ubuntu"
elif cat /proc/version | grep -q -E -i "centos|red hat|redhat"; then
release="centos"
fi
}
# 安装依赖
install_dependencies(){
blue "正在安装必要依赖..."
if [[ ${release} == "centos" ]]; then
yum install -y gcc make wget
yum groupinstall -y "Development Tools"
else
apt-get update
apt-get install -y gcc make wget
apt-get install -y build-essential
fi
}
# 安装Dante-server
install_dante(){
blue "正在安装Dante SOCKS5服务器..."
cd /tmp
wget https://www.inet.no/dante/files/dante-1.4.3.tar.gz
tar -xzf dante-1.4.3.tar.gz
cd dante-1.4.3
./configure
make && make install
# 创建配置文件目录
mkdir -p /etc/danted
}
# 创建配置文件
create_config(){
local port=${1:-1080}
local user=${2:-socks5}
local pass=${3:-$(tr -dc A-Za-z0-9 < /dev/urandom | head -c 12)}
blue "正在创建配置文件..."
cat > /etc/danted/sockd.conf << EOF
# Dante SOCKS5 服务器配置
logoutput: syslog
user.privileged: root
user.unprivileged: nobody
# 监听端口
internal: 0.0.0.0 port = ${port}
external: eth0
# 认证方法
socksmethod: username
clientmethod: none
# 客户端规则
client pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: error connect disconnect
}
# SOCKS规则
socks pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: error connect disconnect
socksmethod: username
}
EOF
# 创建用户
useradd -r -s /bin/false ${user}
echo "${user}:${pass}" | chpasswd
green "================================"
green "SOCKS5 服务器安装完成!"
green "地址: $(curl -s ifconfig.me)"
green "端口: ${port}"
green "用户名: ${user}"
green "密码: ${pass}"
green "================================"
yellow "使用示例: curl --socks5 ${user}:${pass}@$(curl -s ifconfig.me):${port} http://ifconfig.me"
}
# 创建systemd服务
create_service(){
blue "正在创建系统服务..."
cat > /etc/systemd/system/sockd.service << EOF
[Unit]
Description=Dante SOCKS5 Server
After=network.target
[Service]
Type=forking
PIDFile=/var/run/sockd.pid
ExecStart=/usr/local/sbin/sockd -D
ExecReload=/bin/kill -HUP \$MAINPID
ExecStop=/bin/kill -TERM \$MAINPID
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable sockd
systemctl start sockd
# 检查服务状态
if systemctl is-active --quiet sockd; then
green "SOCKS5 服务启动成功!"
else
red "服务启动失败,请检查配置"
exit 1
fi
}
# 防火墙设置
setup_firewall(){
local port=$1
blue "正在配置防火墙..."
if command -v ufw &> /dev/null; then
ufw allow ${port}
ufw reload
elif command -v firewall-cmd &> /dev/null; then
firewall-cmd --permanent --add-port=${port}/tcp
firewall-cmd --reload
elif command -v iptables &> /dev/null; then
iptables -I INPUT -p tcp --dport ${port} -j ACCEPT
iptables-save > /etc/iptables/rules.v4
fi
green "防火墙端口 ${port} 已开放"
}
# 显示使用说明
show_usage(){
blue "================================"
blue "SOCKS5 服务器管理命令:"
blue "启动: systemctl start sockd"
blue "停止: systemctl stop sockd"
blue "重启: systemctl restart sockd"
blue "状态: systemctl status sockd"
blue "日志: journalctl -u sockd -f"
blue "配置文件: /etc/danted/sockd.conf"
blue "================================"
}
# 主函数
main(){
yellow "开始安装 SOCKS5 服务器..."
# 检查root权限
if [[ $EUID -ne 0 ]]; then
red "请使用 root 权限运行此脚本!"
exit 1
fi
# 检查系统
check_sys
# 设置参数
PORT=1080
USER="socks5"
echo ""
read -p "请输入SOCKS5端口 (默认: 1080): " input_port
[[ -n "$input_port" ]] && PORT="$input_port"
read -p "请输入用户名 (默认: socks5): " input_user
[[ -n "$input_user" ]] && USER="$input_user"
# 安装步骤
install_dependencies
install_dante
create_config ${PORT} ${USER}
create_service
setup_firewall ${PORT}
show_usage
green "安装完毕!"
}
# 执行主函数
main "$@"
使用方法:
保存脚本:
nano install-socks5.sh