Skip to content

Настройка простого прокси на VPS

Тут описаны базовые команды для настройки простого прокси сервера на базе облачного VPS

1. Создание ключа SSH для входа без пароля

Выполнить команду и следовать подсказкам:

bash
ssh-keygen -t rsa -b 4096 -C "ключ для VPS"

где:

  • -t - формат ключа
  • -b - размер ключа
  • -C - комментарий (по желанию)

2. Добавление пользователя, чтобы не сидеть под root

Подключаемся к VPS:

bash
ssh root@<IP>

Добавим нового пользователя, следуя подсказкам указать пароль и другую информацию:

bash
adduser <USER_NAME>

Добавим пользователя в sudo:

bash
usermod -aG sudo <USER_NAME>

Проверить, что пользователь USER_NAME добавлен в группу sudo можно командой:

bash
groups <USER_NAME>

Переключаемся на вновь созданного пользователя:

bash
su - <USER_NAME>

Создаем папку для авторизованных ssh ключей:

bash
mkdir -p ~/.ssh

Меняем права доступа к папке для авторизованных ssh ключей:

bash
chmod 700 ~/.ssh

Добавляем файл содержащий список авторизованных ssh ключей и добавляем в него содержимое файла <SSH_KEY_FILE>.pub:

bash
nano ~/.ssh/authorized_keys

Меняем права доступа к файлу авторизованных ssh ключей и добавляем в него наш ПУБЛИЧНЫЙ ключ:

bash
chmod 600 ~/.ssh/authorized_keys

Меняем файл конфигурации сервера ssh:

bash
sudo nano /etc/ssh/sshd_config

Изменим/раскомментируем строки:

PubkeyAuthentication yes

PermitRootLogin no
PasswordAuthentification no
PermitEmptyPasswords no

Перезапустим сервис ssh:

bash
sudo systemctl daemon-reload
bash
sudo 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>

Для проверки запустите новое окно (НЕ ЗАКРЫВАЙТЕ ТЕКУЩЕЕ ОКНО) терминала и попробуйте подключиться к серверу:

bash
ssh timeweb

Если неудалось подключиться проверте правильность выполнения предыдущих шагов.

3. Установка необходимых пакетов:

Для дальнейшей работы нам понадобятся следующие пакеты:

  • tinyproxy
  • dante-server
  • ufw
  • fail2ban

Устанавливаем их командой:

bash
sudo apt install -y tinyproxy dante-server ufw fail2ban

4. Настройка фаерволл:

Разрешить подключение к серверу по ssh (порт 22):

bash
sudo ufw allow OpenSSH

Открыть порты для HTTP и SOCKS5 прокси:

bash
sudo ufw allow 8888/tcp
sudo ufw allow 8080/tcp

Включить фаерволл:

bash
sudo ufw enable

Просмотреть список открытых портов:

bash
sudo ufw status numbered

5. Настройка fail2ban для защиты сервера от брутфорса

Сначала нужно создать файл с правилами блокировки:

bash
sudo nano /etc/fail2ban/jail.local

Поместим в него следующее содержимое

ini
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
backend = systemd

[sshd]
enable = true
port = ssh
logpath = %(sshd_log)s

Запустим службу fail2ban:

bash
sudo systemctl enable --now fail2ban.service

Список правил можно посмотреть командой:

bash
sudo fail2ban-client status

Список заблокированных подключений (для примера для подключения по ssh) можно посмотреть командой:

bash
sudo fail2ban-client status sshd

6. Конфигурация простейшего HTTP прокси (на примере tinyproxy):

Открыть в редакторе файл конфигурации:

bash
sudo nano /etc/tinyproxy/tinyproxy.conf

5.2. Изменить строки следующим образом:

nginx
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:

bash
sudo systemctl restart tinyproxy.service

Состояние службы и журнал:

bash
systemctl status tinyproxy.service
bash
sudo journalctl -xeu tinyproxy.service

Добавим правила для фаерволла. Откроем файл с правилами:

bash
sudo nano /etc/ufw/before.rules

Перед ключевым словом COMIT добавим следующее:

bash
#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

Сохраним файл и перезапустим фаерволл:

bash
sudo ufw reload

Это правило позволит ограничить число обращений к порту 8888 не более чем 20 раз в минуту.

7. Конфигурация простейшего SOCKS5 прокси:

Для начала нужно узнать имя Ethernet-интерфейса (сетевой адаптер) который имеет доступ в интернет:

bash
ip a

Открыть в редакторе файл конфигурации:

bash
sudo nano /etc/danted.conf

Изменить содержимое следующим образом:

yaml
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 - номер порта для протокола SOCKS5
  • external - имя Ethernet-интерфейса

Добавим правила для фаерволла. Для этого откроем файл по пути:

bash
sudo nano /etc/ufw/before.rules

Перед ключевым словом COMIT добавим следующее:

bash
#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

Сохраним файл и перезапустим фаерволл:

bash
sudo ufw reload

Это правило позволит ограничить число обращений к порту 8080 не более чем 20 раз в минуту.

Создано с VitePress