Linux и Windows: помощь админам и пользователям

Администрируем и настраиваем Windows, Linux.



Блокировка IP адресов и подсететей в Nginx

Рубрика: Apache -> Разное
Метки: |
Понедельник, 18 января 2010 г.
Просмотров: 30595
Подписаться на комментарии по RSS

В данной статье мы рассмотрим как можно методами nginx заблокировать доступ с определенных IP адресов или подсетей.

В Nginx встроен простой модуль ngx_http_access_module, с помощью которого можно разрешать или запрещать доступ с IP адресов. Его синтаксис следующий:

deny IP;  
deny subnet;  
allow IP;  
allow subnet;  
# block all ips  
deny    all;  
# allow all ips  
allow    all;

Обратите внимание, правила проверяются до первого совпадения.

Как настроить Nginx на блокировку IP?

Отредактируем файл конфигурации nginx.conf (обратите внимание что у меня путь к nginx - /usr/local/nginx/, замените если у вас он отличается):

# cd /usr/local/nginx/conf/
# vi nginx.conf

Добавьте следующую строку в секцию http:

## Block spammers and other unwanted visitors  ##   
include blockips.conf;

Сохраните и закройте файл. После этого создайте файл blockips.conf в директории /usr/local/nginx/conf/:

# vi blockips.conf

Добавьте следующие записи:

deny 1.2.3.4;  
deny 91.212.45.0/24;  
deny 91.212.65.0/24;   

Сохраните и закройте файл. Протестируйте конфигурации, введя:

# /usr/local/nginx/sbin/nginx -t

Получите примерно такое сообщение, которое говорит нам что все в порядке:

the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok  
configuration file /usr/local/nginx/conf/nginx.conf test is successful

Примените новый конфиг:

# /usr/local/nginx/sbin/nginx -s reload

Как я могу запретить все адреса, кроме локальных?

Отредактируйте конфиг следующим образом:

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;  }

В результате мы дадим доступ всей подсети 192.168.1.0/24 кроме одного IP 192.168.1.1.

Как модифицировать сообщение об ошибке HTTP 403?

Создайте файл error403.html в корне nginx:

# cd /usr/local/nginx/html
   # vi error403.html
<html>  <head><title>Error 403 - IP Address Blocked</title></head>  
<body>  
Your IP Address is blocked. If you this an error, please contact webmaster with your IP at webmaster@example.com  
</body>  
</html>   

Если включен SSI, вы можете легко отобразить IP заблокированного клиента на данной странице, изменив строку таким образом:

Your IP Address is <!--#echo var="REMOTE_ADDR" --> blocked.

Сохраните и закройте файл. Отредактируйте nginx.conf:

# vi nginx.conf
# redirect server error pages to the static page   
error_page   403  /error403.html;   
location = /error403.html {           
		root   html;   
}

Сохраните и закройте файл, перезагрузите nginx:

# /usr/local/nginx/sbin/nginx -s reload

 

 

Полезные ссылки:

Принесите радость детям, дарите им куклы Винкс. Очень большой выбор кукол и аксессуаров.

twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru rutvit.ru myspace.com technorati.com digg.com friendfeed.com pikabu.ru blogger.com liveinternet.ru livejournal.ru memori.ru google.com bobrdobr.ru mister-wong.ru yahoo.com yandex.ru del.icio.us

Оставьте комментарий!

Используйте нормальные имена.

Имя и сайт используются только при регистрации

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email. При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д., а также подписку на новые комментарии.

(обязательно)