Шпаргалка по установке голого Shadowsocks без обфускации на дешевом VPS\VDS сервере с установленной Ubuntu 18.04 64bit Minimal (также подходит для Ubuntu 20.04)
арендуем VPS, с установленной на нем Ubuntu, поулчаем root-доступ, обновляем все
apt update && apt upgrade -y
Ставим таймзону по Москвеtimedatectl set-timezone Europe/Moscow
Ставим SS-сервер и mc для удобства дальнейших шаговapt install shadowsocks-libev mc
Правим конфиг ss-сервераmcedit /etc/shadowsocks-libev/config.json
Внутри должно быть примерно такое
{
"server":["0.0.0.0"],
"mode":"tcp_and_udp",
"server_port":4848,
"local_port":1080,
"password":"хороший-длинный-пароль-с-буквами-цифрами-решетками",
"timeout":86400,
"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 4848 # port for SS
ufw allow 22/tcp # port for sshufw enable
# this command enabling firewall !
Дополнительные команды:
ufw status numbered # вывод активных правил с нумерацией их по порядку
# разрешить соединения с 5.5.5.5/29 на 22 порт
ufw delete 6 # удалить правило под номером 6
ufw allow from 5.5.5.5/29 to any port 22ufw allow from 5.5.5.5 to any
# разрешить соединение с 5.5.5.5 на любой порт
Для оптимизации быстродействия, начиная с ядра 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
Создаем свой фильтр для 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 = 4848
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