Отключить доступ к Интернету, только если его доступ через VPN на Ubuntu 17

Есть ли способ предотвратить использование моей системой обычного интернета и ограничить его только использованием VPN только на Ubuntu 17? FYI, я уже установил protonvpn через файлы .ovpn и в настоящий момент просто подключился к нему, включив его с выпадающим меню.

Я хочу заставить все подключения использовать только VPN, а если vpn недоступен, он должен предотвращать все типы подключений к Интернету.

Я знаю, что это связано с настройкой маршрутов в разделе IPv4, но я не уверен, что.

2
задан 6 March 2018 в 19:24

6 ответов

[D0] Да. Используйте ufw.

Когда вы подключаетесь к VPN, он создает виртуальное устройство. Предполагая, что ваше имя ethernet enp3s0, и ваш VPN-сервер прослушивает порт 1194, используйте эти команды.

# Default policies ufw default deny incoming ufw default deny outgoing # Openvpn interface (adjust interface accordingly to your configuration) ufw allow in on tun0 ufw allow out on tun0 # Local Network (adjust ip accordingly to your configuration) ufw allow in on enp3s0 from 192.168.1.0/24 ufw allow out on enp3s0 to 192.168.1.0/24 # Openvpn (adjust port accordingly to your configuration) ufw allow in on enp3s0 from any port 1194 ufw allow out on enp3s0 to any port 1194

Если вы подключаете сервер по имени, а не по IP-адресу, вы должны разрешить утечку DNS вне VPN. Добавьте эти commamds:

# DNS ufw allow in from any to any port 53 ufw allow out from any to any port 53

Затем используйте ufw enable, чтобы включить эти правила. ufw disable, если что-то пойдет не так или вам нужен прямой доступ.

Предоставлено ArchWiki.

0
ответ дан 17 July 2018 в 19:29

Множество способов, но это зависит от того, какое конкретное программное обеспечение VPN вы используете.

Вы можете запретить системе получать доступ к сети, если не на VPN, отредактировав конфигурацию интерфейса, либо в /etc/network/interfaces или (более вероятно, если вы используете настольную систему) из NetworkManager. Откройте NM, выберите «настроить сети» или некоторые такие, а затем отредактируйте параметры того, как каждый интерфейс получает свой адрес, чтобы иметь статические маршруты, которые не включают маршрут по умолчанию (или добавить маршрут по умолчанию в черную дыру). Затем настройте свою VPN, чтобы дать вам маршрут по умолчанию, когда он появится.

Без дополнительной информации о вашей настройке это примерно столько, сколько я могу сказать.

1
ответ дан 17 July 2018 в 19:29

Решение заключается в использовании iptables для отказа от всего исходящего трафика, за исключением случаев, когда трафик проходит через туннель.

Если туннель поврежден, доступ к Интернету больше невозможен до тех пор, пока туннель не будет установлен снова.

Я предполагаю, что вы используете маршрутизацию на основе TUN для подключения к OpenVPN и что вы используете опцию клиента OpenVPN с перенаправлением-шлюзом.

Создайте файл в любом месте (например, /root/iptables.vpn), вы должны изменить [VPN_IP] и [VPN_PORT] на ip: порт сервера vpn

*mangle :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] COMMIT *nat :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] COMMIT # Set a default DROP policy. *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT DROP [0:0] # Allow basic INPUT traffic. -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT # Allow basic OUTPUT traffic. -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A OUTPUT -o lo -j ACCEPT -A OUTPUT -p icmp -j ACCEPT # Allow traffic to the OpenVPN server and via the tunnel. -A OUTPUT -o tun+ -j ACCEPT -A OUTPUT -p udp -m udp -d [VPN_IP] --dport [VPN_PORT] -j ACCEPT # Reject everything else. -A INPUT -m conntrack --ctstate INVALID -j DROP -A INPUT -j REJECT --reject-with icmp-port-unreachable -A FORWARD -j REJECT --reject-with icmp-port-unreachable -A OUTPUT -j REJECT --reject-with icmp-port-unreachable COMMIT

После установления соединения с сервером vpn вам необходимо включить правила:

iptables-restore < /root/iptables.vpn

Весь трафик теперь будет маршрутизироваться через туннель.

[VPN_IP] Как пишет автор, он запускает соединение, используя подход к сетевому диспетчеру, поэтому проблема в том, что он не знает удаленный ip сервера, поскольку он схвачен из пула. Я думаю (но пока у меня нет времени проверить это решение), что один из подходов может быть:

Измените ранее созданный файл (в нашем примере /root/iptables.vpn), заменив [VPN_IP] с $ route_vpn_gateway и [VPN_PORT] с $ remote_port. Создайте сценарий (например, /etc/openvpn/route.sh): while read line do eval "echo ${line}" done < /root/iptables.vpn | /sbin/iptables-restore -v

(https://stackoverflow.com

Измените ранее созданный файл (в нашем примере /root/iptables.vpn), заменив [VPN_IP] на $ route_vpn_gateway и [VPN_PORT] с $ remote_port script-security 2 /etc/openvpn/route.sh

( https://stackoverflow.com/questions/ 5289665 / use-external-file-with-variables )

Скрипт будет запускаться каждый раз, когда будет установлено соединение с vpn.

Как уже упоминалось, я не протестировал это ...

Не забудьте очистить iptables после закрытия vpn-соединения

5
ответ дан 17 July 2018 в 19:29
[D0] Да. Используйте ufw.

Когда вы подключаетесь к VPN, он создает виртуальное устройство. Предполагая, что ваше имя ethernet enp3s0, и ваш VPN-сервер прослушивает порт 1194, используйте эти команды.

# Default policies ufw default deny incoming ufw default deny outgoing # Openvpn interface (adjust interface accordingly to your configuration) ufw allow in on tun0 ufw allow out on tun0 # Local Network (adjust ip accordingly to your configuration) ufw allow in on enp3s0 from 192.168.1.0/24 ufw allow out on enp3s0 to 192.168.1.0/24 # Openvpn (adjust port accordingly to your configuration) ufw allow in on enp3s0 from any port 1194 ufw allow out on enp3s0 to any port 1194

Если вы подключаете сервер по имени, а не по IP-адресу, вы должны разрешить утечку DNS вне VPN. Добавьте эти commamds:

# DNS ufw allow in from any to any port 53 ufw allow out from any to any port 53

Затем используйте ufw enable, чтобы включить эти правила. ufw disable, если что-то пойдет не так или вам нужен прямой доступ.

Предоставлено ArchWiki.

0
ответ дан 23 July 2018 в 20:14
  • 1
    Я использую protonvpn, как узнать, какие порты его используют, поэтому я могу его открыть. – Patoshi パトシ 15 March 2018 в 18:00
  • 2
    Его 1194. Если у вас есть .ovpn файл, просто прочитайте его. – Barafu Albino 16 March 2018 в 18:25

Множество способов, но это зависит от того, какое конкретное программное обеспечение VPN вы используете.

Вы можете запретить системе получать доступ к сети, если не на VPN, отредактировав конфигурацию интерфейса, либо в /etc/network/interfaces или (более вероятно, если вы используете настольную систему) из NetworkManager. Откройте NM, выберите «настроить сети» или некоторые такие, а затем отредактируйте параметры того, как каждый интерфейс получает свой адрес, чтобы иметь статические маршруты, которые не включают маршрут по умолчанию (или добавить маршрут по умолчанию в черную дыру). Затем настройте свою VPN, чтобы дать вам маршрут по умолчанию, когда он появится.

Без дополнительной информации о вашей настройке это примерно столько, сколько я могу сказать.

1
ответ дан 23 July 2018 в 20:14
  • 1
    Я использую protonvpn и настраиваю его через openvpn. В настоящее время, когда я хочу использовать vpn, я просто нажимаю vpn и выбираю свой регион из верхнего меню на ubuntu 17. – Patoshi パトシ 5 March 2018 в 23:43
  • 2
    prntscr.com/inf417 - я могу изменить DNS там? – Patoshi パトシ 6 March 2018 в 08:10

Решение заключается в использовании iptables для отказа от всего исходящего трафика, за исключением случаев, когда трафик проходит через туннель.

Если туннель поврежден, доступ к Интернету больше невозможен до тех пор, пока туннель не будет установлен снова.

Я предполагаю, что вы используете маршрутизацию на основе TUN для подключения к OpenVPN и что вы используете опцию клиента OpenVPN с перенаправлением-шлюзом.

Создайте файл в любом месте (например, /root/iptables.vpn), вы должны изменить [VPN_IP] и [VPN_PORT] на ip: порт сервера vpn

*mangle :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] COMMIT *nat :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] COMMIT # Set a default DROP policy. *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT DROP [0:0] # Allow basic INPUT traffic. -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT # Allow basic OUTPUT traffic. -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A OUTPUT -o lo -j ACCEPT -A OUTPUT -p icmp -j ACCEPT # Allow traffic to the OpenVPN server and via the tunnel. -A OUTPUT -o tun+ -j ACCEPT -A OUTPUT -p udp -m udp -d [VPN_IP] --dport [VPN_PORT] -j ACCEPT # Reject everything else. -A INPUT -m conntrack --ctstate INVALID -j DROP -A INPUT -j REJECT --reject-with icmp-port-unreachable -A FORWARD -j REJECT --reject-with icmp-port-unreachable -A OUTPUT -j REJECT --reject-with icmp-port-unreachable COMMIT

После установления соединения с сервером vpn вам необходимо включить правила:

iptables-restore < /root/iptables.vpn

Весь трафик теперь будет маршрутизироваться через туннель.

[VPN_IP] Как пишет автор, он запускает соединение, используя подход к сетевому диспетчеру, поэтому проблема в том, что он не знает удаленный ip сервера, поскольку он схвачен из пула. Я думаю (но пока у меня нет времени проверить это решение), что один из подходов может быть:

Измените ранее созданный файл (в нашем примере /root/iptables.vpn), заменив [VPN_IP] с $ route_vpn_gateway и [VPN_PORT] с $ remote_port. Создайте сценарий (например, /etc/openvpn/route.sh): while read line do eval "echo ${line}" done < /root/iptables.vpn | /sbin/iptables-restore -v

(https://stackoverflow.com

Измените ранее созданный файл (в нашем примере /root/iptables.vpn), заменив [VPN_IP] на $ route_vpn_gateway и [VPN_PORT] с $ remote_port script-security 2 /etc/openvpn/route.sh

( https://stackoverflow.com/questions/ 5289665 / use-external-file-with-variables )

Скрипт будет запускаться каждый раз, когда будет установлено соединение с vpn.

Как уже упоминалось, я не протестировал это ...

Не забудьте очистить iptables после закрытия vpn-соединения

5
ответ дан 23 July 2018 в 20:14
  • 1
    но мой ip-сервер vpn постоянно меняется, поскольку я использую protonvpn.com в качестве поставщика услуг. – Patoshi パトシ 12 March 2018 в 19:42
  • 2
    Это не работает с хостами VPN-хостов с переменным восходящим потоком. – Thomas Ward♦ 12 March 2018 в 21:22

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

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