Предотвращение утечки трафика в обход OpenVPN-соединения в Linux



1. Системная группа
2. Правила IPTables для запрета трафика в обход OpenVPN-туннеля
3. Сброс правил IPTables
4. Готовые конфигурации с автоматическим выполнением правил IPTables

Все действия описанные ниже производятся только в терминале (консоли) Linux.

Команды начинающиеся с приглашения # выполняются от root-пользователя, приглашение $ означает выполнение от обычного пользователя.

Для получения root-прав воспользуйтесь командами sudo или su. Например, в десктопных Debian-based дистрибутивах (Ubuntu, Linux Mint и т.д.) для входа под root введите sudo su. В RedHat-based дистрибутивах (RHEL, Fedora, CentOS и т.д.), а также серверных версиях ветки Debian используйте команду su.


1. Системная группа


Создайте системную группу deepwebvpn, которая потребуется для правил IPTables в дальнейшем.
# groupadd -r deepwebvpn

Не нужно создавать группу заново каждый раз перед подключением к OpenVPN, группу необходимо создать только единожды. Проверить наличие группы можно командой ниже. В случае отсутствия группы команда вернет пустую строку.
# cat /etc/group | grep deepwebvpn
deepwebvpn:x:998:

Убедившись, что группа deepwebvpn существует, следует прописать ее в используемый OpenVPN-конфиг. Дописать опцию group deepwebvpn в конфиг-файл можно используя консольный редактор nano или команду ниже (в примере следует заменить путь до файла на необходимый).
# echo "group deepwebvpn" >> /etc/openvpn/DoubleRSA_DE1_NL1.ovpn


2. Правила IPTables


На данном этапе следует подключиться по измененному выше конфигу (в примере выше это /etc/openvpn/DoubleRSA_DE1_NL1.ovpn). После подключения необходимо выполнить следующие команды.
Выполнение команд ниже сбросит предыдущие правила IPTables, если таковые имелись.

# iptables -F
# iptables -A OUTPUT -j ACCEPT -m owner --gid-owner deepwebvpn
# iptables -A OUTPUT -j ACCEPT -o lo
# iptables -A OUTPUT -j ACCEPT -o tun+
# iptables -A INPUT -j ACCEPT -m state --state ESTABLISHED
# iptables -P OUTPUT DROP
# iptables -P INPUT DROP

После выполнения вышеизложенных правил IPTables доступа в сеть (в том числе и интернет) не будет до автоматического переподключения OpenVPN-клиента по истечению таймаута. Иными словами, следует подождать около двух минут пока VPN-клиент сам не переподключиться.


3. Сброс правил IPTables


Для сброса правил IPTables и восстановления доступа к Сети следует воспользоваться следующими командами.
# iptables -P INPUT ACCEPT; iptables -P OUTPUT ACCEPT
# iptables -F INPUT; iptables -F OUTPUT


4. Готовые конфигурации


Для корректной работы конфигураций из архивов с автоматическим выполнением правил IPTables, системная группа deepwebvpn уже должна существовать.

Архив с готовыми конфигурациями OpenVPN для Linux с автоматическим выполнением правил IPTables для предотвращения утечки трафика доступен по ссылке.
Необязательно скачивать архив со всеми конфигурациями OpenVPN для Linux с автоматическим выполнением правил IPTables, возможно также скачать архивы только с Single-цепями или Double-цепями.

Tor-ссылки архивов с конфигурациями OpenVPN для Linux с автоматическим выполнением правил IPTables: все конфигурации, только Single-цепи, только Double-цепи.

Помимо файлов-конфигураций, в архиве также присутствуют два скрипта: enable-linux-kill-switch.sh и disable-linux-kill-switch.sh. Код первого идентичен описанному в листинге в пункте Правила IPTables, во втором код из пункта Сброс правил IPTables. Перед использованием OpenVPN-конфигов с автоматическим выполнением правил IPTables следует дать скриптам права на исполнение.
# chmod u+x /etc/openvpn/enable-linux-kill-switch.sh
# chmod u+x /etc/openvpn/disable-linux-kill-switch.sh

В готовых OpenVPN-конфигах с правилами IPTables автоматическое выполнение disable-linux-kill-switch.sh закомментированно (не выполняется). Чтобы после ручного обрыва VPN-соединения автоматически сработал сброс правил IPTables и появился доступ в Сеть, следует привести строку с опцией down (убрать в начале строки символ #) в файле-конфигурации к следующему виду.
down /etc/openvpn/disable-linux-kill-switch.sh