Utosó módosítás:

Az előző cikkben megtörtént a feladat leírása.

Lássunk hozzá a router felprogramozásához

Kössük a számítógépünket a router egyik LAN portjához. A LEDE alapértelmezésként a 192.168.1.1 IP címet rendeli a routerhez.

Az első intézkedésünk, hogy a Routeren egy erős jelszót állítunk be. Erre telepítés után azonnal felhívja a figyelmüket.

A legegyszerűbb, ha SSH-val root-ként bejelentkezünk (nem kér jelszót)

passwd

A jelszó feleljen meg a szokásos elvárásoknak.

Frissítsük fel a telepíthető csomagok listáját:

opkg update

Telepítsünk jól használható webes kezelő felület, magyar nyelvet és a https hozzáférést.

opkg install luci-theme-openwrt luci-i18n-openvpn-hu luci-ssl

Egy könnyen kezelhető szövegszerkesztő

opkg install nano

Rakjuk fel az OpenVPNt és a kezelő felületét (magyarul is)

opkg install  openvpn-openssl luci-app-openvpn luci-i18n-openvpn-hu

sftp szerver, hogy egyszerűen tudjunk fájlokat másolni az eszközre (nincs grafikus kezelő felülete, csak egy kiegészítés az SSH-hoz)

opkg install openssh-sftp-server

Frissítsük fel a routeren található csomagokat (ezt úgy tűnik érdemes hetente elvégezni):

opkg list-upgradable | awk -F " " '{print "opkg upgrade "$1}' >up.sh
sh up.sh
rm up.sh

Ezzel a scripttel a először elkészítjük a frissítendő csomagok listáját, awk-val elkészítjük a scriptet, ami felfrissíti a programokat (opkg upgrade program_neve formátumban), majd ezt lefuttatjuk.

Sajnos egy lépcsőben nem lehet a feladatot elvégezni pedig az egysoros script milyen elegáns:

opkg list-upgradable | awk -F " " '{print "opkg upgrade "$1}' | sh

mert az első opkg még zárolja a fájlokat, amikor a második már elindul.

Persze itt is lehet trükközni:

opkg list-upgradable | awk -F " " '{print "opkg upgrade "$1}' |sort| sh
Itt a sort utasítással egy kicsit húzzuk az időt, hogy az első opkg-nak legyen ideje kilépni, mielőtt az update elkezdődik. (Így már lehet választani a két verzió között)

A csomagok frissítésének az ára, hogy a rendelkezésünkre álló tárhely egy jelentős részét elhasználja, ezért ha rosszul állunk tárhellyel, ezt a lépést kénytelenek vagyunk kihagyni.

Tegyük biztonságosabbá a routerre való bejelentkezést

Az ssh bejelentkezés biztonságát két ponton tudjuk emelni:

  • A szokásos (szabványos) 22-es portot átírjuk egy másikra
  • A jelszavas bejelentkezés helyett kulcsos bejelentkezést írunk elő

A webes felületen http helyett https protokoll használatát tudjuk előírni

A /etc/config/dropbear fájl vizsgálatakor az OpenSSH config fájlhoz szokott szem elkerekedik. Összesen öt sort tartalmaz. Ha az összes lehetséges beállítást megtesszük, akkor sem lesz 11 sornál hosszabb.

Másoljuk a publikus kulcsunkat a /etc/dropbear/authorized_keys fájlba. Ezt megtehetjük fájl másolással, vagy a LUCI felületen. Az OpenSSH ssh-copy-id parancsa ebben az esetben nem segít.
A kulcs átmásolása után egy másik terminálból próbáljunk meg bejelentkezni. Ezúttal jelszó nélkül kell sikerülnie (hiszen a kulcs azonosít).
Ha a bejelentkezés nem sikeres, lehet hibát keresni a nyitva hagyott kapcsolaton keresztül.
Ha sikeres volt a próba, tiltsuk le a jelszavas bejelentkezést és állítsuk át a portot 22-ről egy másikra

uci set dropbear.@dropbear[0].PasswordAuth=off
uci set dropbear.@dropbear[0].port=1234
uci commit dropbear

Ezzel, amit az ssh-val lehetett megtettük. (Még lehetne felhasználót létrehozni az adminisztrációhoz, de akkor a LUCI felület lesz a gyenge pont nem nyújt valós többlet biztonságot, csak ha a webes felületet letiltjuk)

Tegyünk némi biztonságot a LUCI webes felületre is

Követeljük meg a https használatát (sokkal többet nem tehetünk, csak ha a fantáziánkat használjuk)

uci set uhttpd.main.redirect_https='1'
uci commit

Kezdjük el az OpenVPN felprogramozását

A programozáshoz UBUNTU (linux) munkaállomást használunk, amire telepítettük az sshfs csomagot

Innen 4-féle módon is folytathatjuk a feladat megoldását:

  1. A luci kezelő felületén állítjuk be az OpenVPN szervert
  2. A server.cnf fájlt a /etc/openvpn mappába másoljuk
  3.  „uci” utasításokkal állítjuk be commandline módban
  4. a /etc/config/openvpn fájl szerkesztésével

Vegyük sorra:

1., A luci kezelőfelület csak a static key modelt támogatja. Most nem ez a választott eljárás

2., Ha a config állományt a /etc/openvpn mappába másoljuk, akkor a router indításakor elindul, azonban a működését a luci felületről nem tudjuk befolyásolni (ezt használjuk teszteléshez)

3., Az „uci” utasításokkal létrehozott VPN-t lehet grafikus felületről is kezelni

4., Egyenértékű a 3., ponttal. az uci utasítások hozzák létre illetve módosítják az állományt.

Válaszuk a 3 és 4 opciót. Egy minimális plusz munkával valamivel elegánsabb eredményt kapunk.

Jelentkezzünk be a routerre:

Telepítsük fel a felhasználó kezelőt:

opkg update
opkg install shadow-useradd

Hozzunk létre egy felhasználót az OpenVPN-nek

adduser vpn

A PC-n csatoljuk fel a router /etc mappáját (ezért telepítettük az sftp-t a routerre):

sshfs root@192.168.1.1:/etc/ /mnt

Ennél korrektebb:

mkdir ~/mnt

sshfs root@192.168.1.1:/etc/ ~/mnt

Hozzuk létre a szerver mappát:

sudo mkdir /mnt/openvpn/client

másoljuk ide a szükséges kulcsokat. Ezek:

  • ca.crt
  • kliens1.key
  • kliens1.crt
  • ta.key
  • dh4096.pem

(már érdemes elliptic curve kulcsokat használni a gyorsabb működés érdekében. Az OpenVPN a 2.4 verziótól támogatja)

A routeren  hozzuk létre az interfészt a VPN-hez

uci set network.vpn1=interface
uci set network.vpn1.ifname=tun0
uci set network.vpn1.proto=none
uci set network.vpn1.auto=1

Ez után hozzuk létre a VPN kapcsolatot:

uci set openvpn.vpnclient=openvpn
uci set openvpn.vpnclient.enabled=1
uci set openvpn.vpnclient.dev=tun
uci set openvpn.vpnclient.proto=udp
uci set openvpn.vpnclient.verb=3
uci set openvpn.vpnclient.ca=/etc/openvpn/client/ca.crt
uci set openvpn.vpnclient.cert=/etc/openvpn/client/kliens1.crt
uci set openvpn.vpnclient.key=/etc/openvpn/client/kliens1.key
uci set openvpn.vpnclient.cipher=AES-192-CBC
uci set openvpn.vpnclient.auth=sha256
uci set openvpn.vpnclient.tls-auth='/etc/openvpn/client/ta.key 1'
uci set openvpn.vpnclient.client=1
uci set openvpn.vpnclient.remote_cert_tls=server
uci set openvpn.vpnclient.remote="proba.itkommando.hu 1192"
uci set openvpn.vpnclient.persist_key='1'
uci set openvpn.vpnclient.persist_tun='1'
uci set openvpn.vpnclient.comp_lzo='1'
uci set openvpn.vpnclient.user='vpn'
uci set openvpn.vpnclient.group='vpn'
uci commit openvpn