IP cím és hálózati subnet engedélyezés és tiltás NGINX alatt

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.

Leave a Reply