Ako zablokovať IP adresy v Nginx/Prihlasovacej stránke WordPress
Toto je krok za krokom sprievodca pre začiatočníkov, ktorý ukazuje, ako nakonfigurovať Nginx, aby zablokoval určité IP adresy alebo rozsah IP adries od prístupu na vašu webovú stránku a zablokoval všetky ostatné, pričom len vy (a určené IP adresy) môžete pristupovať na prihlasovacie stránky WordPress.
Tento web bol pred pár dňami pod útokom. Niekto posielal desiatky tisíc nepretržitých požiadaviek, ktoré spomaľovali reakciu servera. A tu je to, čo som urobil, aby som manuálne zablokoval IP adresy útočníka a obmedzil prístup na prihlasovaciu stránku.
POZNÁMKA: Pri veľkých útokoch DDoS sa odporúča používať nástroje/služby tretích strán, napr. fail2ban alebo CloudFlare, na zmiernenie prostredníctvom automatického zakázania IP adries.
Krok 1: Zistite IP adresy útočníka
1. Najprv sa pripojte na svoj Linux server a spustite príkaz na úpravu konfiguračného súboru Nginx:
sudo nano /etc/nginx/nginx.conf
Potom sa uistite, že obsahuje riadok access_log /var/log/nginx/access.log; pre prístupový log.
2. Ak nebol povolený prístupový protokol, musíte túto linku pridať ručne a uložiť súbor (stlačte Ctrl+S potom Ctrl+X).
A vykonajte zmenu kontrolou konfigurácie a reštartovaním služby:
sudo nginx -tsudo systemctl restart nginx.service3. Bez prehliadania protokolu a manuálneho počítania prístupov IP môžete spustiť nasledujúci príkaz na serveri:
sudo awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr |moreTento príkaz vyhľadá súbor protokolu (/var/log/nginx/access.log) a vytlačí najlepšie IP adresy a spočíta, koľko žiadostí poslali.
POZNÁMKA: Ak používate CloudFlare CDN pre svoju webovú stránku, Nginx predvolene nezobrazuje skutočné IP adresy návštevníkov.
V prípade, že potrebujete vytvoriť konfiguračný súbor pre Nginx, spustite príkaz nižšie na serveri:
sudo nano /etc/nginx/conf.d/nginx-cloudflare-realip.confPotom pridajte nasledujúce riadky, aby ste zobrazili skutočné IP adresy pre návštevy z CloudFlare:
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 104.16.0.0/13;
set_real_ip_from 104.24.0.0/14;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 172.70.0.0/16;
set_real_ip_from 131.0.72.0/22;
set_real_ip_from 2400:cb00::/32;
set_real_ip_from 2606:4700::/32;
set_real_ip_from 2803:f800::/32;
set_real_ip_from 2405:b500::/32;
set_real_ip_from 2405:8100::/32;
set_real_ip_from 2a06:98c0::/29;
set_real_ip_from 2c0f:f248::/32;
#real_ip_header CF-Connecting-IP;
real_ip_header X-Forwarded-For;Potom stlačte Ctrl+S na uloženie súboru a Ctrl+X na ukončenie. Nakoniec spustite 2 príkazy uvedené vyššie na kontrolu konfigurácie a reštartovanie služby.
POZNÁMKA 1: Cloudflare môže v budúcnosti pridávať/odstraňovať IP adresy! Pozrite sa na túto stránku pre najnovšie informácie.
POZNÁMKA 2: Táto konfigurácia vyžaduje modul ngx_http_realip_module, ktorý je predvolene povolený v Ubuntu a Debiane.
Krok 2: Zablokujte IP adresy alebo rozsah IP v Nginx
Keď zistíte IP adresy útočníka, spustite príkaz nižšie na vytvorenie konfiguračného súboru:
sudo nano /etc/nginx/conf.d/block.confPotom pridajte podobné riadky nižšie, aby ste zablokovali určité IP adresy a IP rozsahy (vypnite IP adresy nižšie s tými, ktoré ste dostali v poslednom kroku) pre všetky webové servery NGINX na tomto hostiteľovi:
deny 206.189.129.37;
deny 143.110.180.216;
deny 167.172.87.180;
deny 167.99.77.92;
deny 152.42.178.38;
deny 2600:3c03::f03c:91ff:fe69:a353;
deny 139.59.108.0/24;
deny 128.199.0.0/16;Tu deny 139.59.108.0/24; znamená zablokovať rozsah IP od ‘139.59.108.0’ do ‘139.59.108.255’. A 128.199.0.0/16; znamená rozsah IP od ‘128.199.0.0’ do ‘128.199.255.255’. Môžete ich nahradiť podľa svojho požadovaného rozsahu IP.
Na výber môžete namiesto toho použiť nižšie uvedené pravidlá, aby ste umožnili iba IP 1.2.3.4 a 2.3.4.5 (nahradte podľa potreby), ale blokovali všetky ostatné.
allow 1.2.3.4;
allow 2.3.4.5;
deny all;Keď dokončíte úpravu súboru, stlačte Ctrl+S na uloženie a Ctrl+X na ukončenie. Nakoniec skontrolujte konfiguráciu a reštartujte službu, aby sa zmeny uplatnili:
sudo nginx -tsudo systemctl restart nginx.serviceKrok 3: Obmedziť prístup na prihlasovaciu stránku WordPressu (wp-admin, wp-login.php)
Pre webovú stránku vo WordPress je dobré zablokovať všetkých ostatných od návštevy stránky wp-admin/wp-login.php, pričom prístup budú mať len vy a používatelia zo špecifikovaných IP adries.
1. Najprv sa pripojte k serveru Linux a spustite príkaz na úpravu konfiguračného súboru Nginx pre vašu webovú stránku:
sudo nano /etc/nginx/sites-available/wordpress
V príkaze je potrebné nahradiť názov súboru wordpress svojím názvom. Použite ls /etc/nginx/sites-available na zobrazenie všetkých súborov v tomto adresári.
2. Keď sa súbory otvoria, posuňte sa nadol a pridajte „location=/wp-login.php{}“ blok so podobnými pravidlami nižšie:
location = /wp-login.php {
allow 1.2.3.4;
allow 2.3.4.5;
deny all;
}Tu nahraďte 1.2.3.4 a 2.3.4.5 IP adresami, ktoré chcete povoliť na prístup na prihlasovaciu stránku. A môžete pridať ďalšie alebo odstrániť allow riadky na pridanie/odstránenie IP adries.
POZNÁMKA: Oba „location=/wp-login.php {}“ a „location ~ /.php${}“ (znamená akýkoľvek končiaci na '.php') blokujú zodpovedajúcu URL adresu prihlasovacej stránky WordPressu (wp-login.php), ale prvý má vyššiu prioritu.
Čo znamená, že pri návšteve stránky wp-login.php budú pravidlá pod location ~ /.php$ ignorované! V takom prípade sa môže pokúsiť stiahnuť súbor namiesto zobrazenia webovej stránky.
Aby ste to obchádzali, musíte tiež pridať pravidlá pod „location ~ /.php$ {}“, takže to bude vyzerať takto:
location = /wp-login.php {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.4-fpm.sock;
allow 1.2.3.4;
allow 2.3.4.5;
deny all;
}POZNÁMKA: musíte nahradiť include snippets/fastcgi-php.conf; a fastcgi_pass unix:/run/php/php8.4-fpm.sock; podľa pravidiel v bloku “location ~\.php$ {}”.
Keď skončíte. Uložte súbor (stlačte Ctrl+S, potom Ctrl+X), skontrolujte konfiguráciu a reštartujte službu, aby sa zmeny uplatnili.
sudo nginx -tsudo systemctl restart nginx.serviceTipy: Po vykonaní zmien v location blokoch možno budete musieť vymazať cache prehliadača a potom overiť, či to funguje.
Viac o Nginx blokoch umiestnenia
Konfigurácia Nginx má rôzne typy blokov umiestnenia. Tieto zahŕňajú:
location /abc– prefixový zápas, example.com/abc, example.com/abcde, example.com/abc/123, example.com/abc?123.location=/abc, presná zhoda, example.com/abc, example.com/abc?123, ale NIE pre example.com/abcde, example.com/abc/.location ~ ^/abc$, regulárny výraz zodpovedá example.com/abc, example.com/abc?123, ale NIE pre example.com/abcde, example.com/abc/.location ~* ^/abc$je podobnélocation ~ ^/abc$, ale rozlišuje veľké a malé písmen. Tiež zodpovedá example.com/ABC.location ^~ /abc, podobne akolocation /abc, ale s vyššou prioritou a bez regulárneho výrazu.
Priorita od najvyššej po najnižšiu: location = > location ^~ > location ~=location ~* > location /.




