Kulcsszó - ssh

Több módon is védhetjük szerverünk SSH portját. Módosíthatjuk, hogy melyik porton lehessen SSH-zni az alapértelmezett 22-es helyett, beállíthatjuk, hogy csak kulcssal lehessen belépni (amire tehetünk extra jelszóvédelmet), fail2ban-t telepíthetünk, mely bizonyos számú hibás bejelentkezés után kitiltja a támadó IP címét, beállíthatunk port knockingot, mely blokkolja az ssh portot, mindaddig, amíg egy másik porton be nem kopogunk a szerverre.
A fenti megoldások sok fejfájástól megkímélhetnek minket, azonban nem nyújtanak teljes védelmet az esetben, ha kikerül a jelszavunk - például feltörik, megfertőzik azt az eszközt, ahonnan csatlakozni szoktunk SSH-n. Erre ad egy extra védelmet a Google Authenticator, mellyel kétfaktoros bejelentkezést tudunk beállítani szerverünkre. Nézzük, hogyan!

Szükségünk lesz egy Android-os, vagy IOS-es telefonra. Mielőtt belevágunk telepítsük a Google Authenticator szoftvert Android-ra, vagy IOS-re

apt-get install libpam-google-authenticator # feltelepítjük a szerverre a google-authenticator alkalmazást
Megnyitjuk /etc/pam.d/sshd állományt, majd a legtetejére hozzáadjuk az alábbi sort:

auth required pam_google_authenticator.so

Megnyitjuk az /etc/ssh/sshd_config fájlt, majd a ChallengeResponseAuthentication sor értékét yes-re állítjuk:

ChallengeResponseAuthentication yes

Ezután újraindítjuk az sshd service-t:service sshd restart
Ezután annak a felhasználónak a nevében, akivel ssh-zni szeretnénk a továbbiakban, futtatjuk a google-authenticator parancsot:
google-authenticator
Do you want authentication tokens to be time-based (y/n) y
QR kód példa
Your new secret key is: ABCD123456EFGHJK
Your verification code is 123321
Your emergency scratch codes are:
12345678
23456789
34567890
45678901
56789012
Do you want me to update your "/home/testuser/.google_authenticator" file (y/n) y
Do you want to disallow multiple uses of the same authenticationtoken? This restricts you to one login about every 30s, but it increasesyour chances to notice or even prevent man-in-the-middle attacks (y/n) y
By default, tokens are good for 30 seconds and in order to compensate forpossible time-skew between the client and the server, we allow an extratoken before and after the current time. If you experience problems with poortime synchronization, you can increase the window from its defaultsize of 1:30min to about 4min. Do you want to do so (y/n) n
If the computer that you are logging into isn hardened against brute-forcelogin attempts, you can enable rate-limiting for the authentication module.By default, this limits attackers to no more than 3 login attempts every 30s.Do you want to enable rate-limiting (y/n) y

Mi a teendőnk? Nyissuk meg a Google Authenticator-t a telefonunkon, szkenneljük be a kapott QR kódot. A parancs futtatásokat megjelenő hat darab "emergency code"-ot írjuk fel, mivel ha nincs nálunk a telefonunk, akkor ezekkel az egyszerhasználatos kódokkal fogunk tudni belépni szerverünkre. Ezenkívül meg kell válaszolnunk a parancs futásakor kapott kérdéseket is.

Felmerülhet a kérdés, hogy van e lehetőségünk fehérlistára tenni IP címeket, vagy címtartományokat, ahonnan Authenticator használata nélkül engedjen be minket a szerver. Igen, van!

Megnyitjuk /etc/pam.d/sshd állományt, majd a legtetejére hozzáadjuk az alábbi sort:

auth [success=1 default=ignore] pam_access.so accessfile=/etc/security/access-local.conf

Megnyitjuk /etc/security/access-local.conf állományt, majd az alábbi sorokat hozzáadjuk (192.168.0.0/24 helyére írjuk a megfelelő címet, címtartományt):

/etc/security/access-local.conf fájlba:# only allow from local IP range+ : ALL : 192.168.0.0/24+ : ALL : LOCAL- : ALL : ALL

A napokban egy LVM targetek mentését végző bash szkript megírásán dolgoztam. A szkript - miután lekéri az LVM targetek listáját - egy while ciklus segítségével sorról sorra feldolgozza az LVM targetek nevét, majd ssh kapcsolatot nyit, snapshotot készít, és lementi a targetek tartalmát.
Tesztjeim során sajnos az első target mentése után a while ciklus mindig megszakadt. Hogy miért? Azért, mert az SSH breakelte a ciklust. Megoldást egy fórumon találtam, a parancs végére egy < /dev/null írása megoldja a problémát:ssh example.com "lvcreate -L 10G -n snapshotneve -s targetneve >/dev/null 2>&1" < /dev/null