С помощью Nginx вы можете легко разрешать или запрещать определенным ip-адресам доступ к определенным разделам сайта. Это удобный механизм, который позволяет реализовать ограничение трафика без необходимости задействовать файрвол операционной системы.
Данный механизм нельзя рассматривать как безопасный в сетях, где возможна подмена ip. Кроме того, обычно для защиты трафика и ограничения доступа этот метод должен комбинироваться с дополнительными механизмами, такими как базовая аутентификация HTTP и использование безопасного протокола HTTPS.
Если вы интересуетесь защитой блога WordPress, читайте отдельную статью о том, как это сделать.
Рассмотрим настройку механизма черных и белых списков с помощью Nginx. Для реализации существует две команды — allow и deny. Команды могут применяться в контексте конфигурационных секций http, server, location, limit_except. Чаще всего, команды применяются в разделе server и location.
Черный список
При реализации черного списка структура списка выглядит как:
deny 1.2.3.4; deny 5.6.7.0/24; ... allow all;
что позволяет указывать запрещаемые элементы вверху списка, в конце же списка присутствует элемент allow all, который разрешает все прочие адреса.
Обратите внимание, что вы можете использовать
- индивидуальный ip4 (1.2.3.4) ;
- сеть ip4 (5.6.7.0/24);
- индивидуальный ip6 (2001:67c:20dc:1c00:1c00:a9ff:fe00:2e0);
- сеть ip6 (2001:0db8::/32).
Белый список
Белый список формируется иным образом:
allow 1.2.3.4; allow 5.6.7.0/24; ... deny all;
Большой список
Если у вас используются большие списки, то их удобнее реализовывать в отдельном файле с включением по требуемому месту. Например, в случае с черным списком настройка будет выглядеть следующим образом:
location / { include /etc/nginx/blacklist.conf; allow all; }
Применение изменений
Для применения изменений необходимо выполнить следующие действия:
# проверим корректность конфигурации после изменений $ sudo nginx -t # перезапускаем nginx (Ubuntu) $ sudo service nginx restart # перезапускаем nginx (CentOS) $ sudo systemctl restart nginx
Большой список ip-адресов
В том случае, если список ip-адресов включает в себя сотни или тысячи адресов, лучше воспользоваться:
- расширением функциональность Nginx скриптом на Lua, который взаимодействует с базой ip-адресов, хранимой в Redis (Ubuntu, Debian, CentOS 7);
- расширением ipset для iptables, а не инструментами Nginx.