IP cím és hálózati subnet engedélyezés és tiltás NGINX alatt
Hogyan blokkoljunk Nginx webszerver esetén IP címet, vagy egy hálózati subnetet?
Egyre gyakoribb igény, hogy bizonyos IP címeket, hálózati tartományokat tiltsunk a webszerveren, mert a támadásokat és a spam áradatot így szeretnénk megfékezni. Nginx is is adott a lehetőség, hogy IP címekre, IP cím tartományokra szűkítsük az elérést.
Nginx ngx_http_access_module hozzáférési modul
Az Nginx ngx_http_access_module nevű modul használatával tudjuk szűrni a látogatók IP címét, tartományát, engedélyezni, a hozzáférést korlátozni. A hozzáférési szabályozás a már közismert és elfogadott DENY illetve ALLOW formában tehető. Itt egy példa a hozzáférés korlátozásra:
deny IP; deny subnet; allow IP; allow subnet; # block all ips deny all; # allow all ips allow all;
A hozzáférési szabályok közül az első illeszkedés lesz az érvényes.
Hogyan állítsunk be az nginx IP cím korlátozását?
Az nginx.conf fájlban (például: /etc/nginx/nginx.conf helyen) a http részben ellenőrizzük, hogy be van-e állítva külső konfigurációs fájl betöltése a conf.d könytárból:
include /etc/nginx/conf.d/*.conf;
Amennyiben ez be van állítva, az /etc/nginx/conf.d/ könyvtárból az összes .conf végződésű fájlt beolvassa az nginx.
Az IP cím és IP hálózat engedélyezés és tiltás beállítása
Készítsünk egy /etc/nginx/conf.d/block-spam-ipadds.conf nevű fájlt, példaként az alábbi tartalommal:
deny 1.2.3.4; deny 91.212.45.0/24; deny 91.212.65.0/24;
A megengedő szabályrendszerből indulunk ki, tehát minden IP cím és IP cím tartomány engedélyezett és ez alól kivételt képez a felsorolt 1 IP cím és a két IP cím tartomány. Teszteljük az nginx konfiguráció helyességét:
# /usr/sbin/nginx -t
Egy hasonló kimenetet kapunk, ha rendben van:
2015/02/18 13:11:58 [info] 14451#0: the configuration file /etc/nginx/nginx.conf syntax is ok
2015/02/18 13:11:58 [info] 14451#0: the configuration file /etc/nginx/nginx.conf was tested successfully
Majd újra olvassuk a konfigot, ezzel a futó nginx-nek is átadjuk:
# /usr/sbin/nginx -s reload
Hogyan tudok minden hozzáférést tiltani és csak egy hálózati szegmenst engedélyezni?
Amennyiben a hálózat csak egy bizonyos részéből engedélyezzük az nginx hozzáférését, akkor célszerű a tiltó szabályrendszer alapján eljárni. Egy példa, hogy tudunk csak egy hálózati tartományt engedélyezni:
location / { # block one workstation deny 192.168.1.1; # allow anyone in 192.168.1.0/24 allow 192.168.1.0/24; # drop rest of the world deny all; }
Mivel tudjuk, hogy az nginx hozzáférési szabályozása úgy működik, hogy az első egyesét veszi a szabályok közül, ezért a “deny all;”-t mindenképp csak a konfiguráció végén használjuk.
A példánkban tiltjuk a 192.168.1.1 IP címet, engedélyezzük ezen kívül a 192.168.1.0/24 IP cím tartományt, majd ezen kívül mindenki mást kizárunk.
No Comments.