Используйте OpenVPN только для одного приложения / услуги

Я использую сервер Ubuntu, размещенный в другом месте. На этом сервере одна из вещей работает - передача. Мне было интересно, могу ли я иметь VPN только для этого приложения, так как после включения VPN я теряю доступ к серверу при изменении IP.

Я видел namespaced-openvpn, но не уверен, будет ли это работать для этого приложения

(я использую Ubuntu без головы)

Спасибо

2
задан 27 May 2019 в 09:04

1 ответ

То, что вы просите, - это разделенное туннелирование с OpenVPN для передачи торрент-клиента, и сложность этого зависит от правил брандмауэра, которые вы предпочитаете. Я бы написал основы, но поскольку уже были действительно хорошие подробные статьи о , как настроить учетные данные раздельного туннелирования с резервным режимом и сделать только Transmission, чтобы следовать этим учетным данным , я только давая некоторые указатели, предполагая, что у вас уже есть рабочая конфигурация OpenVPN и надлежащее ограничение DNS (без утечек).

1. Установите sudo apt install iptables resolvconf apt-utils, пока у вас уже могут быть некоторые программы. Теперь добавьте в вашу систему нового пользователя, у которого вообще не будет никаких прав суперпользователя, sudo adduser --disabled-login zzz. zzz - это имя этого нового пользователя. Чтобы избежать головной боли от разрешения службы, добавьте zzz в свою группу, а свою в zzz.

sudo usermod -aG zzz <username>
sudo usermod -aG <group_username> zzz 

2. Проверьте ip route list и найдите линию, которая выглядит как 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.101. eth01 - это активный сетевой интерфейс, а 192.168.1.101 - это inet. Ваш может быть другим. Следите за ними, следуя предстоящим сценариям.

3. Флеш iptables правил sudo iptables --flush. Добавьте правило, ограничивающее пользователя zzz обычным сетевым интерфейсом, работает только через туннель OpenVPN.

sudo iptables -A OUTPUT ! -o lo -m owner --uid-owner zzz -j DROP

Установите sudo apt install iptables-persistent и нажмите ДА для получения любого запрашиваемого разрешения.

[+1168] 4. [+1168] Создайте новый файл сценария в каталоге конфигурации openvpn sudo nano /etc/openvpn/iptables.sh и добавьте этот сценарий.

#! /bin/bash

export INTERFACE="tun0"
export VPNUSER="zzz" # watch out.
export LOCALIP="192.168.1.101"
export NETIF="eth0"

# Look up the first article on "iptables Script for vpn User" section for the script, I don't know if I'm allowed to paste that. 
# The script simply  uses iptables built-in chains to redirect network traffic to VPN.

Сделать этот скрипт исполняемым sudo chmod 755 /etc/openvpn/iptables.sh.
Создайте сценарий IP-маршрутизации sudo nano /etc/openvpn/routing.sh и введите

#! /bin/bash

VPNIF="tun0"
VPNUSER="zzz"

# Look up the first article on "Routing Rules Script for the Marked Packets" section for the script, I don't know if I'm allowed to paste that.
# The script simply puts some routing commands to block the traffic when VPN goes down.

. Сделайте этот сценарий исполняемым sudo chmod 755 /etc/openvpn/routing.sh

5. Добавьте новое пользовательское значение zzz в таблицу IP-маршрутизации sudo nano /etc/iproute2/rt_tables. Просто добавьте 200 zzz в последнюю строку.
Кроме того, вы можете добавить новый параметр ядра config как sudo nano /etc/sysctl.d/zzz.conf и поставить

net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2
net.ipv4.conf.eth0.rp_filter = 2

Это может быть необязательно, так как это только усиливает безопасность до уровня ядра.
Перезагрузить sysctl и systemd sudo sysctl --system, sudo systemctl daemon-reload. Теперь проверьте, хорошо ли работает openvpn, systemctl status openvpn@openvpn.service и ваш конечный IP-адрес openvpn от имени пользователя zzz, sudo -u vpn -i -- curl ifconfig.co

Если curl показывает правильный VPN-IP, то вы можете использовать его следующие шаги. Вы не должны быть отключены от сервера.

[+1159] 6. Остановите службу передачи-демона, sudo systemctl stop transmission-daemon. Создайте новый каталог и конфигурацию systemd в sudo mkdir -p /etc/systemd/system/transmission-daemon.service.d && sudo nano /etc/systemd/system/transmission-daemon.service.d/local.conf. Вставьте конфигурацию

[Unit]
After=sys-devices-virtual-net-tun0.device
Wants=sys-devices-virtual-net-tun0.device

[Service]
User=
User=zzz
Group=
Group=zzz

Type=simple

ExecStart=
ExecStart=/usr/bin/transmission-daemon -f --log-error -g /etc/transmission-daemon

Restart=on-failure
RestartSec=5

Это позволит службе transmission работать только после запуска службы openvpn. Перезагрузить systemd sudo systemctl daemon-reload.

[+1161] 7. Добавление надлежащего пользователя, группы и разрешения на передачу

sudo chown -R zzz:zzz /etc/transmission-daemon/ && sudo chmod -R 775 /etc/transmission-daemon/
sudo chown -R zzz:zzz /var/lib/transmission-daemon/ && sudo chmod -R 775 /var/lib/transmission-daemon/

Сделайте то же самое для всех загружаемых папок передачи, например sudo chown -R zzz:zzz ~/Downloads && sudo chmod -R 775 ~/Download.
Добавить измененный каталог в настройки передачи sudo nano /etc/transmission-daemon/settings.json,

"download-dir": "/home/Downloads",
"umask": 002,

8. Наконец включите sudo systemctl start transmission-daemon.service. Если вы используете веб-интерфейс Transmission, следуйте методу nginx. Вы можете проверить, работает ли торрент с IP openvpn здесь .

0
ответ дан 27 May 2019 в 09:04

Другие вопросы по тегам:

Похожие вопросы: