Вопрос или проблема
Я хочу настроить ufw (недокументированный экран) для OpenVPN.
Подключения разрешены только через OpenVPN. Все остальное должно быть заблокировано. Так что, если OpenVPN отключен -> нет интернета! Я нашел этот скрипт в интернете и хочу знать, достаточно ли он хорош. Или мне нужно добавить больше правил?
#!/bin/bash
###########################################
# Создано Томасом Бутцем #
# E-Mail: btom1990(at)googlemail.com #
# Не стесняйтесь копировать и делиться этим скриптом #
###########################################
# Измените это значение на ваше конфигурационное!
VPN_DST_PORT=3478
# Не меняйте ничего за этой точкой
###########################################
# Проверка прав суперпользователя
if [[ $EUID -ne 0 ]]; then
printf "Пожалуйста, запустите как root:\nsudo %s\n" "${0}"
exit 1
fi
# Сброс конфигурации ufw
ufw --force reset
# Разрешить весь входящий трафик
ufw default allow incoming
# И заблокировать исходящий по умолчанию
ufw default deny outgoing
# Каждое соединение через VPN считается безопасным
ufw allow out on tun0
# Не блокировать создание VPN-туннеля
ufw allow out $VPN_DST_PORT
# Не блокировать DNS-запросы
ufw allow out 53
# Разрешить локальные IPv4 соединения
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
# Разрешить локальные IPv4 мультикасты
ufw allow out to 224.0.0.0/24
ufw allow out to 239.0.0.0/8
# Разрешить локальные IPv6 соединения
ufw allow out to fe80::/64
# Разрешить локальные IPv6 мультикасты
ufw allow out to ff01::/16
# Разрешить локальные IPv6 мультикасты на уровне сайта
ufw allow out to ff02::/16
ufw allow out to ff05::/16
# Включить экран
ufw enable
Источник: http://pastebin.com/AUHh6KnV
Конфигурация может быть более ограничительной
ufw --force reset
ufw default deny incoming # Используйте VPN-туннель для всего трафика
ufw default deny outgoing
ufw allow out on tun0
ufw allow in on tun0
ufw allow out $port/$protocol # например, 1234/udp, в зависимости от вашей конфигурации OpenVPN клиента
# Предпочитайте разрешенные хосты для подключения к вашему VPN, включите только если ваш провайдер VPN не предоставляет вам такую опцию
#ufw allow out 53
# Разрешить локальные IPv4 соединения, включите по мере необходимости, установите конкретные IP или более строгие маски подсети, если возможно
#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
# Разрешить локальные IPv4 мультикасты
#ufw allow out to 224.0.0.0/24
#ufw allow out to 239.0.0.0/8
# Разрешить локальные IPv6 соединения
#ufw allow out to fe80::/64
# Разрешить локальные IPv6 мультикасты
#ufw allow out to ff01::/16
# Разрешить локальные IPv6 мультикасты на уровне сайта
#ufw allow out to ff02::/16
#ufw allow out to ff05::/16
# Включить экран
ufw enable
Сильная рекомендация не использовать эти две команды:
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
Результат примера:
Статус: активен
Ведение журнала: включено (низкий)
По умолчанию: запрещено (входящие), запрещено (исходящие), отключено (маршрутизировано)
Новые профили: пропущены
Куда Действие Откуда
-- ------ ----
Везде РАЗРЕШИТЬ ИСХОДЯЩИЙ Везде на tun0
53,1197/udp РАЗРЕШИТЬ ИСХОДЯЩИЙ Везде на eth0
53,1197/udp РАЗРЕШИТЬ ИСХОДЯЩИЙ Везде на wlan0
Везде (v6) РАЗРЕШИТЬ ИСХОДЯЩИЙ Везде (v6) на tun0
53,1197/udp (v6) РАЗРЕШИТЬ ИСХОДЯЩИЙ Везде (v6) на eth0
53,1197/udp (v6) РАЗРЕШИТЬ ИСХОДЯЩИЙ Везде (v6) на wlan0
ПРИМЕЧАНИЕ:
-Ваши интерфейсы могут отличаться, например, ubuntu 16.12 использует eno1 и wlp3s0b1. Используйте команду “ifconfig”, чтобы увидеть ваши фактические интерфейсы.
-1197 UDP вполне стандартный, но вам может потребоваться изменить его для вашего VPN (например, 443 TCP).
-Я обычно удаляю ipv6 (sudo ufw delete 4, повторить x3)
Что это делает:
-Это позволяет исходящим подключениям через VPN-туннель, блокируя все кроме VPN-туннеля и DNS-соединений на ethernet/wifi. Предупреждение ниже о проблеме DNS.
Предупреждение:
Этот пример разрешает исходящий трафик на 53 для DNS-запросов, чтобы openvpn (например, vpn.somevpnprovider.com) мог запросить IP-адрес и установить соединение. Компромисс заключается в потенциальной утечке DNS. Используйте dnsleaktest.com, чтобы убедиться, что настройки вашего VPN туннелируют ваши DNS-запросы. Для осторожных/параноидальных, пропустите разрешение исходящих на 53 и вместо этого отключите экран, чтобы подключиться, а затем снова включите его после подключения. По моим причинам VPN я выбираю не делать этого, так как с большей вероятностью я забуду про экран полностью (например, DNS все равно будет утекать, если openvpn настроен неправильно).
Спасибо @MARACA_MAGICIAN за его начальную помощь в улучшении моего ответа. Следующий код будет работать как с openvpn, так и с клиентом nordvpn с технологией nordlynx.
Пожалуйста, проверьте здесь, я обновлю код, если что-то изменится:
sudo ufw reset
sudo ufw enable
# ---------------------------
# =====================
# ====== ГЛОБАЛЬНЫЙ ======
# =====================
# Запретить всё
sudo ufw default deny forward
sudo ufw default deny incoming
sudo ufw default deny outgoing
# ---------------------------
# =====================
# ====== VPN ==========
# =====================
# Если вы хотите разрешить любой исходящий порт
# sudo ufw allow out on nordlynx
# Разрешить только http, https & DNS
sudo ufw allow out on nordlynx to any port 80,443,53,8080 proto tcp
sudo ufw allow out on nordlynx to any port 80,443,53,8080 proto udp
# git ssh
sudo ufw allow out on nordlynx to any port 22 proto tcp
# docker - также будет использоваться в minikube start - они используют диапазон IPv6
sudo ufw allow out on nordlynx from fe80::/64 to any port 22
# openvpn
sudo ufw allow out on tun0
sudo ufw allow out 1194/udp
# ---------------------------
# =====================
# ====== MINIKUBE =====
# =====================
# Разрешите доступ к IP Minikube
sudo ufw allow out on br-66dceb3ba20e to 192.168.49.2
# Разрешите исходящий трафик на порт 8443 (Kubernetes API Server) через адаптер Minikube
sudo ufw allow out on br-66dceb3ba20e to any port 8443 proto tcp comment 'Разрешить доступ к Kubernetes API Server'
# Разрешите исходящий трафик на портах 30000-32767 (NodePorts для Kubernetes Services) через адаптер Minikube
sudo ufw allow out on br-66dceb3ba20e to any port 30000:32767 proto tcp comment 'Разрешить NodePorts для Kubernetes Services'
# Разрешите исходящий трафик на портах 2379-2380 (etcd) через адаптер Minikube
sudo ufw allow out on br-66dceb3ba20e to any port 2379:2380 proto tcp comment 'Разрешить etcd связь'
# Разрешите исходящий трафик на порт 53 (DNS, UDP) через адаптер Minikube
sudo ufw allow out on br-66dceb3ba20e to any port 53 proto udp comment 'Разрешить DNS (UDP)'
# Разрешите исходящий трафик на порт 53 (DNS, TCP) через адаптер Minikube
sudo ufw allow out on br-66dceb3ba20e to any port 53 proto tcp comment 'Разрешить DNS (TCP)'
# Разрешите исходящий трафик на порт 10250 (Kubelet) через адаптер Minikube
sudo ufw allow out on br-66dceb3ba20e to any port 10250 proto tcp comment 'Разрешить Kubelet связь'
# Разрешите исходящий трафик на порт 22 (SSH) через адаптер Minikube
sudo ufw allow out on br-66dceb3ba20e to any port 22 proto tcp comment 'Разрешить доступ по SSH'
# ---------------------------
# =====================
# ====== WLAN =========
# =====================
# Разрешите исходящий трафик от вашего устройства к DNS (53), NORDVPN(51820) & OPENVPN (1197)
sudo ufw allow out on wlp0s20f3 to any port 53,51820,1197 proto udp
# Разрешите NTP
# sudo ufw allow out on wlp0s20f3 to any port 123 proto udp comment 'разрешить NTP'
# Разрешите локальные сети (по желанию)
sudo ufw allow out on wlp0s20f3 to 192.168.0.0/16 comment 'разрешить локальную сеть'
# ---------------------------
sudo ufw status verbose
sudo ufw enable
Ответ или решение
Настройка UFW для OpenVPN
Настройка брандмауэра — это важный аспект обеспечения безопасности, особенно когда речь идет о VPN-сервисах. В данной статье мы подробно рассмотрим, как правильно настроить Uncomplicated Firewall (UFW) для OpenVPN, чтобы обеспечить максимальную защиту и предотвратить утечку данных при отключении VPN.
Цели конфигурации
Ваши ключевые требования заключаются в следующем:
- Позволить доступ только через OpenVPN.
- Блокировать весь остальной трафик, когда OpenVPN отключен.
- Обеспечить корректную работу DNS-запросов для подключения к VPN.
Основные принципы безопасности
Конфигурация вашего брандмауэра должна быть максимальноRestrictive, чтобы предотвратить утечку данных. Необходима четкая установка правил, котoрые позволят отправлять и получать трафик только через интерфейсы, связанные с OpenVPN. Рассмотрим предложенные конфигурации.
Разбор предложенного скрипта
Первый скрипт, предоставленный вами, применяет следующие правила:
-
Установка значений по умолчанию:
ufw default deny incoming ufw default deny outgoing
Это правильный подход, так как он обеспечивает блокировку всего входящего и исходящего трафика, если не заданы специальные правила.
-
Проброс на VPN-интерфейсе:
ufw allow out on tun0
Это правило позволяет исходящий трафик через интерфейс tun0 — стандартный интерфейс OpenVPN.
-
Правила для DNS и локальных подключений:
ufw allow out 53 ufw allow out to 10.0.0.0/8 ufw allow out to 192.168.0.0/16
Это полезные правила, но вы должны быть осторожны с разрешением DNS-запросов. Возможно, стоит рассмотреть возможность ограничения доступа для DNS только через ваш VPN, чтобы избежать утечек.
Рекомендованная конфигурация
-
Сброс и настройка правил:
sudo ufw --force reset sudo ufw default deny incoming sudo ufw default deny outgoing
-
Разрешение трафика через OpenVPN:
sudo ufw allow out on tun0 sudo ufw allow in on tun0
-
Разрешения для DNS и специфических портов:
sudo ufw allow out on eth0 to any port 53 proto udp sudo ufw allow out 1194/udp
Порт 1194 — это стандартный порт для OpenVPN, но провайдер может использовать другой порт, например 443 TCP.
-
Локальные сети (если необходимо):
Если вы работаете в локальной сети, лучше строго ограничить доступ. Например, вместо разрешения трафика в пределах целых подсетей, можно указать конкретный IP:sudo ufw allow out to 192.168.1.100
-
Включение UFW:
sudo ufw enable
Проверка конфигурации
После настройки брандмауэра выполните проверку правил:
sudo ufw status verbose
Это даст возможность увидеть список всех активных правил и убедиться, что все настроено правильно.
Завершение настройки
При установке UFW для OpenVPN в обязательном порядке убедитесь, что ваш VPN-клиент правильно настроен. В условиях замыкания вы должны протестировать, как ведет себя ваше интернет-соединение при отключении VPN. Это поможет вам удостовериться, что весь трафик блокируется, когда VPN отключен.
Заключение
Настройка UFW для OpenVPN может стать основным инструментом в вашей стратегии управления безопасностью. Убедитесь, что настройки соответствуют вашим требованиям и регулярно проверяйте их, так как возможны изменения в конфигурации вашей сети или требованиям безопасности.