UFW dla OpenVPN

17

Chcę skonfigurować ufw (nieskomplikowaną zaporę ogniową) dla OpenVPN.

Połączenia są dozwolone tylko przez OpenVPN. Cała reszta powinna zostać zablokowana. Więc jeśli OpenVPN jest odłączony -> brak internetu! Znalazłem ten skrypt online i chcę wiedzieć, czy jest wystarczająco dobry. Czy muszę dodać więcej zasad?

#!/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

Źródło: http://pastebin.com/AUHh6KnV

Alex M.
źródło
Wygląda w porządku! Wystarczy spróbować i zobaczyć, czy to działa, to są jakieś problemy, zawsze możesz wyłączyć ufwprzy użyciu sudo ufw disablei usunąć wszystkie reguły zapory użyciu sudo ufw --force reset. Co może pójść nie tak? ;-)
ntninja
2
Mogę uniknąć dopuszczania całego ruchu przychodzącego, ponieważ sam ten pozwoli na działanie openvpn.
JVE999
2
zawsze należy domyślnie odmawiać połączeń przychodzących ...
n00dl3
Ten skrypt jest wyraźnie stworzony do celów udostępniania plików. Odmowa połączenia przychodzącego przeczy celowi. Zapewnia zachowanie „killswitch” komercyjnych aplikacji VPN - nie więcej, nie mniej.
emk2203
@ emk2203 nie, blokuje ruch przychodzący poza tunel.
berbt

Odpowiedzi:

8

Konfiguracja może być bardziej restrykcyjna

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
źródło
Wciąż próbujesz zrozumieć żargon zapory ogniowej, ale czy hipotetycznie nie chciałbyś pozwolić na tun0blokowanie połączeń przychodzących z VPN? Jak w ufw deny in on tun0,?
Matt
@MattBorja, jeśli ty ufw default deny incomingi ufw deny in on tun0nie otrzymasz żadnych połączeń przychodzących. Niektóre interfejsy powinny zezwalać na ruch przychodzący, w tym przypadku chcemy, aby był to VPN tun0.
berbt
Masz rację, jakoś tego nie widziałem. Zignoruj ​​:)
Mat.
Właściwie wygląda na to, że to, co „przesłuchiwałem”, było ufw allow in on tun0linią.
Matt
7

Zdecydowanie zaleca się, aby NIE używać tych dwóch poleceń :

ufw allow incoming
ufw default allow in on tun0

Pozwalanie na pokonanie celu posiadania zapory ogniowej. Niepoprawne jest, że musisz „wpuszczać na tun0”, aby otrzymywać pakiety zwrotne. Chcesz tylko otrzymywać połączenia, o które prosiłeś, w przeciwieństwie do umożliwienia całemu światu łączenia się z tobą. Pozwolenie na to zrobi. Sprawdź proponowaną konfigurację poniżej i zobacz.

Oto przykład szeregu poleceń UFW do użycia z zaporą:

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

Przykład wyniku:

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

UWAGA: -Twoje interfejsy mogą być inne, na przykład ubuntu 16.12 używa eno1 i wlp3s0b1. Użyj polecenia „ifconfig”, aby zobaczyć swoje rzeczywiste interfejsy. -1197 UDP jest dość domyślnym, ale może być konieczna jego zmiana dla sieci VPN (np. 443 TCP). - Zwykle usuwam ipv6 (sudo ufw delete 4, powtórz x3)

Co to robi: - Pozwala na połączenia wychodzące przez tunel VPN, jednocześnie blokując wszystko oprócz tunelu VPN i połączeń DNS na ethernet / wifi. Ostrzeżenie poniżej dotyczące problemu z DNS.

Ostrzeżenie: w tym przykładzie można zezwolić na 53 dla żądań DNS, aby openvpn (np. Vpn.somevpnprovider.com) mógł zażądać adresu IP i nawiązać połączenie. Kompromisem jest możliwość wycieku DNS. Użyj dnsleaktest.com, aby upewnić się, że ustawienia VPN tunelują twoje żądania DNS. Dla osób ostrożnych / paranoicznych, pomiń pozwalanie na 53 i zamiast tego wyłącz zaporę ogniową, aby się połączyć, a następnie włącz ponownie po podłączeniu. Z moich powodów VPN zdecydowałem się tego nie robić, ponieważ jest bardziej prawdopodobne, że całkowicie zapomnę zaporę ogniową (np. DNS i tak wycieknie, jeśli openvpn zostanie źle skonfigurowany).

MARACA_MAGICIAN
źródło