Puncte:17

Cum pot proteja SSH?

drapel id
Ali

Verific /var/log/secure și am aceste jurnale:

9 iulie 13:02:56 localhost sshd[30624]: Administrator utilizator nevalid de la portul 223.196.172.1 37566
9 iulie 13:02:57 localhost sshd[30624]: conexiune închisă de administratorul utilizatorului nevalid 223.196.172.1 portul 37566 [preauth]
9 iulie 13:03:05 localhost sshd[30626]: administrator de utilizator nevalid din portul 223.196.174.150 61445
9 iulie 13:03:05 localhost sshd[30626]: Conexiune închisă de administratorul utilizatorului nevalid 223.196.174.150 portul 61445 [preauth]
9 iulie 13:03:16 localhost sshd[30628]: administrator de utilizator nevalid din portul 223.196.169.37 62329
9 iulie 13:03:24 localhost sshd[30628]: conexiune închisă de administratorul utilizatorului nevalid 223.196.169.37 portul 62329 [preauth]
9 iulie 13:03:29 localhost sshd[30630]: administrator de utilizator nevalid de la portul 223.196.169.37 64099
9 iulie 13:03:30 localhost sshd[30630]: conexiune închisă de administratorul utilizatorului nevalid 223.196.169.37 portul 64099 [preauth]
9 iulie 13:03:45 localhost sshd[30632]: administrator de utilizator nevalid de la portul 223.196.174.150 22816
9 iulie 13:03:46 localhost sshd[30632]: conexiune închisă de administratorul utilizatorului nevalid 223.196.174.150 portul 22816 [preauth]
9 iulie 13:06:17 localhost sshd[30637]: administrator de utilizator nevalid din portul 223.196.168.33 33176
9 iulie 13:06:17 localhost sshd[30637]: conexiune închisă de administratorul utilizatorului nevalid 223.196.168.33 portul 33176 [preauth]
9 iulie 13:07:09 localhost sshd[30639]: administrator de utilizator nevalid de la 223.196.173.152 portul 61780
9 iulie 13:07:25 localhost sshd[30641]: administrator de utilizator nevalid din portul 223.196.168.33 54200
9 iulie 13:07:26 localhost sshd[30641]: conexiune închisă de administratorul utilizatorului nevalid 223.196.168.33 portul 54200 [preauth]
...

Se pare că cineva încearcă să se conecteze prin SSH. Dezactivez autentificarea de către utilizatorul root și activez autentificarea cu cheie publică/privată, dar este acesta un atac DDoS? Și folosește RAM/CPU?

Ce ar trebuii să fac?

marcelm avatar
drapel ng
_"Eu [...] activez autentificarea cu cheie publică/privată, ..."_ - Dar ați dezactivat și autentificarea prin parolă?
marcelm avatar
drapel ng
[Acest răspuns](https://unix.stackexchange.com/a/503346/109651) poate fi, de asemenea, de interes.
Puncte:45
drapel br

Acesta este doar zgomotul normal de fundal pe Internet al oamenilor care scanează pentru servere vulnerabile.

Puteți adăuga o regulă iptables pentru a limita rata conexiunilor de intrare (de exemplu, patru în patru minute) pentru o soluție simplă (dar asta vă va bloca și dacă deschideți prea multe conexiuni sau cineva falsifică pachete SYN care provin de la adresa dvs.):

iptables -A INPUT -p tcp -m tcp --dport 22 -m stare --state NOU -m recent --update --seconds 240 --hitcount 4 --name ssh-v4 --mask 255.255.255.255 --rsource -j REJECT --reject-cu tcp-resetare
iptables -A INTRARE -p tcp -m tcp --dport 22 -m stare --state NOU -m recent --set --name ssh-v4 --mask 255.255.255.255 --rsource -j ACCEPT

Soluția potrivită este să folosiți un instrument ca fail2ban care analizează fișierul jurnal pentru autentificări nereușite și creează reguli de firewall la cerere -- un pic mai multă muncă de configurat, dar necesită o conexiune stabilită și o autentificare eșuată pentru a se declanșa, astfel încât nu va reacționa la încercările de conexiune falsificată sau autentificări reușite, cum ar fi abordarea simplă face.

drapel cn
ce zici de schimbarea portului ssh?
Michael Hampton avatar
drapel cz
@njzk2 Îți deranjează doar pe tine. Boții vor găsi portul ssh alternativ mai devreme sau mai târziu.
drapel us
Mai multă muncă de configurat? Pe Debian, `apt-get install fail2ban` vă va oferi protecție cu valori implicite rezonabile
LinuxSecurityFreak avatar
drapel ru
@MichaelHampton Există 65535 de porturi, mă îndoiesc cumva că roboții ar avea o astfel de rază, dar s-ar putea să mă înșel. Știi asta cu adevărat?
drapel br
@LinuxSecurityFreak, există [shodan](https://shodan.io).
Michael Hampton avatar
drapel cz
@LinuxSecurityFreak Nu schimb personal portul ssh, dar am auzit numeroase plângeri de la oameni de-a lungul anilor care au făcut-o și _totuși_ au făcut roboți să încerce ssh pe noul port pe care l-au ales, chiar și atunci când nu era ceva evident ca 2222.Și, desigur, shodan scanează totul. Poți fi sigur că nu sunt singurii.
drapel au
@MichaelHampton Schimbarea portului va scăpa de *unii* roboți. De asemenea, în ce fel este incomod (dincolo de configurarea inițială)?
drapel cn
@jonbentley trebuie să-și amintească să-l schimbe în fiecare client pe care doriți să îl utilizați pentru a vă conecta. Security by Obscurity nu este deloc securitate, puteți închiria câteva mașini AWS pentru mai puțin de 50 USD care vor scana întreg spațiul de adrese IPv4 în câteva ore. Mai bine să blochezi infractorii decât să încerci să te ascunzi de ei
drapel au
@hardillb „trebuie să-ți amintești” - care pare foarte specific cazului de utilizare. Aș crede că majoritatea oamenilor nu trec la clienți noi prea des (sau dacă aceștia sunt, probabil că furnizarea este sub controlul lor) și pot pur și simplu să stocheze setările o dată și apoi să uite de ele (folosind, de exemplu, Ansible sau Stow dacă furnizați mașini noi). frecvent). „Securitatea prin obscuritate nu este securitate” este o concepție greșită comună. *În sine* nu este nicio securitate, dar este o parte validă a apărării în profunzime și poate oferi unele beneficii ușoare atunci când este utilizat corect.
Jason avatar
drapel cn
@LinuxSecurityFreak re: „Există 65535 de porturi, mă îndoiesc cumva că roboții ar avea o astfel de rază” - m-am îndoit și eu, până când am văzut un client care mutase portul la ceva de genul 20502. A fost publicat pe shodan.io ca un port deschis și serviciul a fost identificat corect. Impresionant. Și amintește.
drapel de
Am avut un operator de infrastructură care mi-a recomandat să schimb porturile sshd cu mult timp în urmă și am crezut că este un gunoi complet, ca doar multe dintre comentarii, aici, dar am făcut-o oricum. Și încă primim gunoi. Dar, în comparație cu serverele pe care _nu ne-am schimbat_, porturile, sunt practic inactive.Au trecut 15 ani și nicio cantitate de Shodan-fu nu a îndreptat un număr mare de roboți către serverele noastre. YMMV. Aceasta *nu* este securitate prin obscuritate. Este doar obscuritate. Securitatea provine din utilizarea cheilor ssh puternice pentru autentificare și nu a parolelor. De asemenea, +1 pentru fail2ban :)
drapel se
@LinuxSecurityFreak Uită-te la întrebare. Acel bot a încercat pe diferite porturi. Nu portul 22. Deci, pentru OP, el se confruntă deja cu un bot care scanează în mod special porturile și nu încearcă să facă ssh pe portul 22
drapel tf
Nu aș opta pentru limita oarbă de rată afișată, acest lucru face să fie mult prea ușor să fie eliminat DoS de pe server, chiar și prin scanare aleatorie.
John Mee avatar
drapel il
Experiență personală reală aici: schimbarea numărului de port, deși nu este o soluție reală, funcționează cu siguranță pentru a reduce riscul... cel puțin pe gazde minore. Combinată cu autentificarea cu cheie a fost cel mai mic efort de a recompensa raportul - două linii schimbate și o repornire nervoasă.
drapel br
@Pelle, limita de rată este pe IP sursă, deci este „doar” vulnerabilă la refuzul direcționat al serviciului.
drapel mx
@hardillb Da, este doar obscuritate, dar obscuritatea este adesea suficientă pentru a descuraja un procent netrivial de atacuri aici. Cu excepția cazului în care sunteți vizat în mod activ, majoritatea roboților nu vor încerca deloc porturi alternative (vorbind de la mai mult de un deceniu de experiență aici), așa că pur și simplu schimbați portul, chiar dacă este o schimbare la un â Port alternativ „evident” este suficient pentru a reduce semnificativ numărul de atacatori care reprezintă de fapt o amenințare.
user avatar
drapel sa
@slebetman Acesta este portul client, nu are nimic de-a face cu portul serverului, deoarece dacă ar verifica diferite porturi pentru server, nu ar apărea în jurnalele SSH.
drapel tf
@SimonRichter: În acest caz, continuă :-)
drapel in
Încă un pic de experiență personală: fail2ban nu realizează aproape nimic în practică aici. Toată scanarea SSH pe care o primesc provine de la rețele bot, în care fiecare gazdă la distanță încearcă doar 1 sau 2 autentificări, ceea ce nu este suficient pentru a declanșa fail2ban (puteți vedea acest lucru și în jurnalul OP). Dezactivați autentificarea prin parolă și utilizați numai autentificarea cheii publice.
Puncte:9
drapel in

După cum a menționat @Simon Richter, acesta este doar zgomot de fundal pe internet și nu ar trebui să vă faceți griji. Câteva lucruri de care trebuie să te asiguri sunt următoarele:

Schimbarea portului va face ca problema să dispară, dar este securitate prin obscuritate și poate crea iluzia de siguranță în timp ce nu oferă niciuna.

Iată alte câteva recomandări SSH înconjurător, precum și contraargumente pentru argumentele „cele mai bune practici”.

Puncte:3
drapel in

Ești în India? Toate acele adrese IP enumerate sunt în bloc:

223.196.160.0 - 223.196.191.255   

care conform bazei de date WHOIS este alocat

descr: Andhra Pradesh State FiberNet Limited
adresa: 10-2-1, etaj III, complex FDC, AC Guards, Hyderabad, Andhra Pradesh-500028

O soluție pe termen scurt este blocarea întregului bloc 223.196.160.0/19 la firewall, dar asta înseamnă microgestionarea adreselor IP și devine o luptă dificilă.


În schimb, puteți refuza TOATE ssh-urile, cu excepția IP-urilor sursă despre care știți că sunt de încredere. Pur și simplu aveți grijă să nu vă închideți în propria gazdă. Dacă nu aveți o IP statică, puteți permite o blocare sau, eventual, puteți analiza rularea unui server VPN pe gazdă.

Sau, dacă nu trebuie să permiteți conexiuni SSH de pe internet, respingeți-le și reactivați-le numai când este necesar.

user10489 avatar
drapel nc
Sau folosiți declanșarea portului pentru a vă lista albă când IP-ul dvs. se schimbă.
Puncte:1
drapel in

Iată un script simplu pe care l-am scris pentru a bloca toate încercările neautorizate de a vă conecta la serverul meu de dezvoltare.

#!/bin/bash

ban=$HOME/banned.txt
b_log=/var/log/banned.log

Buturuga () {
cat $ban | uniq >> $b_log
}

l_log () {
lastb | awk '{ print $3 }' | sed -r '/(Luni|Mar|Mier|Jo|Vine|Sam|Sun|boot|tty2)/d' | sortare | sed '/^$/d' | unic | tee $ban
}

cădere brusca () {
pentru x în $(cat $ban); do iptables -A INPUT -s $x -j DROP; Terminat
}

l_log
cădere brusca
Buturuga
rm -f $ban
echo > /var/log/btmp
iptables-salvare

Dacă setați scriptul să ruleze prin cron în fiecare minut, acesta va reduce dramatic zgomotul din jurnalele dvs. și va bloca IP-urile ofensatoare, oferindu-le doar 1 minut pentru a încerca forța brută înainte de a fi blocate.

Ar fi o idee bună să introduceți IP-ul dvs. și orice alte IP-uri cu care accesați serverul dvs. în firewall iptables -I INTRARE -s xxx.xx.xxx.xx -j ACCEPT

Va fi generat un jurnal cu toate IP-urile interzise.

Criggie avatar
drapel in
Deci, luați jurnalele de ieșire ale fail2ban și renunțați permanent la acele IP-uri sursă folosind regulile iptables? De ce nu modificați iptables pentru a lăsa adresele proaste blocate pentru mai mult timp? De asemenea, riscați să vă blocați IP-urile locale dacă introduceți greșit o parolă sau ceva similar, în timp ce fail2ban are opțiuni „nu blocați niciodată aceste intervale”.
HatLess avatar
drapel in
Nu. Nu folosesc fail2ban, doar iptables. Primesc intrarea mea de la `lastb`, ultimele conectări eșuate, apoi extrag doar IP-urile și le elimin.
iBug avatar
drapel um
Se pare că reinventezi fail2ban. F2B este deja un instrument cuprinzător pentru exact această sarcină, fără motiv pentru a o refuza.
Puncte:1
drapel de
  1. Utilizați numai autentificare bazată pe cheie. Mulți roboți atacă doar sistemele bazate pe parole. Utilizarea autentificarea bazată pe parolă este oricum o idee proastă.
  2. Utilizare https://www.sshguard.net/ : blochează IP-urile după câteva conectări eșuate.
  3. Utilizați portul aleatoriu (nu 22), va opri unii roboți.
  4. Asigurați-vă că sistemul dvs. nu permite autentificarea root
  5. Dacă vă autentificați doar de acasă, luați în considerare deschiderea SSH numai pentru IP/ISP sau țara dvs.
Puncte:1
drapel ck

1. Schimbați-vă sshd portul de ascultare

Oricât de simplu pare, schimbarea portului din valoarea implicită 22 la o valoare personalizată (de ex. 2200) pe un IP public ar putea reduce numărul de scanări de porturi de la mii pe zi la câteva zeci. Pentru un tutorial vezi Aici.

Acestea fiind spuse, deși acest lucru reduce supărarea de a fi scanat prin port, acesta NU oferi o securitate reală. „Securitatea prin obscuritate” este un mit și nimic mai mult.

2. Utilizați autentificarea cu cheia publică și dezactivați autentificarea prin parolă

Boții ar putea ghici corect o parolă, dar sunt nu o să ghicesc corect o cheie privată. Atâta timp cât folosiți algoritmi moderni și nu vă scurgeți cheia accidental. Pentru un tutorial vezi Aici.

Rețineți că acest lucru înseamnă că nu vă veți mai putea autentifica de la nicio mașină aleatorie, cu excepția cazului în care aveți cheia cu dvs. (pe care trebuie să o asigurați prin alt mod).

3. Utilizați fail2ban

Dacă eșuează de 5 ori, interziceți-le să încerce din nou pentru o zi sau ceva. Asta le va arăta. Foarte eficient împotriva încercărilor de forță brută. Pentru un tutorial vezi Aici.

Dezavantajul este că s-ar putea să te blochezi dacă într-o zi ai degetele tremurătoare (beat sau ceva de genul ăsta, nu știu).

4. Interziceți înainte o listă de IP-uri cunoscute pentru utilizare abuzivă

Surse ca Abuz de IPDB menține liste mari de IP-uri rău intenționate cunoscute, accesibile prin API. Veți avea nevoie de o cheie API pentru ao utiliza, dar puteți înregistra un cont gratuit destul de ușor. Trageți lista și folosiți ceva de genul iptables pentru a interzice acele IP-uri cunoscute în vrac. Configurați o lucrare cron pentru a o automatiza periodic pentru cel mai bun efect. Iată un script foarte simplu pe care l-am scris (și folosesc personal) să fac exact asta. Simțiți-vă liber să-l folosiți ca referință, dar NU-L FOLOSIȚI ÎN PRODUCȚIE.

Din experiența mea personală, această metodă este la fel de eficientă (dacă nu mai mult) ca metoda #3.


Personal, folosesc toate cele 4 metode enumerate mai sus, iar VPS-ul meu ar putea primi una sau două încercări de autentificare rău intenționate în jurnalul meu de securitate, într-o lună proastă. Iată istoricul interceptărilor iptables prin metoda #4:

$ abip-hist
Lanț abip-ban (1 referințe)
 pkts bytes target prot opt ​​in out source destination
  362 14480 DROP toate -- * * 45.143.200.6 0.0.0.0/0
  307 12280 DROP toate -- * * 185.156.73.104 0.0.0.0/0
  288 12672 DROP toate -- * * 212.133.164.75 0.0.0.0/0
  277 19911 DROP all -- * * 146.88.240.4 0.0.0.0/0
  250 11000 DROP toate -- * * 212.133.164.14 0.0.0.0/0
  230 9200 DROP toate -- * * 45.146.164.213 0.0.0.0/0
  215 8600 DROP toate -- * * 185.156.73.67 0.0.0.0/0
  214 8560 DROP toate -- * * 5.188.206.18 0.0.0.0/0
  202 8080 DROP toate -- * * 193.27.228.63 0.0.0.0/0
  201 8040 DROP toate -- * * 193.27.228.64 0.0.0.0/0
  199 7960 DROP toate -- * * 193.27.228.59 0.0.0.0/0
  197 7880 DROP toate -- * * 193.27.228.65 0.0.0.0/0
  197 7880 DROP toate -- * * 193.27.228.61 0.0.0.0/0
  196 7840 DROP toate -- * * 45.135.232.119 0.0.0.0/0
  196 7840 DROP toate -- * * 193.27.228.60 0.0.0.0/0
  196 7840 DROP toate -- * * 193.27.228.58 0.0.0.0/0
  189 7560 DROP toate -- * * 45.146.165.149 0.0.0.0/0
  184 7360 DROP toate -- * * 45.155.205.247 0.0.0.0/0
  184 7360 DROP toate -- * * 195.54.160.228 0.0.0.0/0
  182 7280 DROP toate -- * * 45.143.203.12 0.0.0.0/0
  181 7240 DROP toate -- * * 45.141.84.57 0.0.0.0/0
  180 7200 DROP toate -- * * 45.135.232.85 0.0.0.0/0
  176 7040 DROP toate -- * * 45.146.165.148 0.0.0.0/0
...
asta continuă pentru 1700 de linii...

$ timp de funcționare
06:36:49 până la 16 zile, 15:24
Z4-tier avatar
drapel us
+1 pentru „schimbați-vă portul”. Doar nu-l schimba în ceva la fel de atractiv (sau mai mult) pentru un posibil atacator. Utilizați un port obscur, nealocat, cu numere mai mari; ceva peste 10000. Obișnuiam să rulam ssh pe 23 (portul telnet) doar pentru *ha-ha's* și wow, asta a obținut o mulțime de conexiuni.
Puncte:0
drapel er
lev

După cum au menționat și alte răspunsuri, nu trebuie să vă faceți griji prea mult în legătură cu asta, dar dacă doriți să adăugați un alt nivel de securitate, puteți încerca să utilizați port knocking.

Ideea este să păstrați portul ssh închis și să îl deschideți numai către ips, care efectuează o anumită secvență de operare înainte, ceva de genul:

portul syn 1000
port syn 2000
port syn 3000
# portul ssh este acum deschis
ssh...

poti obtine mai multe detalii aici: https://www.rapid7.com/blog/post/2017/10/04/how-to-secure-ssh-server-using-port-knocking-on-ubuntu-linux/

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.