Puncte:2

Poate o încercare de conectare neautorizată să ocupe o conexiune MySQL pentru o perioadă lungă de timp?

drapel in

MySQL are un număr limitat de conexiuni simultane definite de max_connections variabilă de către furnizorul meu de cloud. În prezent limitat la 151 conexiuni.

Există un singur server web care utilizează această bază de date, prin urmare ar trebui să fie mai mult decât suficient. Cu toate acestea, am fost surprins să văd că în prezent am peste 30 de conexiuni active la serverul meu:

mysql> arată starea unde `variable_name` = 'Threads_connected';
+-------------------+-------+
| Nume_variabilă | Valoare |
+-------------------+-------+
| Fire_conectate | 34 |
+-------------------+-------+

Deși nu ar trebui să fie aproape nimic care îl folosește în acest moment și îl pot verifica cu show processlist: (o singură conexiune aici)

mysql> arată lista de procese;
+--------+------------+--------------------+------ ------+---------+------+----------+---------------- ---+-----------+---------------+
| Id | Utilizator | Gazdă | db | Comanda | Timp | Stat | Info | Rânduri_trimise | Rânduri_examinate |
+--------+------------+--------------------+------ ------+---------+------+----------+---------------- ---+-----------+---------------+
| 272130 | ********** | ****************** | ********** | Interogare | 0 | pornind | arata lista proceselor | 0 | 0 |
+--------+------------+--------------------+------ ------+---------+------+----------+---------------- ---+-----------+---------------+

M-am chinuit să încerc să dau seama de locația celor 33 de conexiuni rămase și în cele din urmă mi-am dat seama: ar putea fi acestea atacuri de forță brută în masă? Poate că 30-40 de hackeri încearcă să-mi ghicească parola și asta blochează un fir pentru fiecare atacator?

Este corectă presupunerea mea?

ACTUALIZARE 2021-07-07: S-au adăugat mai multe detalii despre starea MySQL

mysql> arată starea unde `variable_name` ca '%threads%' sau `variable_name` ca '%connection%';
+----------------------------------+-------------- --------+
| Nume_variabilă | Valoare |
+----------------------------------+-------------- --------+
| Connection_errors_accept | 0 |
| Erori_interne_conexiune | 0 |
| Erori_conexiune_max_conexiuni | 0 |
| Connection_errors_peer_address | 8 |
| Connection_errors_select | 0 |
| Connection_errors_tcpwrap | 0 |
| Conexiuni | 482365 |
| Fire_inserate_întârziate | 0 |
| Max_conexiuni_utilizate | 74 |
| Timp_max_utilizat_conexiuni | 2021-07-05 09:10:27 |
| Fire_de_lansare_lentă | 0 |
| Threadpool_threads_idle | 0 |
| Threadpool_threads | 0 |
| Threads_cached | 5 |
| Fire_conectate | 36 |
| Fire_create | 2882 ​​|
| Threads_running | 1 |
+----------------------------------+-------------- --------+
drapel in
Dacă conexiunile sunt atribuite contului dvs., autentificarea la nivel MySQL a fost deja trecută, așa că forța brută a contului nu are sens. Pe baza descrierii dvs., aș presupune că toate firele conectate aparțin unui singur proces de server.
adamsfamily avatar
drapel in
De fapt, nu sunt sigur dacă conexiunile sunt deja alocate contului meu. Mă întreb cum îmi pot da seama de asta? BTW, acesta este serviciul de bază de date MySQL „partajat” al Arubacloud, deci alți utilizatori ar putea fi pe același server.Este posibil să văd și alte conexiuni autentificate în „Threads_connected” care aparțin altor utilizatori? (Nu văd că este foarte probabil ca acestea să fie conexiuni de la serverul meu, deoarece chiar dacă nu există trafic pe server, conexiunile sunt încă vii - 12 ore mai târziu)
drapel in
Presupunând că site-ul web nu este critic, există o măsură simplă pentru a vedea dacă conexiunea provine de la serverul dvs. web: opriți serverul web și verificați din nou conexiunile. Alternativ, dacă serverul web nu este partajat, ați putea să vă uitați la conexiunile TCP dintre serverul web și serverul mysql. Fiecare conexiune la baza de date are întotdeauna o conexiune TCP (presupunând că conexiunea MYSQL utilizează TCP).
adamsfamily avatar
drapel in
Am încercat, închideți site-ul web și conexiunile sunt încă între 33-38. Cred că trebuie să fie fie 1) alți utilizatori ai serverului MySQL pe care nu îi văd cu „afișează lista de procese” sau 2) utilizatori neautentificați -- totuși nu pot dovedi nici...
Puncte:1
drapel ua
  • AFIȘAȚI LISTA DE PROCESE afișează doar conexiunile pentru utilizatorul care rulează acea comandă. Asigurați-vă că vă conectați ca rădăcină pentru a obține lista completă. „root” este de fapt mai puternic decât ai nevoie; poate exista un alt utilizator ("admin"?) care este suficient de puternic. În ceea ce privește ACORDA, toate nevoile „utilizatorului” sunt PROCES.

  • Odată ce ați primit lista de procese, Timp va indica câte secunde de când s-au conectat.

  • AFIȘAȚI STARE CA „Threads_running”; va arăta câte conexiuni sunt active în prezent.

  • AFIȘAȚI STAREA CA „Max_used_connections”; este o linie mare. Dacă nu a lovit încă max_connections (ai menționat 151), atunci nu ai încă (de la repornire) „rămași fără conexiuni”.

  • Timpul de expirare poate fi mare, ceea ce duce la conexiuni care stă.

adamsfamily avatar
drapel in
Mulțumesc Rick, din păcate nu mă pot autentifica ca „rădăcină”, deoarece furnizorul de baze de date gestionate nu mă permite. Cu toate acestea, sunt autentificat cu singurul cont de utilizator pe care îl am, așa că ar trebui să văd cel puțin propriile mele conexiuni. Am actualizat întrebarea cu un rezultat mai detaliat. „Filigranul înalt” este grozav, indicator foarte bun, mulțumesc!
drapel ua
@adamsfamily - Am adăugat la primul meu articol marcator.

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.