1. Požadavky
- FreeBSD 9.2.1.6+
- Trvalé úložiště (nejlépe ZFS svazek)
- DNS doména nebo statická IP adresa
- Internetový přístup
- Router schopný přesměrovávat požadavky na příslušný port
V tomto návodu použijeme IP rozsah 10.0.0.0/255.255.255.0 pro vnitřní sít a IP rozsah 10.8.0.0/255.255.255.0 pro VPN síť.
2. Odkazy
- Open VPN
- Open VPN HOWTO
- How to install OpenVPN inside a jail in FreeBSD 9.2.1.6 with access to remote hosts via NAT
3. Vytvoření OpenVPN jail a instalace OpenVPN serveru
Vytvořte nový jail (s názvem např. vpn) a připojte k němu ZFS svazek, na který se budeme ukládat konfigurace OpenVPN server a klíče jednotlivých uživatelů VPN. V návodu připojujeme svazek jako '/mnt/openvpn' uvnitř jail.
Připojte se pomocí SSH k FreeBSD serveru, připojte se k vytvořenému jail (jexec vpn tcsh) a nainstalujte OpenVPN balíček pomocí správce balíčků pkg.
pkg install bash openvpn
pkg autoremove
- Poznámka: Při prvním spuštění se musí aktualizovat repositáře a nainstalované balíčky, takže nebuďte překvapeni množstvím stahovaným dat. Instalace Bash je potřeba, protože příkaz 'source ./vars' se nechová korektně v případě tcsh. Pokud se objeví hlášení "shared object not found", spusťte příkaz 'pkg upgrade' ještě jednou pro případnou opravu chybějících balíčků a závislostí.
4. Vytvoření certifikátů
Skripty pro práci s certifikáty jsou uloženy v adresáři '/usr/local/share/easy-rsa/keys'. Doporučuji vytvořit kopii celého adresáře do připojeného svazku '/mnt/openvpn'. Musíme totiž provést editaci souboru './vars' a aktualizovat proměnnou KEY_DIR.
- Upravte proměnnou KEY_DIR - např. export KEY_DIR="/mnt/openvpn/keys". Nově vytvořené certifikáty se budou ukládat do tohoto adresáře.
- Můžete také upravit další proměnné KEY_ a nastavit vaše výchozí hodnoty, které se budou využívat při vytváření certifikátů.
Vytvoření nového klíče certifikační autority 'ca.key'. Slouží k potvrzení pravdivosti údajů nově vytvořených certifikátů.
cd /mnt/openvpn/easy-rsa
source ./vars
./clean-all
./build-ca
Vytvoření nového klíče serveru 'server.key'. Slouží k identifikaci OpenVPN serveru.
Vygenerování Diffie-Hellman parametru.
Můžete také vygenerovat vlastní Diffie-Hellman parametr pomocí následující příkazu (nahraďte 2048 za 1024, pokud chcete použít velikost klíče 2048 bitů).
5. Konfigurace OpenVPN serveru
Pro konfiguraci vašeho OpenVPN serveru můžete použít vzorový konfigurační soubor poskytovaný v rámci instalovaného balíčku (umístění: /usr/local/share/examples/openvpn/sample-config-files) nebo vytvořit nový konfigurační soubor např. '/mnt/openvpn/openvpn.conf'. Následně v tomto souboru upravte/doplňte následující parametry.
proto udp
dev tun
ca /mnt/openvpn/keys/ca.crt
cert /mnt/openvpn/keys/server.crt
key /mnt/openvpn/keys/server.key
dh /mnt/openvpn/keys/dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 10.0.0.0 255.255.255.0”
#tls-auth /mnt/openvpn/keys/auth.key 0
#crl-verify /mnt/openvpn/keys/crl.pem
keepalive 10 120
group nobody
user nobody
comp-lzo
persist-key
persist-tun
mssfix
client-config-dir /mnt/openvpn/ccd
status logs/openvpn.status.log
log-append logs/openvpn.log
verb 3
- Nahraďte /mnt/openvpn vašim konkrétním umístěním.
- Port, na kterém služba OpenVPN poslouchá je UDP port 1194. (Pro zvýšení bezpečnosti můžete použít váš WAN (internetový) port, např. port 443 port na routeru a přesměrovat jej na port 1194, kde poslouchá vašeho služba OpenVPN.)
- Soubor ipp.txt ukládá informace o jednotlivých připojení a zajišťuje, že uživatelům je vždy přiřazena stejná IP adresa.
- Parametr client-config-dir obsahuje cestu k adresáři, kde mohou být uloženy konfigurační soubory s upřesňujícími parametry pro konkrétní uživatele. Může to být použito např. pro přesměrování veškeré komunikace daného uživatele přes váš OpenVPN server.
- Certifikáty mohou být vloženy přímo do konfiguračního souboru (i do konfiguračního souboru klenta0 pomocí těchto parametrů:
-
<ca>
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----
</key>
key-direction 1
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
-----END OpenVPN Static key V1-----
</tls-auth>
- V konfiguraci musí být uvedeny hodnoty parametru key-direction 0/1 tak, že serverová i klientská část musí obsahovat opačnou hodnotu.
- Pokud neexistuje odpovídající pár parametrů key-direction, vložte do konfiguračního souboru parametr 'key-direction bidirectional'
6. Konfigurace OpenVPN klienta
Pro každého klienta, který bude využívat služeb OpenVPN serveru, musíme vygenerovat jeho vlastní, jedinečné certifikační soubory '<user name>.key' a '<user name>.crt'.
source ./vars
./build-key <user name>
Opět můžete použít vzorový konfigurační soubor (umístění: /usr/local/share/examples/openvpn/sample-config-files) nebo vytvořit vlastní. Následně v tomto souboru upravte/doplňte následující parametry.
dev tun
proto udp
remote my-domain-name.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert <user name>.crt
key <user name>.key
#tls-auth auth.key 1
ns-cert-type server
comp-lzo
mssfix
verb 3
- Nahraďte my-domain-name.com vaším DNS doménou nebo vlože statickou IP adresu, na které je dostupný váš OpenVPN server.
- Pokud je váš router nakonfigurovaný tak, že WAN port pro přesměrování požadavků pro VPN připojený je jiný, než použitý port 1194, uveďte tento port místo 1194 (viz konfigurace OpenVPN serveru).
- Výše uvedená konfigurace umožňuje přístup pouze do vaší vnitřní sítě. Pokud budete chtít směrovat veškerou komunikaci přes váš OpenVPN server, musíte vložit do klientského konfiguračního souboru nebo do nově vytvořeného souboru <user name> v adresáři definovaném proměnnou client-config-dir (v konfiguračním souboru serveru) následující řádky:
push "redirect-gateway def1 local bypass-dhcp"
push "dhcp-option DNS 217.31.204.130"
push "dhcp-option DNS 193.29.206.206"
7. Konfigurace NATu
Protože OpenVPN klienti mají přistup pouze do vnitřní sitě, musíte povolit překlad IP adres, pokud budete chtít směrovat internetovou komunikaci přes váš OpenVPN server. V první řadě musíme identifikovat, jaké rozhraní je nadefinováno a použito pro komunikaci. Následující příkaz zobrazí jména rozhraní v rámci jail. Může to být např. epair1b, epair2b, epair3b, etc., v závislosti na počtu jednotlivých instalací jail na vašem FreeBSD serveru.
Pro automatické nastavení filtrovacích parametrů, vytvořte konfigurační skript '/usr/local/etc/ipfw.rules' s těmito parametry.
parameter="$1"
eth=`/sbin/ifconfig | grep "epair" | awk -F':' '{print $1}'`
if ["$parameter" = "stop" ]; then
ipfw -q -f flush
else
ipfw -q -f flush
ipfw -q nat 1 config if $eth
ipfw -q add nat 1 all from 10.8.0.0/24 to any out via $eth
ipfw -q add nat 1 all from any to any in via $eth
fi
8. Dokončení konfigurace
Aby se OpenVPN server spouštěl a NAT filtrovací pravidla nastavovala automaticky při startu jail, musí se doplnit konfigurační soubor '/etc/rc.conf' následujícími pravidly.
echo 'openvpn_if="tun"' >> /etc/rc.conf
echo 'openvpn_configfile="/mnt/openvpn/openvpn.conf"' >> /etc/rc.conf
echo 'openvpn_dir="/mnt/openvpn"' >> /etc/rc.conf
echo 'cloned_interfaces="tun"' >> /etc/rc.conf
echo 'gateway_enable="YES"' >> /etc/rc.conf
echo 'firewall_enable="YES"' >> /etc/rc.conf
echo 'firewall_script="/usr/local/etc/ipfw.rules"' >> /etc/rc.conf
- Nahraďte /mnt/openvpn/ vašim konkrétním umístěním konfiguračních souborů.
9. Kontrola OpenVPN NAT konfigurace
Pokud nyní restartujete jail nebo restartujete služby openvpn a ipfw, můžete zkontrolovat nastavení NAT následujícím příkazem.
00200 nat 1 ip from any to any in via epair1b
65535 allow ip from any to any
10. Doplňující zabezpečení
Následující část není povinná pro správný běh OpenVPN serveru, ale pomůže vám zabezpečit váš server před DoS útoky a pokusy o neoprávněný přístup. Konfigurace OpenVPN serveru obsahuje parametr tls-auth, který zajišťuje podepsání a následné ověření jednotlivých paketů, kdy nepodepsané pakety jsou okamžitě zahazovány. Vedlejším efektem je skrytí vaší OpenVPN služby při skenováním otevřených portů na vašem serveru.
Princip je následující: pokud klient, požadující spojení, nebude posílat pakety podepsané zadaným klíčem, OpenVPN server nebude na takové pakety odpovídat a bude je rovnou zahazovat.
Klíč se generuje příkazem uvedeným níže a musí být vložen do adresáře/konfiguračního souboru klienta stejným způsobem, jako ostatní klíče (ca.crt, <user name>.crt and <user name>.key).
Následně odkomentujte řádek s parametrem #tls-auth auth.key (jednoduše odstraňte znak #) v serverovém i klientském konfiguračním souboru.
11. Zneplatnění klientského certifikátu
Jestliže někdo ztratí nebo mu byl odcizen certifikační klíč, případně pokud chcete někomu odepřít přístup k vašemu OpenVPN serveru, můžete nakonfirovat OpenVPN server tak, že bude kontrolovat seznam zneplatněných certifikátů. Pokude je certifikát v tomto seznamu uveden, bude příslušnému klientovi odepřen přístup.
Seznam zneplatněných certifikátů se vytvoří níže uvedeným příkazem. Tento příkaz vytvoří soubor 'crl.pem', který bude vašim seznamem zneplatněných certifikátů.
source ./vars
./revoke-full <user name>
DataBase Updated
Using configuration from /usr/local/share/easy-rsa/openssl-0.9.8.cnf
<user name>.crt: /C=US/ST=CA/L=Temporal/O=Temporal/OU=Temporal/CN=Temporal/name=Temporal/emailAddress=mail@host.domain
error 23 at 0 depth lookup:certificate revoked
- Všimněte si posledního řádku. OpenSSL se snažil ověřit příslušného uživatele, což se mu nepodařilo. A to znamená, že náš seznam byl úspěšně vytvořen/doplněn.
Pro zapnutí této volby je důležité odkomentovat řádek obsahující parametr #crl-verify v konfiguračním souboru serveru a server restartovat. Seznam zneplatněných certifikátů musí obsahovat minimálně jeden záznam.
12. Rotace logovacích souborů
Přidejte následující řádek do souboru '/etc/newsyslog.conf' pro automatickou rotaci logovacího souboru první den v měsíci o půlnoci. Více se dozvíte v manuálových stránkách 'man 5 newsyslog.conf'. Newsyslog je provoláván cronem každou hodinu.
Komentáře