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