Oktatóanyagok > Hogyan javítható az SSH biztonság az Ubuntu 18.04-en?

Hogyan javítható az SSH biztonság az Ubuntu 18.04-en?

Közzétéve: 16 január 2020

Security SSH Ubuntu

Az SSH szolgáltatás a Cloud Server fő hozzáférési pontja, ugyanakkor a támadásoknak leginkább kitett szolgáltatás is egyben. Ez az útmutató a különféle trükköknek és technikáknak köszönhetően javítja a szolgáltatás biztonságát.

Listening port megváltoztatása

Az SSH kapcsolat alapértelmezett listening portja a 22-es port: ennek a beállításnak a megváltoztatása lehetővé teszi a szolgáltatás elhomályosítását, és egyúttal növeli a kapcsolat biztonságát.

A gépen meglévő szolgáltatásokkal való ütközések elkerülése érdekében helyes gyakorlat a netstat paranccsal ellenőrizni, hogy melyik port van jelenleg használatban:

$ netstat -n -l
    
Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address           Foreign Address State
tcp        0 0 127.0.0.1:3306          0.0.0.0:* LISTEN
tcp        0 0 127.0.0.53:53           0.0.0.0:* LISTEN
tcp        0 0 0.0.0.0:22              0.0.0.0:* LISTEN
tcp6       0 0 :::80                   :::* LISTEN
tcp6       0 0 :::22                   :::* LISTEN
udp        0 0 127.0.0.53:53           0.0.0.0:*

A netstatnál az -l paraméteren keresztül kényszerítse rá az összes kapcsolat LISTEN állapotban lévő kapcsolatának kinyomtatására. Ebben a példában a következő portokat használjuk:

  • 3306 MySQL service

  • 22 SSH

  • 80 Apache2 / HTTP

  • 53 DNS

A portok megváltoztatásához egyszerűen szerkessze a konfigurációs fájlt az / etc / ssh / sshd_config mappában, a Port irányelveknek megfelelő kikommentelés mellett:

#Port 22

Ezután állítson be egy új, valószínűleg magas értéket, hogy megakadályozza, hogy azt bármely automatikus port-letapogató szoftver (például 2200, 5574, 1022) elfogja:

Port 5574

A módosítás alkalmazásához töltse újra a szolgáltatást a következő módon:

$ sudo service sshd reload

Tartsa életben a kapcsolatot az újratöltéssel olyan módon, hogy kijavítsa a hibákat, és ellenőrizze az új hozzáféréseket egy másik SSH-klienssel.

A változtatás bevezetése után csatlakozzon a szerverhez az új port megadásával. Például, ha az SSH-klienst használja a parancssorból, kövesse az alábbi utasítást:

$ ssh root@<SERVER.IP> -p 5574

Kulcsok használata a hitelesítéshez

A biztonság érdekében széles körben használt RSA kulcsokon keresztüli hozzáférés valós alternatívája a jelszó alapú bejelentkezésnek. Az ilyen típusú hitelesítés során a kliens létrehoz egy privát kulcsot és az ehhez tartozó nyilvános kulcsot, amelyet a kiszolgáló gépen telepítenek a kliens egyértelmű hitelesítéséhez.

Publikus kulcs telepítéséhez a kliensen először az ssh-keygen paranccsal kell generálni a kulcspárt:

$ ssh-keygen
Generating public/private rsa key pair.
Enter file where to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.

A generálás folytatása előtt az ssh-keygen egy opcionális jelmondatot kér, amelyet felhasználhatunk a hitelesítéshez. Ebben a példában a hozzáférés megkönnyítése érdekében a következő fájl üres maradt.

Miután kész, a szoftver két fájlt ment a kijelöltbe:

  • id_rsa: a kliens privát kulcsát, ami senkivel nem osztható meg,

  • id_rsa.pub: a megosztható publikus kulcsot.

A kiszolgálói környezet előkészítéséhez hozzon létre egy authorized_keys nevű fájlt a .ssh mappában a felhasználói mappám belül, amelyet a bejelentkezéshez fog használni:

$ sudo mkdir ~/.ssh
$ sudo touch ~/.ssh/authorized_keys
$ sudo chmod 600 ~/.ssh/authorized_keys

Ellenőrizze, hogy a fájl rendelkezik-e a fenti engedélyekkel.

Ezután tegye be a kliens gép által korábban elkészített nyilvános kulcsot:

$ sudo nano ~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCoTzd9RnqT0yioQG1klsLEK/VG9myo7CQ47aRXu7hnPit6Lgw5kAjC7vzNWYLTy2oIlsrVI7R/tvWmVNISGkWDp9U3fONbSLp+vgBKDzRUVAIqP/AIJ2THanyZxj2b8XU/4s2uzGoTLSR3ViX0JU6zTc+IkaBp1o3W3OolvO15E10/VYJCKN3TkxPsSSGE3QReXnCcnIZYAnrPf9f1DPP1Lo+VUCIzZ7IzcZajAWQ53hC71mTYNHkUgIlWxpRyEhnsRfmqEfUSFbTwpNEarv7vGlK686C4xVxlVfKbqlNa3/g2Vrae4ArVBM958JPZ6aa+7KDZfH5TDgPPtlFCIGkd root@testclient

Mentse el a fájlt, és töltse be újból az SSH szolgáltatást:

$ sudo service sshd reload

Ezen a ponton lehetségesnek kell lennie a szerverhez jelszó nélkül történő hozzáférésnek:

$ ssh root@<SERVER.IP>

Ha minden helyesen működik, tiltsa le a jelszó-hozzáférést a szerver gépről, módosítva az / etc / ssh / sshd_config fájlt a következő paraméterekkel:

ChallengeResponseAuthentication no
    PasswordAuthentication no

Ne feledje, hogy további nyilvános kulcsokat is hozzátehet, ha egyszerűen elmenti őket a szerver gépen a ~ / .ssh / authorized_keys fájl végére.

A szolgáltatás rendelkezésre állási idejének korlátozása

A nem kívánt hozzáférés és a brute-force támadások csökkentésének stratégiája az SSH-szolgáltatás rendelkezésre állási idejének csökkentése. Ha biztos abban, hogy nem kell bizonyos időpontokban csatlakoznia a szerverhez (például 23 órától a következő nap reggel 8 óráig), állítson be automatikus ütemezést a kapcsolatport blokkolásához.

Ehhez használja az alapértelmezett iptable nevű tűzfalat, de a konfiguráció folytatása előtt ne felejtse el, hogy az iptable természeténél fogva nem menti a megadott konfigurációt.

A konfiguráció gyorsabb mentéséhez és betöltéséhez használja az iptable-persistent csomagot, amely a rendszer indításakor újratelepíti a konfigurációt.

Ezután folytassa a csomag telepítését:

$ sudo apt-get install iptables-persistent

Configuring Iptables

A telepítés befejezése után írjon be egy "chaint" az SSH szolgáltatás blokkolásához:

$ sudo iptables -N chain-ssh
$ sudo iptables -A INPUT -p tcp --dport 22 -j chain-ssh

Ilyen módon a 22. portra szánt összes kapcsolat (ha az SSH szolgáltatása egy másik portot használ, változtassa meg ezt az értéket) áthalad az újonnan létrehozott "chain-ssh" láncon.

Mentse az aktuális konfigurációt (amelyet az iptables-persistent tölt be) a következő paranccsal:

$ sudo iptables-save > /etc/iptables/rules.v4

Ezután hozzon létre egy ütemezést a szabály beírásához és törléséhez a láncon a crontab következő módosításával:

$ sudo crontab -e
    
# m h  dom mon dow   command
0 23   * * *   iptables -A chain-ssh -j DROP
0 8    * * *   iptables -F chain-ssh

Mint láthatja, az első műveletnél a csatlakozások DROP szabálya hozzáadódik 23 óránál, míg a második művelet reggel 8 órakor üríti ki a láncot a szolgáltatás helyreállítása érdekében.

Mentse el a fájlt a módosítások alkalmazásához.