UFW для OpenVPN

17

Я хочу настроить UFW (несложный межсетевой экран) для OpenVPN.

Соединения разрешены только через OpenVPN. Все остальное должно быть заблокировано. Так что если OpenVPN отключен -> нет интернета! Я нашел этот скрипт в Интернете, и я хочу знать, достаточно ли он хорош. Или я должен добавить больше правил?

#!/bin/bash
###########################################
#          Created by Thomas Butz         #
#   E-Mail: btom1990(at)googlemail.com    #
#  Feel free to copy & share this script  #
###########################################

# Adapt this value to your config!
VPN_DST_PORT=3478

# Don't change anything beyond this point
###########################################

# Check for root priviliges
if [[ $EUID -ne 0 ]]; then
   printf "Please run as root:\nsudo %s\n" "${0}"
   exit 1
fi


# Reset the ufw config
ufw --force reset

# let all incoming traffic pass
ufw default allow incoming
# and block outgoing by default
ufw default deny outgoing

# Every communiction via VPN is considered to be safe
ufw allow out on tun0

# Don't block the creation of the VPN tunnel
ufw allow out $VPN_DST_PORT
# Don't block DNS queries
ufw allow out 53

# Allow local IPv4 connections
ufw allow out to 10.0.0.0/8
ufw allow out to 172.16.0.0/12
ufw allow out to 192.168.0.0/16
# Allow IPv4 local multicasts
ufw allow out to 224.0.0.0/24
ufw allow out to 239.0.0.0/8

# Allow local IPv6 connections
ufw allow out to fe80::/64
# Allow IPv6 link-local multicasts
ufw allow out to ff01::/16
# Allow IPv6 site-local multicasts
ufw allow out to ff02::/16
ufw allow out to ff05::/16

# Enable the firewall
ufw enable

Источник: http://pastebin.com/AUHh6KnV

Алекс М.
источник
Выглядит хорошо! Просто попробуйте и посмотрите, работает ли он, если есть какие-либо проблемы, которые вы всегда можете отключить, ufwиспользуя sudo ufw disableи удалить все правила брандмауэра, используя sudo ufw --force reset. Что возможно могло пойти не так? ;-)
ntninja
2
Я мог бы не разрешить весь входящий трафик, так как он сам по себе позволит openvpn работать.
JVE999
2
по умолчанию вы всегда должны запрещать входящие соединения ...
n00dl3
Этот скрипт явно сделан для обмена файлами. Отказ во входящих соединениях разрушает цель. Это дает вам поведение "Killswitch" коммерческих приложений VPN - не больше, не меньше.
emk2203
@ emk2203 нет, он запрещает входящий трафик вне туннеля.
бербт

Ответы:

8

Конфиг может быть более строгим

ufw --force reset

ufw default deny incoming # Use the VPN tunnel for all traffic
ufw default deny outgoing

ufw allow out on tun0
ufw allow in on tun0

ufw allow out $port/$protocol # e.g. 1234/udp, depending on your OpenVPN client config

# Prefer resolved hosts to connect to your VPN, enable only if your VPN provider doesn't give you that option
#ufw allow out 53

# Allow local IPv4 connections, enable as needed, set specific IPs or tighter subnet masks if possible
#ufw allow out to 10.0.0.0/8
#ufw allow out to 172.16.0.0/12
#ufw allow out to 192.168.0.0/16
# Allow IPv4 local multicasts
#ufw allow out to 224.0.0.0/24
#ufw allow out to 239.0.0.0/8
# Allow local IPv6 connections
#ufw allow out to fe80::/64
# Allow IPv6 link-local multicasts
#ufw allow out to ff01::/16
# Allow IPv6 site-local multicasts
#ufw allow out to ff02::/16
#ufw allow out to ff05::/16

# Enable the firewall
ufw enable
berbt
источник
Все еще пытаешься понять язык брандмауэра, но не хочешь ли ты гипотетически разрешить вход в tun0качестве средства блокировки входящих соединений от VPN? Как в ufw deny in on tun0,?
Мэтт
@MattBorja, если вы ufw default deny incomingи ufw deny in on tun0, вы не будете получать входящие соединения. Какой-то интерфейс должен разрешать входящий трафик, в этом случае мы хотим, чтобы это были VPN tun0.
бербт
Ты прав, я как-то этого не видел. Не обращать внимания :)
Мэтт
На самом деле, похоже, что то, что я «расспрашивал», было ufw allow in on tun0линией.
Мэтт
7

Настоятельно рекомендуется не использовать эти две команды :

ufw allow incoming
ufw default allow in on tun0

Разрешение поражений с целью иметь брандмауэр. Неправильно, что вам нужно «разрешить вход в tun0» для получения возвращаемых пакетов. Вы хотите получать только те соединения, о которых просили, вместо того, чтобы позволить всему миру подключаться к вам. Разрешение будет делать это. Проверьте предложенную конфигурацию ниже и посмотрите.

Вот пример для серии команд UFW для использования с брандмауэром:

sudo ufw enable
sudo ufw --force reset
sudo ufw default deny incoming
sudo ufw default deny outgoing
sudo ufw allow out on tun0
sudo ufw allow out on eth0 to any port 53,1197 proto udp
sudo ufw allow out on wlan0 to any port 53,1197 proto udp
sudo ufw status verbose

Пример результата:

Status: active
Logging: on (low)
Default: deny (incoming), deny (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
Anywhere                   ALLOW OUT   Anywhere on tun0          
53,1197/udp                ALLOW OUT   Anywhere on eth0
53,1197/udp                ALLOW OUT   Anywhere on wlan0
Anywhere (v6)              ALLOW OUT   Anywhere (v6) on tun0
53,1197/udp (v6)           ALLOW OUT   Anywhere (v6) on eth0
53,1197/udp (v6)           ALLOW OUT   Anywhere (v6) on wlan0

ПРИМЕЧАНИЕ: - Ваши интерфейсы могут отличаться, например, в Ubuntu 16.12 используются eno1 и wlp3s0b1. Используйте команду "ifconfig", чтобы увидеть ваши реальные интерфейсы. -1197 UDP является стандартным значением по умолчанию, но вам может потребоваться изменить его для вашей VPN (например, 443 TCP). -Я обычно удаляю ipv6 (sudo ufw delete 4, повторить x3)

Что это делает: -Он позволяет разрешать исходящие соединения через VPN-туннель, при этом блокируя все, кроме VPN-туннеля и DNS-подключений по Ethernet / Wi-Fi. Предупреждение ниже о проблеме DNS.

Предупреждение. В этом примере разрешено выполнение 53 запросов DNS, чтобы openvpn (например, vpn.somevpnprovider.com) мог запрашивать IP-адрес и устанавливать соединение. Компромисс - это потенциальная утечка DNS. Используйте dnsleaktest.com, чтобы ваши настройки VPN туннелировали ваши запросы DNS. Для осторожных / параноиков, пропустите разрешение на 53 и вместо этого отключите брандмауэр для подключения, затем снова включите после подключения. По причинам, связанным с VPN, я предпочитаю этого не делать, так как, скорее всего, я полностью забуду брандмауэр (например, DNS в любом случае утечет, если openvpn неправильно настроен).

MARACA_MAGICIAN
источник