El fitxer sshd_config controla com es comporta el servidor SSH: per quin port escolta, qui hi pot entrar, amb quins mètodes d’autenticació, si es permeten túnels… Configurar-lo bé és una de les primeres coses que has de fer quan poses un servidor a Internet. En aquesta guia veuràs on és, com modificar-lo sense riscos i quines opcions convé revisar.
On és
- Linux (i la majoria d’Unix):
/etc/ssh/sshd_config. - Windows amb el servidor OpenSSH instal·lat:
C:\ProgramData\ssh\sshd_config(%ProgramData%\ssh\sshd_config).
No el confonguis amb /etc/ssh/ssh_config (sense la d), que és la configuració del client.
El directori sshd_config.d
A Debian, Ubuntu, Fedora, Rocky Linux i AlmaLinux, el fitxer principal comença amb aquesta línia:
Include /etc/ssh/sshd_config.d/*.conf
És la manera recomanada de fer canvis: crea un fitxer teu, per exemple /etc/ssh/sshd_config.d/10-seguretat.conf, i deixa el principal com està. Les actualitzacions del paquet no et trepitjaran els canvis, i sempre sabràs què has tocat.
Hi ha una regla important: per a cada opció, guanya el primer valor que es llegeix. Com que l’Include és al principi, el que posis als fitxers de sshd_config.d té prioritat sobre el fitxer principal, i entre ells s’apliquen per ordre alfabètic. Per això és bona idea començar el nom amb un número baix.
Compte amb els fitxers que hi deixen altres programes. A les imatges de núvol és habitual trobar-hi un 50-cloud-init.conf amb PasswordAuthentication yes, que anul·laria un PasswordAuthentication no que posessis en un fitxer que vingués després.
Com aplicar els canvis sense quedar-te fora
- Edita el fitxer:
sudo nano /etc/ssh/sshd_config.d/10-seguretat.conf
- Comprova la sintaxi. Si no diu res, és correcta:
sudo sshd -t
- Comprova quin valor s’aplicarà de debò per a cada opció (té en compte els
Includei l’ordre):
$ sudo sshd -T | grep -E '^(port|permitrootlogin|passwordauthentication) '
port 22
permitrootlogin no
passwordauthentication no
- Recarrega el servei. Les sessions obertes no es tallen:
sudo systemctl reload ssh # Debian, Ubuntu
sudo systemctl reload sshd # Rocky, AlmaLinux, RHEL, Fedora
- Prova-ho des d’un altre terminal abans de tancar la sessió actual. Si alguna cosa falla, encara pots corregir-la.
Opcions de seguretat més importants
Autenticació només amb claus
PubkeyAuthentication yes
PasswordAuthentication no
KbdInteractiveAuthentication no
Això impedeix entrar amb contrasenya i fa inútils els atacs de força bruta. Abans de posar-ho, comprova que pots entrar amb la teva clau (ho tens a com generar una clau amb ssh-keygen). KbdInteractiveAuthentication és l’altra via per la qual es poden demanar contrasenyes (a través de PAM); per això també es desactiva.
No permetre entrar directament com a root
PermitRootLogin no
Els valors possibles són:
| Valor | Què vol dir |
|---|---|
no | root no pot entrar per SSH de cap manera |
prohibit-password | root només pot entrar amb clau (és el valor per defecte a OpenSSH) |
forced-commands-only | Només amb clau i per executar una comanda concreta (per a còpies de seguretat automatitzades, per exemple) |
yes | Pot entrar també amb contrasenya. No ho facis |
El més habitual és entrar amb el teu usuari i fer servir sudo.
Limitar qui pot entrar
AllowUsers joan maria
Només aquests usuaris podran entrar. També accepta patrons de l’estil usuari@origen:
AllowUsers joan maria@192.168.1.*
Si gestiones molts usuaris, és més pràctic un grup:
AllowGroups sshusers
Hi ha també DenyUsers i DenyGroups per excloure’n alguns.
Limitar els intents i el temps per autenticar-se
MaxAuthTries 3
LoginGraceTime 30
MaxAuthTries: intents d’autenticació per connexió (per defecte, 6).LoginGraceTime: segons per autenticar-se abans que el servidor talli la connexió (per defecte, 120).
Desconnectar les sessions mortes
ClientAliveInterval 300
ClientAliveCountMax 2
El servidor comprova cada 300 segons si el client continua viu, i després de dues comprovacions sense resposta tanca la sessió.
Desactivar el que no facis servir
X11Forwarding no
AllowTcpForwarding no
AllowAgentForwarding no
X11Forwarding permet obrir aplicacions gràfiques remotes (Debian i Ubuntu l’activen al fitxer principal). AllowTcpForwarding controla els túnels SSH: si ningú en fa, desactiva’ls. Ara bé, si tu mateix fas servir túnels o ssh -J a través d’aquest servidor, has de deixar AllowTcpForwarding activat.
Altres opcions habituals
Port
Port 2222
Canviar el port no és una mesura de seguretat de debò, però redueix el soroll dels robots. Recorda obrir el port al tallafoc i, a Ubuntu 24.04 i a les distribucions amb SELinux, fer els passos addicionals que tens a la guia SSH: instal·lació i canvi de port.
Missatge abans d’entrar
Banner /etc/issue.net
Banner mostra el contingut d’un fitxer abans de l’autenticació: s’acostuma a fer servir per a avisos legals («accés només per a persones autoritzades»). La versió anterior d’aquest article el presentava com una manera de personalitzar la clau del servidor, però no hi té res a veure: les claus del servidor es configuren amb HostKey.
El missatge que veus després d’entrar és un altre: el motd (/etc/motd), que es controla amb PrintMotd i, a Debian i Ubuntu, amb PAM.
Excepcions amb Match
Els blocs Match apliquen opcions només a uns usuaris, grups o adreces. Per exemple, permetre la contrasenya només des de la xarxa local i exigir clau des de fora:
PasswordAuthentication no
Match Address 192.168.1.0/24
PasswordAuthentication yes
Els blocs Match van sempre al final del fitxer: tot el que hi ha a sota d’un Match forma part del bloc fins al següent Match. Pots comprovar el resultat per a una connexió concreta amb -C:
$ sudo sshd -T -C addr=192.168.1.20,user=joan,host=portatil | grep passwordauthentication
passwordauthentication yes
$ sudo sshd -T -C addr=10.0.0.5,user=joan,host=portatil | grep passwordauthentication
passwordauthentication no
Un exemple complet
Un fitxer /etc/ssh/sshd_config.d/10-seguretat.conf raonable per a un servidor amb accés des d’Internet:
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
AllowUsers joan maria
MaxAuthTries 3
LoginGraceTime 30
ClientAliveInterval 300
ClientAliveCountMax 2
X11Forwarding no
Completa-ho amb fail2ban per bloquejar les IP que insisteixin, i mantén el paquet openssh-server actualitzat.