Shadowsocks на базе Ubuntu (VPS)

Шпаргалка по установке голого Shadowsocks без обфускации на дешевом VPS\VDS сервере с установленной Ubuntu 18.04 64bit Minimal (также подходит для Ubuntu 20.04, 24.04)

арендуем VPS, с установленной на нем Ubuntu, поулчаем root-доступ, обновляем все

apt update && apt upgrade -y

Ставим таймзону, например по Москве
timedatectl set-timezone Europe/Moscow

Ставим SS-сервер и mc для удобства дальнейших шагов
apt install shadowsocks-libev mc -y

Правим конфиг ss-сервера
mcedit /etc/shadowsocks-libev/config.json

Внутри должно быть примерно такое

{
"server":["0.0.0.0"],
"mode":"tcp_and_udp",
"server_port":8388,
"password":"хороший-длинный-пароль-с-буквами-цифрами-решетками",
"timeout":300,
"method":"chacha20-ietf-poly1305",
"fast_open": true
}

Ставим SS-сервер в автозапуск, стартуем его и проверяем что все поднялось

systemctl enable shadowsocks-libev && systemctl restart shadowsocks-libev
systemctl status shadowsocks-libev

Настраиваем файрвол (порт для ss-сервера должен быть тот, что указан в конфиге «server_port») источник https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-18-04-ru

apt install ufw
ufw default deny incoming
ufw default allow outgoing
ufw allow 8388 # port for SS
ufw allow 22/tcp # port for ssh

ufw allow from x.x.x.x to any port 10050 #port for your Zabbix monitoring
ufw enable # this command enabling firewall !

Дополнительные команды:

ufw status numbered # вывод активных правил с нумерацией их по порядку
ufw delete 6 # удалить правило под номером 6
ufw allow from 5.5.5.5/29 to any port 22
# разрешить соединения с 5.5.5.5/29 на 22 порт
ufw allow from 5.5.5.5 to any # разрешить соединение с 5.5.5.5 на любой порт
ufw reload #перезагрузить правила

ss #показать текущие сосединения

Для оптимизации быстродействия, начиная с ядра 4.11.хх задействуем BBR

wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh
chmod +x bbr.sh
./bbr.sh

Проверка BBR должна дать четыре YES

sysctl net.ipv4.tcp_available_congestion_control | grep -q 'bbr' && echo '1 Yes'; sysctl net.ipv4.tcp_congestion_control | grep -q 'bbr' && echo '2 Yes'; sysctl net.core.default_qdisc | grep -q 'fq' && echo '3 Yes'; lsmod | grep bbr | grep -q 'tcp_bbr' && echo '4 Yes'

Ставим Fail2ban (блокировка IP в файрволе после нескольких неуспешных попыток входа в определенный сервис, https://shadowsocks.org/en/wiki/Setup-fail2ban.html )

apt install fail2ban -y

Создаем свой фильтр для SS-сервера

tee /etc/fail2ban/filter.d/shadowsocks-libev.conf > /dev/null <<EOF
[INCLUDES]
before = common.conf

[Definition]
_daemon = ss-server

failregex = ^\w+\s+\d+ \d+:\d+:\d+\s+%(__prefix_line)sERROR:\s+failed to handshake with <HOST>: authentication error$

ignoreregex =

datepattern = %%Y-%%m-%%d %%H:%%M:%%S
EOF

правим конфиг

mcedit /etc/fail2ban/jail.d/defaults-debian.conf

Внутри должно быть что-то такое

[sshd]
enabled = true
maxretry = 3
findtime = 3600
bantime = 84600

[shadowsocks-libev]
enabled = true
filter = shadowsocks-libev
port = 8388
logpath = /var/log/syslog
maxretry = 3
findtime = 3600
bantime = 3600

Запускаем Fail2ban и проверяем его статус относительно конкретного сервиса

systemctl restart fail2ban
systemctl enable fail2ban
systemctl status fail2ban
fail2ban-client status shadowsocks-libev

Если нужно разбанить конкретный IP используем следующую команду

fail2ban-client set shadowsocks-libev unbanip 55.55.55.55

Ставим заббикс агента чтобы мониторить наш сервер (не забыть указать в конфиге агента server=x.x.x.x вашего сервера)

wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu24.04_all.deb
dpkg -i zabbix-release_latest_7.0+ubuntu24.04_all.deb
apt update

apt install zabbix-agent -y

systemctl restart zabbix-agent
systemctl enable zabbix-agent

mcedit /etc/zabbix/zabbix_agentd.conf

На стороне клиента оптимальнее всего сделать так

  • скачать само приложение https://github.com/shadowsocks
  • настроить подключение к серверу (имя\адрес сервера, пароль из конфига)
  • в браузере поставить расширение FoxyProxy
  • Настроить локальный прокси с параметрами type: SOCKS5, IP: 127.0.0.1, port: 1080
  • проверить без расширения можно включив Shadowsocks как системный прокси (в меню есть такая опция) и просто зайти браузером на какой нибудь сайт

UPD: shadowsocks для нескольких пользователе

К сожалению shadowsocks-libev не поддерживает мультипользовательские параметры. Если нужна нормальная поддержка — лучше взять другой форк. Но если очень хочется остаться все таки на нем (минимализм, он очень бережный к ресурсам и тд) то можно использовать systemctl чтобы управлять несколькими инстансами shadowsocks-libev на разных портах и с разными паролями конечно же

Создаём пользователя и группу

sudo groupadd ss-users
sudo useradd -r -s /usr/sbin/nologin -g ss-users ss-user

Настраиваем конфиги для каждого пользователя

Пример для user1 и user2:

mcedit /etc/shadowsocks-libev/user1.json

{
    "server":"0.0.0.0",
    "server_port":8400,
    "password":"password1",
    "timeout":300,
    "method":"chacha20-ietf-poly1305",
    "fast_open": true,
    "mode":"tcp_and_udp",
    "log-file":"/var/log/shadowsocks-user1.log"
}
mcedit /etc/shadowsocks-libev/user2.json
{
    "server":"0.0.0.0",
    "server_port":8401,
    "password":"password2",
    "timeout":300,
    "method":"chacha20-ietf-poly1305",
    "fast_open": true,
    "mode":"tcp_and_udp",
    "log-file":"/var/log/shadowsocks-user2.log"
}
Присвоим права пользователю:
sudo chown ss-user:ss-users /etc/shadowsocks-libev/user*.json
sudo touch /var/log/shadowsocks-user1.log /var/log/shadowsocks-user2.log
sudo chown ss-user:ss-users /var/log/shadowsocks-user*.log

Создаём systemd-шаблон

nano /etc/systemd/system/shadowsocks-libev-server@.service

[Unit]
Description=Shadowsocks-Libev Custom Server Service for %i
After=network.target

[Service]
Type=simple
User=ss-user
Group=ss-users
LimitNOFILE=32768
ExecStart=/usr/bin/ss-server -c /etc/shadowsocks-libev/%i.json

[Install]
WantedBy=multi-user.target

Перезагружаем systemd и включаем сервис

sudo systemctl daemon-reload
sudo systemctl enable shadowsocks-libev-server@user1
sudo systemctl enable shadowsocks-libev-server@user2

Запуск и проверка

sudo systemctl start shadowsocks-libev-server@user1
sudo systemctl start shadowsocks-libev-server@user2

sudo systemctl status shadowsocks-libev-server@user1
sudo systemctl status shadowsocks-libev-server@user2

Если всё настроено верно, оба сервиса будут active (running) под пользователем ss-user.

Не забудем открыть нужные (дополнительные) порты в UFW если много то прямо диапазоном)

ufw allow 8400:8410/tcp
ufw allow 8400:8410/udp

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Post Navigation

Яндекс.Метрика