SSH je glavni vhod v strežnik. Vse varnostne slabosti – šibka gesla, generična uporabniška imena, odprta vrata 22, neomejen dostop – gravitirajo tja. To navodilo prikazuje minimalni standard za produkcijo: ključi SSH, onemogočeno preverjanje pristnosti gesel, omejevanje hitrosti in zapora chroot za nezaupanja vredne uporabnike.
1. SSH ključi namesto gesel
Generiranje para ključev (odjemalec)
ssh-keygen -t ed25519 -C "ime@uredaj" -f ~/.ssh/id_ed25519Ed25519 je hitrejši in varnejši od RSA-2048. Če potrebujete združljivost s starejšimi sistemi, RSA-4096:
ssh-keygen -t rsa -b 4096Namestitev javnega ključa na strežnik
ssh-copy-id user@server # ili ručno: cat ~/.ssh/id_ed25519.pub || ssh user@server 'mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys'Preizkus
ssh user@server # trebalo bi raditi bez lozinke2. Zaklepanje SSH daemona
Uredi /etc/ssh/sshd_config :
# izmjena porta — opcionalno, smanjuje šum botova, ne daje pravu sigurnost Port 2222 # samo ključevi PasswordAuthentication no ChallengeResponseAuthentication no UsePAM yes KbdInteractiveAuthentication no PermitRootLogin no PermitEmptyPasswords no # ograniči koji korisnici smiju preko SSH AllowUsers deploy admin sftp-client1 # bez X11 forwardinga ako ga ne trebate X11Forwarding no # idle timeout ClientAliveInterval 300 ClientAliveCountMax 2 # algoritmi (sigurniji subset) KexAlgorithms curve25519-sha256,diffie-hellman-group16-sha512 Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.comPreverite konfiguracijo in znova zaženite:# izmjena porta — opcionalno, smanjuje šum botova, ne daje pravu sigurnost Port 2222 # samo ključevi PasswordAuthentication no ChallengeResponseAuthentication no UsePAM yes KbdInteractiveAuthentication no PermitRootLogin no PermitEmptyPasswords no # ograniči koji korisnici smiju preko SSH AllowUsers deploy admin sftp-client1 # bez X11 forwardinga ako ga ne trebate X11Forwarding no # idle timeout ClientAliveInterval 300 ClientAliveCountMax 2 # algoritmi (sigurniji subset) KexAlgorithms curve25519-sha256,diffie-hellman-group16-sha512 Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
sshd -t # test sintakse systemctl restart sshdNe prekinjajte odprte seje SSH pred testom. Odprite drug terminal in preverite, ali se lahko prijavite – če ne, popravite stanje iz prve seje.
3. Požarni zid – omejite, kdo se lahko poveže
Na ufw :
ufw allow from 85.10.0.0/16 to any port 22 ufw allow from 195.29.0.0/16 to any port 22 ufw deny 22 ufw enableZa dostop, ki temelji na VPN-ju (priporočilo za resne strežnike), SSH odprt samo od znotraj (WireGuard / OpenVPN).
4. Fail2ban — samodejno blokiranje z brutalno silo
apt install fail2ban cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local Uredi /etc/fail2ban/jail.local :
[sshd] enabled = true port = ssh filter = sshd logpath = %(sshd_log)s maxretry = 4 findtime = 10m bantime = 24h ignoreip = 127.0.0.1/8 85.10.0.0/16 # vaš VPN rangesystemctl restart fail2ban fail2ban-client status sshd[sshd] enabled = true port = ssh filter = sshd logpath = %(sshd_log)s maxretry = 4 findtime = 10m bantime = 24h ignoreip = 127.0.0.1/8 85.10.0.0/16 # vaš VPN range
systemctl restart fail2ban fail2ban-client status sshd5. Zapor Chroot za uporabnike, ki uporabljajo samo SFTP
Ko odjemalec potrebuje samo nalaganje SFTP (ne dostopa do lupine), mu dodelite zapor chroot – ne more zapustiti svoje mape.
# kreiraj grupu i korisnika groupadd sftponly useradd -m -g sftponly -s /sbin/nologin sftp-klijent1 passwd sftp-klijent1 # ili authorized_keys # ispravna vlasništva za chroot chown root:root /home/sftp-klijent1 chmod 755 /home/sftp-klijent1 mkdir -p /home/sftp-klijent1/upload chown sftp-klijent1:sftponly /home/sftp-klijent1/uploadDodaj v# kreiraj grupu i korisnika groupadd sftponly useradd -m -g sftponly -s /sbin/nologin sftp-klijent1 passwd sftp-klijent1 # ili authorized_keys # ispravna vlasništva za chroot chown root:root /home/sftp-klijent1 chmod 755 /home/sftp-klijent1 mkdir -p /home/sftp-klijent1/upload chown sftp-klijent1:sftponly /home/sftp-klijent1/upload
/etc/ssh/sshd_config :
Match Group sftponly ChrootDirectory /home/%u ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no PasswordAuthentication noZnova zaženite sshd in preizkusite z zunanjega odjemalca.Match Group sftponly ChrootDirectory /home/%u ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no PasswordAuthentication no
6. Dodatna zaščita: 2FA na SSH
Za skrbniški dostop združite ključ SSH z drugim faktorjem (TOTP).
apt install libpam-google-authenticator google-authenticator # interaktivno, za vašeg user-a V /etc/pam.d/sshd :
auth required pam_google_authenticator.so nullok /etc/ssh/sshd_config :
AuthenticationMethods publickey,keyboard-interactive ChallengeResponseAuthentication yes KbdInteractiveAuthentication yesSedaj SSH zahteva ključ + kodo TOTP.AuthenticationMethods publickey,keyboard-interactive ChallengeResponseAuthentication yes KbdInteractiveAuthentication yes
7. Revizija – kaj se zgodi
# tko je u zadnje vrijeme bio logiran last -a || head -20 # neuspjeli pokušaji journalctl -u sshd || grep "Failed password" || tail # trenutno spojeni who # historija komandi pojedinog usera sudo cat /home/deploy/.bash_history || tail -508. Tipke – vrtenje in krmiljenje
- Ne delite zasebnega ključa med ljudmi – vsak skrbnik ima svojega.
- Ne shranjujte zasebnih ključev brez gesla (uporabite ssh-agent).
- Ključe menjajte vsako leto. Odstranite stare iz
authorized_keys. - Ko nekdo zapusti ekipo, takoj odstranite njegov ključ z vseh strežnikov – geslo se ne spremeni, ključ pa se izbriše.
9. Kontrolni seznam
- OverjanjeGesla = ne.
- PermitRootLogin = ne.
- Dovoli uporabnike (AllowUsers) omejuje, kdo lahko vstopi.
- fail2ban aktiven, dnevnik preverjen.
- Požarni zid dovoljuje SSH samo iz znanih IP-jev/VPN-jev.
- Uporabniki samo s SFTP v zaporu chroot.
- 2FA za administratorski SSH.
- Ključi navedeni, lastniki znani, rotacija načrtovana.
Na strežnikih, ki jih upravlja WMD, je ta nastavitev privzeta – utrjevanje se izvede vsakič, ko se okolje nadgradi. Če potrebujete revizijo obstoječega strežnika ali migracijo z dostopa na podlagi gesla na ključe, se obrnite na nas.