Ce este ATTEMPT_.HLP și cum se remediază? Rezolvarea problemei: încercare de conectare Măsuri suplimentare anti-hacking.

Ce este ATTEMPT_.HLP și cum se remediază?  Rezolvarea problemei: încercare de conectare Măsuri suplimentare anti-hacking.
Ce este ATTEMPT_.HLP și cum se remediază? Rezolvarea problemei: încercare de conectare Măsuri suplimentare anti-hacking.

Această scurtă postare este despre pluginul Limit Login Attempts, care vă permite să protejați panourile de administrare ale blogurilor WordPress. Un plugin care vă permite să limitați numărul de încercări ale hackerilor de blog - hackeri care încearcă să intre în panoul de administrare și să preia blogul. Există destul de multe metode și pluginuri pentru a vă proteja împotriva hackingului, iar unele dintre ele sunt foarte serioase. Dar un blog tânăr, cu trafic și autoritate reduse, de regulă, nu este în pericol. Deocamdată. Dar poți instala Limit Login Attempts chiar dacă nu pentru un blog foarte „cool”, pe care îl consider, dar în acest moment, și propria ta resursă web modestă.

Veți fi surprinși, dar după ce am instalat acest plugin, am fost surprins să constat că un atacator sub numele de admin a încercat să pătrundă în blogul meu, iar după încercări nereușite, a fost blocat folosind pluginul timp de 24 de ore. Și au trecut doar câteva ore de la instalarea lui!

Mai jos este o captură de ecran a unei părți din scrisoarea pe care am primit-o ieri în e-mailul meu:

Nu m-am putut abține să nu-mi amintesc cum am descoperit și remediat o „gaură” în subiectul blogului. Ce se întâmplă dacă aș lăsa totul vizibil sau aleg login-ul de administrator și un atacator a ghicit parola?

Sper că v-am convins, dragi webmasteri, că un plugin atât de simplu, dar ușor, nu va interfera cu blogul dumneavoastră.

Pe scurt despre instalarea și configurarea pluginului Limit Login Attempts

Totul este absolut simplu: doar găsiți pluginul căutând în panoul de administrare numele corespunzător, instalați și activați.

Apoi din Opțiuni, selectând pluginul, mergeți la setări. În principiu, nu trebuie să schimbați nimic aici, dar vă recomand să bifați caseta care permite uneia dintre funcțiile Limitare încercări de conectare să trimită mesaje despre încercările de intruziune a hackerilor către e-mailul dvs. Această funcție de plugin vă va permite să primiți un rezumat rapid al încercărilor de hacking.

Cum funcționează pluginul Limitare încercări de conectare

se bazează pe restricționarea accesului la panoul de administrare al site-ului atunci când introduceți o autentificare și o parolă. Cu alte cuvinte, creează o limită a numărului de încercări de autorizare, inclusiv suport pentru cookie-uri, pe baza adresei IP a utilizatorului de internet. A avea administratorul site-ului deconectat de la panou de fiecare dată și șterge constant cookie-urile, este o sarcină extrem de ingrată. În acest caz, pluginul Limit Login Attempts este pur și simplu de neînlocuit.

Pluginul, printre altele, furnizează adresa IP a hackerului și poate fi folosit pentru a identifica și pedepsi hackerul prin toate mijloacele disponibile.

Măsuri suplimentare anti-hacking

Acest articol, așa cum am indicat mai sus, nu mai este singurul despre securitatea site-urilor WordPress. În ea mai devreme, dar mai mult manual detaliat despre securitatea site-ului web - „“, - am atins și subiectul pluginurilor concepute pentru o funcție similară. În special, încă două plugin-uri care pot funcționa împreună. Acestea sunt pluginurile de atac Login LockDown + Anti-XSS (probabil combinația Limit Login Attempts + atac Anti-XSS va funcționa în mod similar), munca despre care vorbește Alexey Kozymaev în tutorialul său video. Am decis să postez videoclipul pe această pagină.

Cum remediu suplimentar de la invadările site-ului, în același timp recomand un plugin pe care nu l-am menționat niciodată în mesajele mele. Se numește Blocarea interogărilor necorespunzătoare (BBQ); Acest plugin vă protejează automat site-ul de solicitările de adrese URL rău intenționate. Instalarea se face prin căutare în panoul de administrare, nu sunt necesare setări.

(Vizitat de 43 ori, 1 vizite astăzi)

Primesc această eroare. Parametrul necesar „etichetă” lipsește în Android toaster, vă rugăm să ajutați, nu găsesc eroarea mea mai jos. Am codul de utilizator Android și codul serverului php de mai sus. Folosesc biblioteca volley pentru httprequests.

StringRequest strReq = StringRequest nou (Request.Method.POST, AppConfig.URL_REGISTER, nou Response.Listener () ( @Override public void onResponse(String de răspuns) ( Log.d(TAG, "Înregistrați răspuns: " + response.toString()); hideDialog(); încercați ( JSONObject jObj = nou JSONObject (răspuns); eroare booleană = jObj.getBoolean("eroare"); if (!error) ( // Utilizatorul a fost stocat cu succes în MySQL // Acum stocați utilizatorul în sqlite String uid = jObj.getString ("uid"); utilizator JSONObject = jObj.getJSONObject(" user"); String name = user.getString("name"); String email = user.getString("email"); String created_at = user .getString("created_at"); // Se inserează un rând în tabelul utilizatori db.addUser (name, email, uid, created_at // Lansează activitatea de conectare Intenție = new Intent(RegisterActivity.this, LoginActivity.class); A apărut o eroareîn înregistrare. Obține eroarea // mesajul String errorMsg = jObj.getString("error_msg"); Toast.makeText(getApplicationContext(), errorMsg, Toast.LENGTH_LONG).show(); ) ) catch (JSONException e) ( e.printStackTrace(); ) ) ), nou Response.ErrorListener() ( @Override public void onErrorResponse(VolleyError error) ( Log.e(TAG, "Eroare de înregistrare: " + error.getMessage) ()); Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show(); getParams() ( // Postarea parametrilor pentru a înregistra harta URL params = nou HashMap (); params.put("etichetă", "înregistrare");

params.put("nume", nume);

params.put("e-mail", email); params.put("parolă", parolă); parametrii de returnare; req) ( req.setTag(TAG); getRequestQueue().add(req); ) public void cancelPendingRequests(etichetă obiect) (dacă (mRequestQueue != null) ( mRequestQueue.cancelAll(tag); ) ) )

aceasta este o revistă Android

08-07 14:35:36.552 19120-20088/com.example.panos.chatsmartapp D/Volley﹕ BasicNetwork.logSlowRequests: răspuns HTTP pentru cerere=< http://192.168.1.3/android_login_api/ 0x355f917 NORMAL 1>, , , 08-07 14:35:36.662 19120-19120/com.example.panos.chatsmartapp D/RegisterActivity﹕ Răspuns de înregistrare: ("error":true,"error_msg":"Parametrul obligatoriu "tag" lipsește!" ) 08-07 14:35:36.702 19120-19120/com.example.panos.chatsmartapp D/Toast﹕ checkMirrorLinkEnabled returnează: false 08-07 14:35:36.702 19120-comappos.Toast20.comappos. ﹕ afișarea permisă 08-07 14:35:36.702 19120-19120/com.example.panos.chatsmartapp D/Volley﹕ Request.finish: 4253 ms: http://192.168.1.3/android_login_api5/9070_api551917 :35:36.712 19120-19120/com.example.panos.chatsmartapp E/ViewRootImpl﹕ sendUserActionEvent() mView == null

acesta este codul php

$tag, „eroare” => FALSE);

// verificați tipul de etichetă dacă ($tag == "login") ( // tipul de solicitare este verificați Login $email = $_POST["e-mail"]; $parolă = $_POST["parolă"]; // verificați pentru utilizator $user = $db->getUserByEmailAndPassword($email, $parolă dacă ($user != false) ( // utilizatorul a găsit $răspuns["eroare"] = FALSE; $răspuns["uid"] = $utilizator); ["unique_id"]; $response["user"]["name"] = $user["name"] $response["user"]["email"] = $user["email"]; user"]["created_at"] = $user["created_at"]; $response["user"]["updated_at"] = $user["updated_at"]; echo json_encode($response) else (); // user not found // echo json with error = 1 $response["error"] = TRUE ["error_msg"] = "E-mail sau parolă incorectă!"; == „înregistrați”) ( // Tipul de solicitare este Înregistrare utilizator nou $name = $_POST[„nume”]; $email = $_POST[„e-mail”]; $parolă = $_POST[„parolă”] ; // verificați dacă utilizatorul există deja dacă ($db->isUserExisted($email)) ( // utilizatorul există deja - răspuns de eroare $response["error"] = TRUE;

$response["error_msg"] = "Utilizatorul exista deja";

echo json_encode($răspuns);

Probabil că toată lumea a întâlnit deja avertismentul: „V-au mai rămas trei încercări” care apare atunci când vă conectați cu o parolă. Aceasta este exact munca pe care o face acest plugin.

După instalarea și activarea acestuia, în consolă, în secțiunea de parametri, va apărea o linie cu numele acestui modul.

După ce o urmărim ne vom găsi pe pagina de setări.

Setările de aici sunt simple și în rusă. Imaginea arată setările implicite. Să vedem ce se poate schimba aici.

Primul câmp stabilește numărul de încercări suplimentare. am pastrat 3.

În al doilea, se stabilește durata primei izolări. Cred că 20-30 de minute e bine.

Următorul câmp stabilește numărul de izolații, după care timpul de izolare va fi crescut la 24 de ore sau mai mult, la discreția dvs.

Am lăsat 1 pentru că cine altcineva decât un atacator ar greși de trei ori și apoi, după o jumătate de oră, încă de trei ori. Trebuie să fii un sclerotic complet pentru a face așa ceva fără intenție.

Să lăsăm conexiunea la site ca „Conexiune directă”.

Procesați cookie-urile de conectare. „Da” în această linie este selectat dacă efectuați toate lucrările pe site într-un singur browser. De exemplu, folosesc patru browsere și de aceea am ales „Nu”.

Pentru a raporta izolarea - este mai bine să bifați ambele casete, deși e-mailul nu pare să fie de niciun folos deocamdată, dar nu va strica. Pe viitor, dacă vei continua să fii interesat de programare, aceste adrese pot fi analizate.

Asta este pentru setările pluginului Limitați încercările de conectare terminat. Acum, dacă revii pe aceeași pagină după o zi sau două, vei vedea următoarea imagine în secțiunea de statistici.

Acest lucru va însemna că cineva a încercat din greu să intre în zona dvs. de administrare folosind un script special, dar nu a reușit. Puteți „Șterge jurnalul”.

Pluginuri pentru securitate în acest .


Schimba


Uneori ATTEMPT_.HLP și alte erori erori de sistem HLP poate fi legat de probleme din registrul Windows. Mai multe programe pot folosi fișierul ATTEMPT_.HLP, dar când acele programe sunt dezinstalate sau modificate, uneori, intrările de registry HLP „orfane” (incorecte) rămân în urmă.

Practic, aceasta înseamnă că, deși calea reală a fișierului s-ar putea să se fi schimbat, locația anterioară incorectă a acestuia este încă înregistrată în registry Windows. Când Windows încearcă să caute aceste referințe de fișiere incorecte (locațiile fișierelor pe computerul dvs.), pot apărea erori ATTEMPT_.HLP. În plus, infecția cu malware poate avea intrări de registru corupte asociate cu FreeBSD 2.2.1. Prin urmare, aceste intrări de registry HLP corupte trebuie remediate pentru a remedia problema la rădăcină.

Editarea manuală a registrului Windows pentru a elimina cheile ATTEMPT_.HLP invalide nu este recomandată, decât dacă sunteți un profesionist de servicii PC. Greșelile făcute la editarea registrului pot duce la inoperarea computerului și pot cauza daune ireparabile. sistem de operare. De fapt, chiar și o virgulă plasată în locul greșit poate împiedica pornirea computerului!

Din cauza acestui risc, vă recomandăm cu căldură să utilizați un program de curățare de registru de încredere, cum ar fi WinThruster (dezvoltat de Microsoft Gold Certified Partner) pentru a scana și a repara orice problemă de registru legată de ATTEMPT_.HLP. Utilizând un program de curățare a registrului, puteți automatiza procesul de găsire a intrărilor de registry corupte, referințelor de fișiere lipsă (cum ar fi cea care provoacă eroarea ATTEMPT_.HLP) și link-uri rupte din registru. Înainte de fiecare scanare, a backup, care vă permite să anulați orice modificări cu un singur clic și vă protejează de posibile deteriorari ale computerului. Cea mai bună parte este că eliminarea erorilor de registry poate îmbunătăți dramatic viteza și performanța sistemului.


Avertizare: Daca nu esti utilizator experimentat PC, NU recomandăm editarea manuală a registrului Windows. Utilizare incorectă Editorul de registru poate cauza probleme serioase și poate solicita Reinstalare Windows. Nu garantăm că problemele rezultate din utilizarea incorectă a Editorului de registru pot fi corectate. Utilizați Editorul de registru pe propriul risc.

Înainte de a restaura manual registrul Windows, trebuie să creați o copie de rezervă exportând porțiunea din registry asociată cu ATTEMPT_.HLP (de exemplu, FreeBSD 2.2.1):

  1. Faceți clic pe butonul ÎNCEPE.
  2. introduceți „ comanda„V bara de căutare... NU DA CLICK ÎNCĂ ENTER!
  3. În timp ce țineți apăsate tastele CTRL-Shift pe tastatură, apăsați ENTER.
  4. Va fi afișată o casetă de dialog pentru acces.
  5. Clic Da.
  6. Caseta neagră se deschide cu un cursor care clipește.
  7. introduceți „ regedit" și apăsați ENTER.
  8. În Editorul Registrului, selectați cheia legată de ATTEMPT_.HLP (de exemplu, FreeBSD 2.2.1) pentru care doriți să faceți o copie de rezervă.
  9. Pe meniu Fişier selecta Export.
  10. Pe listă Salvați în selectați folderul în care doriți să salvați copia de rezervă a cheii FreeBSD 2.2.1.
  11. În câmp Nume de fișier Introduceți un nume pentru fișierul de rezervă, de exemplu „FreeBSD 2.2.1 backup”.
  12. Asigurați-vă că câmpul Interval de export valoarea selectată Ramura selectată.
  13. Clic Salva.
  14. Fișierul va fi salvat cu extensia .reg.
  15. Aveți acum o copie de rezervă a intrării dvs. de registru legate de ATTEMPT_.HLP.

Următorii pași când editare manuală erorile de registry nu vor fi descrise în acest articol, deoarece este foarte probabil să vă deterioreze sistemul. Dacă doriți mai multe informații despre editarea manuală a registrului, vă rugăm să consultați linkurile de mai jos.


Într-o zi m-am uitat în jurnal /var/log/messages pe un server care rulează FreeBSD. Jurnalul sa dovedit a fi aproape complet înfundat cu următoarele intrări: kernel: încercare de conectare la UDP 127.0.0.1:10441 de la 127.0.0.1:53 kernel: încercare de conectare la UDP 127.0.0.1:10441 de la 127.0.0.1:: Încercarea de conectare la UDP 127.0 10445 de la 127.0.0.1:53 Kernel: Încercarea de conectare la UDP 127.0.1:10445 DE LA 127.0.1:53 Kernel: Încercarea de conectare la UDP 192.0.32.10 la kernel:10445:10445 1 :10468 de la 127.0.0.1:53 kernel: Încercarea de conectare la UDP 127.0.0.1:10468 de la 127.0.0.1:53 kernel: Încercarea de conectare la UDP 127.0.0.1:10469 de la 127.0.0.1:10468 de la kernel 127.0.0.1: 127.0.0.1:53: încercare de conectare la UDP 127.0.0.1:10469 0.1:10469 din nucleul 127.0.0.1:53: încercare de conectare la UDP 127.0.0.1:10470 de la 127.0.0.1:53

Ce ar însemna asta?

Yandex a subliniat subiectul „Comportamentul de neînțeles al legarii”
La întrebarea mea s-a răspuns deja acolo:
Încercarea de conectare la UDP 127.0.0.1:10445 de la 127.0.0.1:53 Această linie se traduce astfel: De la socketul 127.0.0.1:53 au încercat să trimită o solicitare prin UPD la socketul 127.0.0.1:10445, dar nimeni nu ascultă pe portul 10445 din adresa 127.0.0.1 . Conexiunea a eșuat. Să vedem cine stă pe portul 53? Port privilegiat (<1024) значит там должно быть что-то распространённое. # grep -w 53 /etc/services domain 53/tcp #Domain Name Server domain 53/udp #Domain Name Server А, это же порт DNS сервера. Кто на нём висит на самом деле? # sockstat -l | grep -w 53 USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS bind named 19021 514 udp4 127.0.0.1:53 *:*

Acesta este serverul BIND DNS.

De ce vrea să se conecteze la o priză inexistentă? Răspunsul corect este dat în același subiect: Un anumit program trimite BIND o solicitare pentru a rezolva un nume de domeniu. BIND durează atât de mult să răspundă, încât programul solicitant nu mai așteaptă un răspuns. bind trimite în sfârșit un răspuns, dar nimeni nu îl așteaptă. Nucleul înregistrează o conexiune eșuată.

Ce fel de program face atât de multe interogări DNS lungi?

De ce nu așteaptă un răspuns?

Programul a fost găsit rapid # sockstat | grep -w 53 nimeni spamilter 9801 11 udp4 127.0.0.1:60037 127.0.0.1:53 nimeni spamilter 9801 12 udp4 127.0.0.1:60038 127.0.0.1:53

Serverul de e-mail Sendmail cu filtre anti-spam/antivirus rulează pe o singură mașină cu DNS. spamilter este doar un filtru antispam.

E-mailul (în special cu clopote și fluiere moderne precum DKIM) este strâns legat de DNS.

Prin urmare, nu am fost surprins de o astfel de activitate.

Un exemplu de solicitare DNS lungă a fost găsit rapid în jurnalele sendmail - o încercare de a rezolva o adresă rcom-ne.com

# dig +trace rcom-ne.com ;<<>> DiG<<>> +trace rcom-ne.com ;; opțiuni globale: printcmd . 172099 ÎN NS j.root-servers.net. . 172099 ÎN NS k.root-servers.net. . 172099 ÎN NS l.root-servers.net. . 172099 ÎN NS m.root-servers.net. . 172099 ÎN NS a.root-servers.net. . 172099 ÎN NS b.root-servers.net. . 172099 ÎN NS c.root-servers.net. . 172099 ÎN NS d.root-servers.net. . 172099 ÎN NS e.root-servers.net. . 172099 ÎN NS f.root-servers.net. . 172099 ÎN NS g.root-servers.net. . 172099 ÎN NS h.root-servers.net. . 172099 ÎN NS i.root-servers.net. ;; S-au primit 244 de octeți de la 127.0.0.1#53(127.0.0.1) în 0 ms com. 172800 ÎN NS k.gtld-servers.net. com. 172800 ÎN NS b.gtld-servers.net. com. 172800 ÎN NS a.gtld-servers.net. com. 172800 ÎN NS j.gtld-servers.net. com. 172800 ÎN NS m.gtld-servers.net. com. 172800 ÎN NS c.gtld-servers.net. com. 172800 ÎN NS g.gtld-servers.net. com. 172800 ÎN NS f.gtld-servers.net. com. 172800 ÎN NS i.gtld-servers.net. com. 172800 ÎN NS d.gtld-servers.net. com. 172800 ÎN NS e.gtld-servers.net. com. 172800 ÎN NS l.gtld-servers.net. com. 172800 ÎN NS h.gtld-servers.net. ;; S-au primit 501 octeți de la 192.58.128.30#53(j.root-servers.net) în 52 ms rcom-ne.com. 172800 ÎN NS ns1.rcom-ne.com. rcom-ne.com. 172800 ÎN NS ns2.rcom-ne.com. ;; S-au primit 97 de octeți de la 192.52.178.30#53(k.gtld-servers.net) în 55 ms ;; conexiune a expirat; niciun server nu a putut fi atins Solicitarea eșuează din cauza unui timeout.

La naiba de spammeri, vor scrie adrese, iar tu le verifici.

Aşa. Nu se întâmplă nimic rău. Dar trebuie să ștergeți jurnalul acestor mesaje, altfel ele înfundă informații cu adevărat importante.

Tratarea simptomelor

O modalitate radicală este de a dezactiva complet perforarea conexiunilor nereușite. Prin sysctl:# sysctl -d net.inet.tcp.log_in_vain net.inet.udp.log_in_vain net.inet.tcp.log_in_vain: Înregistrați toate conexiunile TCP de intrare net.inet.udp.log_in_vain: Înregistrați toate pachetele UDP primite # sysctl net.inet. udp.log_in_vain=0 net.inet.udp.log_in_vain: 1 -> 0

Dar aici aruncăm copilul cu apa de baie. Vreau să știu cine intră în porturile mele închise.

Încercarea de a atașa un filtru la syslog este dificilă, crește probabilitatea de defecțiune a sistemului de înregistrare și este pur și simplu urâtă. Poate că puteți dezactiva înregistrarea pentru interfața de loopback, este un interes deosebit?

Nu am găsit asta pe Google, să ne uităm la surse.

# fgrep -rIn „Încercare de conectare la UDP” /usr/src/ /usr/src/sys/netinet/udp_usrreq.c:406: „Încercare de conectare la UDP %s:%d de la %s:%d\n”, /usr/src/sys/netinet6/udp6_usrreq.c:341: „Încercare de conectare la UDP [%s]:%d de la [%s]:%d\n”, # mai puțin +718 /usr/src/sys/ netinet/tcp_input.c comutare (log_in_vain) ( cazul 1: dacă ((thflags & TH_SYN) == 0) break;

/* FALLTHROUGH */ cazul 2: log(LOG_INFO, "Încercare de conectare la TCP %s:%d " "de la %s:%d steaguri:0x%02x\n", dbuf, ntohs(th->th_dport), sbuf , ntohs(th->th_sport), thflags); pauză; implicit: break; )

Se pare că există un singur comutator și pentru toate interfețele simultan -

log_in_vain.

Simptomele nu pot fi eliminate, să tratăm boala.

Rezolvare de învățare

Mesajul apare atunci când programul nu așteaptă un răspuns de la DNS. Este necesar ca fie DNS-ul să răspundă mai repede, fie programul să aștepte mai mult.

Cum pot face un program să aștepte mai mult?

Pentru interogări către dns, sunt folosite funcțiile libc - res_query, res_search, res_mkquery, res_send...

Alte funcții precum gethostbyname sunt de nivel superior și în cele din urmă folosesc aceste „primitive”. Comportamentul funcțiilor res_query este determinat de fișierul /etc/resolv.conf (numele și calea acestui fișier sunt codificate în codul sursă). Avem doi parametri pauză

Comportamentul funcțiilor res_query este determinat de fișierul /etc/resolv.conf (numele și calea acestui fișier sunt codificate în codul sursă).Şi

încercări.- timp de așteptare pentru un răspuns de la serverul DNS.

încercări

- numărul de solicitări repetate către serverul DNS dacă nu s-a răspuns la prima cerere. Imediat după așteptarea primei cereri, se trimite a doua cerere și așa mai departe.

Exemplu rezoluție.conf/* * Definiții globale și variabile pentru stub de rezolvare.

*/ ...... #define RES_TIMEOUT 5 /* min. secunde între încercări */ #define RES_MAXRETRANS 30 /* numai pentru rezolv.conf/RES_OPTIONS */ #define RES_MAXRETRY 5 /* numai pentru resolv.conf/RES_OPTIONS */ #define RES_DFLRETRY 2 /* Implicit #/încercări. */ #define RES_MAXTIME 65535 /* Infinit, în milisecunde. */ .....

În mod implicit, avem o așteptare de 5 secunde și 2 încercări. Acesta este pentru fiecare server la care încercăm să ajungem.

Pentru exemplul de mai sus, timpul maxim de așteptare pentru un răspuns (dacă ambele servere DNS eșuează) este 2 (servere) x 7 (timeout) x (1+1 (încercări)) = 28 de secunde.

Configurația mea a fost mai simplă

# cat /etc/resolv.conf domain myserver nameserver 127.0.0.1 Sa dovedit 1x3x5 = 15. Să verificăm. Cel mai mult simplă utilitate

- gazda folosește setările sale încorporate, așa că haideți să luăm o sapă avansată.<<>> DiG<<># time dig rcom-ne.com ;

> rcom-ne.com ;; opțiuni globale: printcmd ;; conexiune a expirat; niciun server nu a putut fi atins real 0m15.009s utilizator 0m0.000s sys 0m0.006s Să ne verificăm ipoteza despre cauza mesajului din jurnal.

Să alergăm într-o singură consolă<<>> DiG<<># (data;time dig rcom-ne.com;date) & Vineri, 11 februarie 2011 16:46:49 (MSK) ; > rcom-ne.com ;; opțiuni globale: printcmd ;; conexiune a expirat; niciun server nu a putut fi atins real 0m15.009s user 0m0.000s sys 0m0.006s Vineri, 11 februarie 2011 16:47:04 (MSK) Și în altul, în paralel, să vedem ce port este folosit sapa

#sockstat | grep dig root dig 71322 20 udp4 *:52170 *:* # grep 52170 /var/log/messages Mar 4 16:47:20 myserver kernel: încercare de conectare la UDP 127.0.0.1:52170 de la 127:53.0.

dig așteaptă 15 secunde pentru un răspuns, iar răspunsul vine după (16:47:20 - 16:46:49 = 31 ~ 30) 30 de secunde.

Acum să mărim timpul de răspuns la 30 de secunde sau chiar mai mult.

Timpul pentru săpături este timeout de la resolv.conf<<>> DiG<<>#data; time dig +time=12 rcom-ne.com;data Vineri, 4 martie 2011 17:07:46 (MSK) ;<<- opcode: QUERY, status: SERVFAIL, id: 61974 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;rcom-ne.com. IN A ;; Query time: 5998 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Fri Feb 11 17:08:16 2011 ;; MSG SIZE rcvd: 29 real 0m30.006s user 0m0.005s sys 0m0.000s пятница, 11 февраля 2011 г. 17:08:16 (MSK)

> +time=12 rcom-ne.com ;; opțiuni globale: printcmd ;; Am răspuns: ;; ->>HEADER dig a primit răspunsul pentru 30 de secunde

, deși ar fi putut aștepta cât 1x3x12=36. Aparent, 30 de secunde este un timeout pentru BIND în sine.

Să ne amintim asta. stare: SERVFAIL

înseamnă că serverul DNS nu a putut procesa cererea din cauza unor probleme cu serverul DNS (RFC 1035, RFC 2929).

„Ei bine, nu am făcut-o, nu am făcut-o”, ne spune serverul, deși știm că pur și simplu nu a așteptat un răspuns de la serverele dns ale domeniului rcom-ne.com.

Abordare personală

Nu vreau să măresc timpul maxim de solicitare de la 15 la 30 de secunde (de 2 ori) pentru toate programele de pe server.

Poate puteți ajusta timeout-urile de rezoluție pentru programe individuale?

vezi confTO_RESOLVER_RETRANS și confTO_RESOLVER_RETRY.

Dar mai întâi trebuie să configuram spamilter. Dar el nu are astfel de setări. Editarea rezolv.conf părea să nu aibă nici un efect asupra acestuia.

Am încercat să editez codul sursă, dar nu am reușit să obțin niciun rezultat.

Notă: După ce am rezolvat problema, am experimentat cu resolv.conf și tcpdump, am aflat că rezolv.conf a influențat cu siguranță spamilter. Doar că a trimis periodic 2 solicitări în același timp, în loc să le trimită după timeout secunde. Aparent, aceasta este o eroare în arhitectura multi-threaded a spamilter, deși soluția în sine este descrisă în om ca fiind sigură pentru fire.

Pretuit 30 de secunde

A trebuit să mă gândesc cum să repar timpul de răspuns BIND. Am găsit o întrebare similară pe internet, dar fără răspuns.

Frustrat, am căutat prețuitul număr 30 în codul sursă și am avut noroc.

Istoricul modificărilor mi-a spus: /usr/src/contrib/bind9/CHANGES .................... --- 9.2.3rc1 lansat --- .... ................. 1122. Timeout de rezoluție redus de la 90 la 30 de secunde.

.................... --- 9.2.2 lansat --- ................... . .

Descrierea arata ca ceea ce cautam.

Am descărcat ambele versiuni menționate de BIND, am făcut o diferență și m-am uitat la el mult timp până l-am găsit.

-/* $Id: resolver.c,v 1.218.2.12.4.4 2003/02/18 03:32:01 marca Exp $ */ +/* $Id: resolver.c,v 1.218.2.18 2003/07/18 04:35:51 marka Exp $ */ @@ -2234.7 +2229.7 @@ /* * Calculați un timp de expirare pentru întreaga preluare.

*/ - isc_interval_set(&interval, 90, 0); /* XXCRTH constantă */ + isc_interval_set(&interval, 30, 0); /* Constanta XXCRTH */ iresult = isc_time_nowplusinterval(&fctx->expires, &interval);

if (result != ISC_R_SUCCESS) (UNEXPECTED_ERROR(__FILE__, __LINE__,

Am încercat să reduc parametrul funcției isc_interval_set la și urât - răspunsurile de la BIND au început să sosească în maxim 20 de secunde.

# ee /usr/src/contrib/bind9/lib/dns/resolver.c # cd /usr/src/lib/bind # make obj && make depend && make && make install # cd /usr/src/usr.sbin/ numit # make obj && make depend && make && make install # /etc/rc.d/named restart

În cele din urmă, am decis să mă uit la ce solicitări specifice cu care spamilter bombardează DNS-ul și ce fel de adrese durează BIND să rezolve?

Tcpdump -i lo0 -s 0 -w dns.pcap "udp port 53"

Să deschidem dns.pcapîn Wireshark și uitați-vă la cererile nereușite.

S-a dovedit că în presupunerile mele eram foarte departe de adevăr.

90% dintre solicitările fără răspuns au fost către domenii list.dsbl.org multihop.dsbl.org unconfirmed.dsbl.org

Interogare standard A 146.152.225.99.list.dsbl.org

Folosind interogări DNS, spamilter-ul a căutat adresele serverelor de e-mail din bazele de date de spammer. Aceasta este tehnologia DNSBL.

M-am dus pe dsbl.org și am constatat că era defunct de mult timp.

După ce am căutat prin configurații, am găsit aceste adrese în fișierul /var/db/spamilter/db.rdnsbl și le-am comentat.

#relays.ordb.org |http://www.ordb.org |Resping |Rcpt #list.dsbl.org |http://www.dsbl.org |Reject |Rcpt #multihop.dsbl.org |http:/ /www.dsbl.org |Respinge |Rcpt #unconfirmed.dsbl.org |http://www.dsbl.org |Resping |Rcpt

Avalanșa de cereri nereușite a dispărut. Problema a fost rezolvată.

Învață din greșeli

Pe de o parte, am fost serios înșelat când, în loc să investighez amănunțit problema, să mă uit la diferite jurnale, să analizez traficul, am făcut imediat presupuneri și, pe baza lor, am început să caut soluții. Drept urmare, am petrecut mult timp și am făcut multe cercetări inutile. Pe de altă parte, am învățat o mulțime de lucruri interesante despre munca rezolutorului și DNS este primul loc care trebuie verificat atunci când apar diverse întârzieri în funcționarea programelor.

După ce avalanșa de conexiuni DNS incomplete a dispărut, jurnalul a rămas înfundat cu conexiuni la portul 6881.

Kernel: încercare de conectare la UDP 192.0.32.10:6881 de la 188.85.194.61:24333

Baza globală de cunoștințe a sugerat că UDP 6881 este cel mai probabil clienți torrent care încearcă să stabilească o conexiune DHT. O versiune foarte probabilă este că un client torrent rula pe server de mult timp și, deși a fost șters de mult, amintirea acestuia poate să nu piară niciodată în inimile altor camarazi.

Trebuie să captăm pachetele care sosesc pe portul 6881. Folosesc Packet Filter pf(4) ca firewall/NAT. Imediat după regula de blocare implicită, vom adăuga o regulă pentru blocarea și înregistrarea conexiunilor upd de intrare pe portul 6881. Parametru rapid determină oprirea procesării altor reguli dacă pachetul se potrivește cu cel curent.

# ee /etc/pf.conf bloc în jurnal rapid pe em0 proto udp de la oricare la 192.0.32.10 portul 6881 # pfctl -oonvf /etc/pf.conf # pfctl -oovf /etc/pf.conf

În câteva minute vom scrie rezultatele într-un fișier pentru Wireshark.

# tcpdump -i pflog0 -s 0 -w 6881.pcap

Să deschidem fișierul în Wireshark și să aruncăm o privire. Din păcate, DHT nu este încă acceptat de program. Prin urmare, tot ce puteți face este să vă uitați la pachet pentru o semnătură.

d1:ad2:id20:+_,i<\^2e1:q4:ping1:t4:H1:v4:UTb1:y1:qe

Căutarea primilor octeți ai pachetului duce la o discuție despre extensia DHT pentru Bittorrent. Aceasta înseamnă că acestea sunt într-adevăr ecouri ale funcționării pe termen lung a clientului torrent pe server.

Totul este bine. Trebuie doar să ștergeți jurnalul de astfel de intrări.

Pentru a face acest lucru, spuneți lui pf să renunțe la pachetele care sosesc pe portul 6881 adăugând parametrul picătură si inlaturarea jurnal.