Настройка простого прокси на VPS
Тут описаны базовые команды для настройки простого прокси сервера на базе облачного VPS
1. Создание ключа SSH для входа без пароля
Выполнить команду и следовать подсказкам:
ssh-keygen -t rsa -b 4096 -C "ключ для VPS"где:
-t- формат ключа-b- размер ключа-C- комментарий (по желанию)
2. Добавление пользователя, чтобы не сидеть под root
Подключаемся к VPS:
ssh root@<IP>Добавим нового пользователя, следуя подсказкам указать пароль и другую информацию:
adduser <USER_NAME>Добавим пользователя в sudo:
usermod -aG sudo <USER_NAME>Проверить, что пользователь USER_NAME добавлен в группу sudo можно командой:
groups <USER_NAME>Переключаемся на вновь созданного пользователя:
su - <USER_NAME>Создаем папку для авторизованных ssh ключей:
mkdir -p ~/.sshМеняем права доступа к папке для авторизованных ssh ключей:
chmod 700 ~/.sshДобавляем файл содержащий список авторизованных ssh ключей и добавляем в него содержимое файла <SSH_KEY_FILE>.pub:
nano ~/.ssh/authorized_keysМеняем права доступа к файлу авторизованных ssh ключей и добавляем в него наш ПУБЛИЧНЫЙ ключ:
chmod 600 ~/.ssh/authorized_keysМеняем файл конфигурации сервера ssh:
sudo nano /etc/ssh/sshd_configИзменим/раскомментируем строки:
PubkeyAuthentication yes
PermitRootLogin no
PasswordAuthentification no
PermitEmptyPasswords noПерезапустим сервис ssh:
sudo systemctl daemon-reloadsudo systemctl restart sshdДобавим конфигурацию для быстрого подключения (действия выполняются на ПК пользователя, а не на VPS). Для этого в папке C:\Users\<USER>\.ssh\ создадим файл config следующего содержания:
Host timeweb
HostName <VPS_IP>
User <USER_NAME>
IdentityFile C:\Users\<USER>\.ssh\<SSH_PRIVATE_KEY_FILE>Для проверки запустите новое окно (НЕ ЗАКРЫВАЙТЕ ТЕКУЩЕЕ ОКНО) терминала и попробуйте подключиться к серверу:
ssh timewebЕсли неудалось подключиться проверте правильность выполнения предыдущих шагов.
3. Установка необходимых пакетов:
Для дальнейшей работы нам понадобятся следующие пакеты:
- tinyproxy
- dante-server
- ufw
- fail2ban
Устанавливаем их командой:
sudo apt install -y tinyproxy dante-server ufw fail2ban4. Настройка фаерволл:
Разрешить подключение к серверу по ssh (порт 22):
sudo ufw allow OpenSSHОткрыть порты для HTTP и SOCKS5 прокси:
sudo ufw allow 8888/tcp
sudo ufw allow 8080/tcpВключить фаерволл:
sudo ufw enableПросмотреть список открытых портов:
sudo ufw status numbered5. Настройка fail2ban для защиты сервера от брутфорса
Сначала нужно создать файл с правилами блокировки:
sudo nano /etc/fail2ban/jail.localПоместим в него следующее содержимое
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
backend = systemd
[sshd]
enable = true
port = ssh
logpath = %(sshd_log)sЗапустим службу fail2ban:
sudo systemctl enable --now fail2ban.serviceСписок правил можно посмотреть командой:
sudo fail2ban-client statusСписок заблокированных подключений (для примера для подключения по ssh) можно посмотреть командой:
sudo fail2ban-client status sshd6. Конфигурация простейшего HTTP прокси (на примере tinyproxy):
Открыть в редакторе файл конфигурации:
sudo nano /etc/tinyproxy/tinyproxy.conf5.2. Изменить строки следующим образом:
User tinyproxy
Group tinyproxy
Port 8888
Timeout 600
MaxClients 30
Allow 0.0.0.0/0
DefaultErrorFile "/usr/share/tinyproxy/default.html"
StatFile "/usr/share/tinyproxy/stats.html"
LogFile "/var/log/tinyproxy/tinyproxy.log"
LogLevel Notice
PidFile "/run/tinyproxy/tinyproxy-1.pid"
BasicAuth ${USER_NAME} ${USER_PASSWORD}
ViaProxyName "tinyproxy"
DisableViaHeader Yes
ConnectPort 443
ConnectPort 563где:
${USER_NAME}- имя пользователя, которое будет использовано для подключения к прокси серверу${USER_PASSWORD}- пароль пользователя, которое будет использовано для подключения к прокси серверуPort- номер порта подключенияMaxClients- максимальное число пользователей, которые одновременно могут использовать прокси
Перезапускаем службу tinyproxy:
sudo systemctl restart tinyproxy.serviceСостояние службы и журнал:
systemctl status tinyproxy.servicesudo journalctl -xeu tinyproxy.serviceДобавим правила для фаерволла. Откроем файл с правилами:
sudo nano /etc/ufw/before.rulesПеред ключевым словом COMIT добавим следующее:
#TinyProxy
-A ufw-before-input -p tcp --dport 8888 -m conntrack --ctstate NEW -m hashlimit --hashlimit-name tinyproxy_limit --hashlimit-above 20/minute --hashlimit-burst 10 --hashlimit-mode srcip -j DROPСохраним файл и перезапустим фаерволл:
sudo ufw reloadЭто правило позволит ограничить число обращений к порту 8888 не более чем 20 раз в минуту.
7. Конфигурация простейшего SOCKS5 прокси:
Для начала нужно узнать имя Ethernet-интерфейса (сетевой адаптер) который имеет доступ в интернет:
ip aОткрыть в редакторе файл конфигурации:
sudo nano /etc/danted.confИзменить содержимое следующим образом:
logoutput: syslog
internal: 0.0.0.0 port = 8080
external: eth0
clientmethod: none
socksmethod: username
user.privileged: root
user.unprivileged: nobody
user.libwrap: nobody
client pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: error
}
socks pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
command: connect udpassociate bind
log: error
}где:
port- номер порта для протокола SOCKS5external- имя Ethernet-интерфейса
Добавим правила для фаерволла. Для этого откроем файл по пути:
sudo nano /etc/ufw/before.rulesПеред ключевым словом COMIT добавим следующее:
#Dante
-A ufw-before-input -p tcp --dport 8080 -m conntrack --ctstate NEW -m hashlimit --hashlimit-name dante_limit --hashlimit-above 20/minute --hashlimit-burst 10 --hashlimit-mode srcip -j DROPСохраним файл и перезапустим фаерволл:
sudo ufw reloadЭто правило позволит ограничить число обращений к порту 8080 не более чем 20 раз в минуту.