Încerc să obțin următoarele pe serverele mele OpenBSD 6.9:
- Interzicerea folosirii tuturor cheilor, cu excepția
ssh-ed25519
unul pe ambele SERVER și CLIENT laturi.
- Limitare
ssh-keygen -A
să genereze chei numai de către cei autorizați ssh-ed25519
algoritm și nimic altceva.
Pentru a le atinge, am adăugat următoarele rânduri la mine sshd_config
:
HostKey /etc/ssh/ssh_host_ed25519_key
CASignatureAlgorithms ssh-ed25519
HostbasedAcceptedKeyTypes ssh-ed25519
HostKeyAlgorithms ssh-ed25519
PubkeyAcceptedKeyTypes ssh-ed25519
Am adăugat, de asemenea, următoarele rânduri la mine ssh_config
:
CASignatureAlgorithms ssh-ed25519
HostbasedAcceptedKeyTypes ssh-ed25519
HostKeyAlgorithms ssh-ed25519
PubkeyAcceptedKeyTypes ssh-ed25519
Am șters toate cheile, cu excepția celei autorizate.
Sshd repornit:
# rcctl restart sshd
sshd(ok)
sshd(ok)
După ce am verificat dacă setările mele sunt utilizate, rulând următoarele comenzi:
# ssh -Q HostbasedAcceptedAlgorithms
# ssh -Q HostKeyAlgorithms
# ssh -Q PubkeyAcceptedAlgorithms
Pentru surprinderea mea, cu asta se întorc toți:
ssh-ed25519
[email protected]
[email protected]
[email protected]
ssh-rsa
rsa-sha2-256
rsa-sha2-512
ssh-dss
ecdsa-sha2-nistp256
ecdsa-sha2-nistp384
ecdsa-sha2-nistp521
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
Cu alte cuvinte, restricțiile cheie sunt ignorate.
Doar pentru a fi sigur, am repornit chiar și serverul, dar nu există nicio diferență.
O posibilă soluție este eliminarea tuturor fișierelor cheie, cu excepția celui autorizat. Cu toate acestea, scriptul de pornire /etc/rc
are o linie, ssh-keygen -A
, care regenerează toate cheile ssh lipsă după fiecare repornire a sistemului, înainte ca demonul sshd să pornească, inclusiv cele ale algoritmilor interzisi!
Deci, scoaterea cheilor nu rezolvă problema.
Ca o soluție suplimentară, aș putea elimina ssh-keygen -A
linie din scriptul de inițializare sau înlocuiți-l cu algoritmul meu personalizat de generare a cheilor, dar asta va duce înapoi la locul în care a început totul: trebuie să faceți cu această problemă din nou și din nou, de ex. după fiecare actualizare de sistem, ori de câte ori echipa OpenBSD lansează o nouă versiune a /etc/rc
. Automatizarea eliminării acelei linii și testarea unei astfel de soluții neglijente pe un număr mare de servere este dificilă și poate duce la o defecțiune masivă a rețelei dacă ceva nu merge bine.
Prin urmare, mi-am continuat investigația și am săpat în codul sursă al ssh-keygen
. Am aflat că nu este posibil să restricționez comportamentul -A
comuta din exterior de ex. prin fișierele de configurare. Nici măcar nu efectuează un test preliminar dacă cheile sunt autorizate sau nu, ci doar generează cheile, conform unei liste de algoritmi dintr-o matrice hardcoded. Singura modalitate de a evita acest lucru este prin editarea, recompilarea și utilizarea unui furk personalizat de ssh-keygen
, dar apoi va trebui să mă ocup de asta după fiecare actualizare OpenSSH...
Am găsit o soluție parțială pentru alte sisteme de operare, dar nu și pentru OpenBSD.
Poate cineva să mă îndrume către o soluție potrivită? De ce eu sshd_config
și ssh_config
restricțiile cheie sunt ignorate și cum se obține ssh-keygen -A
nu mai generați chei cu algoritmi interziși?
Înainte ca cineva să întrebe: toate celelalte setări sunt utilizate în ambele fișiere de configurare de către OpenSSH, astfel încât aceste fișiere de configurare sunt într-adevăr cele care sunt încărcate.
Multumesc mult pentru toate raspunsurile utile.