Разрешение сетевых соединений в Linux только при подключенном VPN

Существует угроза утечки трафика через основное сетевое соединение при переподключении к VPN-серверам или до установления VPN-соединения. Поэтому возникает необходимость разрешения доступа в сеть только при подключенном VPN. Это может быть осуществлено с помощью iptables:

# создание цепочек для iptables
sudo iptables -N ALLOWVPN
sudo iptables -N BLOCKALL

# разрешение доступа для интерфейсов loopback, tun и tap
sudo iptables -A OUTPUT -o tun+ -j ACCEPT;
sudo iptables -A OUTPUT -o tap+ -j ACCEPT;
sudo iptables -A OUTPUT -o lo+ -j ACCEPT;

# направление исходящего трафика через созданные цепочки
sudo iptables -A OUTPUT -j ALLOWVPN;
sudo iptables -A OUTPUT -j BLOCKALL;

# разрешение подключения к нужным IP-адресам без подключенного VPN
sudo iptables -A ALLOWVPN -d 1.2.3.4 -j ACCEPT
sudo iptables -A ALLOWVPN -d 5.6.7.8 -j ACCEPT

# блокирование всех неразрешенных соединений
sudo iptables -A BLOCKALL -j DROP

Остановить блокирование сетевых соединений без подключенного VPN:

sudo iptables -D OUTPUT -j BLOCKALL

Возобновить блокирование:

sudo iptables -A OUTPUT -j BLOCKALL

Вывод списка всех правил iptables:

sudo iptables-save

Для блокирования трафика при использовании машины как шлюза следует применить правила не только к OUTPUT, но и к FORWARD.

Если Вам необходимо простое и готовое решение, то в руководстве Разрешение доступа в сеть в Linux только через VPN с помощью NetBlocker мы предлагаем скрипт для облегчения данных действий.


показать комментарии