Защита для NGINX: Как заблокировать, SQL Injections, File Injections, Spam, User Agents, Etc.

Измените свой Nginx Vhosts

Настройки, которые мы используем здесь, должен быть вставлены в каждый nginx vhost (в server {} контейнер), где Вы хотите использовать его. К сожалению, его нельзя использоваться в глобальном конфиге nginx, потому что директива набора не позволена в http {} контейнер.
server {
[...]

    ## Block SQL injections
    set $block_sql_injections 0;
    if ($query_string ~ "union.*select.*\(") {
        set $block_sql_injections 1;
    }
    if ($query_string ~ "union.*all.*select.*") {
        set $block_sql_injections 1;
    }
    if ($query_string ~ "concat.*\(") {
        set $block_sql_injections 1;
    }
    if ($block_sql_injections = 1) {
        return 403;
    }

    ## Block file injections
    set $block_file_injections 0;
    if ($query_string ~ "[a-zA-Z0-9_]=http://") {
        set $block_file_injections 1;
    }
    if ($query_string ~ "[a-zA-Z0-9_]=(\.\.//?)+") {
        set $block_file_injections 1;
    }
    if ($query_string ~ "[a-zA-Z0-9_]=/([a-z0-9_.]//?)+") {
        set $block_file_injections 1;
    }
    if ($block_file_injections = 1) {
        return 403;
    }

    ## Block common exploits
    set $block_common_exploits 0;
    if ($query_string ~ "(<|%3C).*script.*(>|%3E)") {
        set $block_common_exploits 1;
    }
    if ($query_string ~ "GLOBALS(=|\[|\%[0-9A-Z]{0,2})") {
        set $block_common_exploits 1;
    }
    if ($query_string ~ "_REQUEST(=|\[|\%[0-9A-Z]{0,2})") {
        set $block_common_exploits 1;
    }
    if ($query_string ~ "proc/self/environ") {
        set $block_common_exploits 1;
    }
    if ($query_string ~ "mosConfig_[a-zA-Z_]{1,21}(=|\%3D)") {
        set $block_common_exploits 1;
    }
    if ($query_string ~ "base64_(en|de)code\(.*\)") {
        set $block_common_exploits 1;
    }
    if ($block_common_exploits = 1) {
        return 403;
    }

    ## Block spam
    set $block_spam 0;
    if ($query_string ~ "\b(ultram|unicauca|valium|viagra|vicodin|xanax|ypxaieo)\b") {
        set $block_spam 1;
    }
    if ($query_string ~ "\b(erections|hoodia|huronriveracres|impotence|levitra|libido)\b") {
        set $block_spam 1;
    }
    if ($query_string ~ "\b(ambien|blue\spill|cialis|cocaine|ejaculation|erectile)\b") {
        set $block_spam 1;
    }
    if ($query_string ~ "\b(lipitor|phentermin|pro[sz]ac|sandyauer|tramadol|troyhamby)\b") {
        set $block_spam 1;
    }
    if ($block_spam = 1) {
        return 403;
    }

    ## Block user agents
    set $block_user_agents 0;

    # Don't disable wget if you need it to run cron jobs!
    #if ($http_user_agent ~ "Wget") {
    #    set $block_user_agents 1;
    #}

    # Disable Akeeba Remote Control 2.5 and earlier
    if ($http_user_agent ~ "Indy Library") {
        set $block_user_agents 1;
    }

    # Common bandwidth hoggers and hacking tools.
    if ($http_user_agent ~ "libwww-perl") {
        set $block_user_agents 1;
    }
    if ($http_user_agent ~ "GetRight") {
        set $block_user_agents 1;
    }
    if ($http_user_agent ~ "GetWeb!") {
        set $block_user_agents 1;
    }
    if ($http_user_agent ~ "Go!Zilla") {
        set $block_user_agents 1;
    }
    if ($http_user_agent ~ "Download Demon") {
        set $block_user_agents 1;
    }
    if ($http_user_agent ~ "Go-Ahead-Got-It") {
        set $block_user_agents 1;
    }
    if ($http_user_agent ~ "TurnitinBot") {
        set $block_user_agents 1;
    }
    if ($http_user_agent ~ "GrabNet") {
        set $block_user_agents 1;
    }

    if ($block_user_agents = 1) {
        return 403;
    }
[...]
}


Каждый раз, когда одно из правил соответствует запросу, 403 Запрещенных ошибки возвращены клиенту. Я прокомментировал правило wget здесь, потому что это также заблокировало бы рабочие места крона, которые используют wget, который довольно распространен среди современных заявлений CMS. Если Ваше заявление не использует wget, Вы можете не прокомментировать то правило также.

Не забудьте перезагрузить nginx:

service nginx reload

Источник: http://nginx.org/ (284 перехода)

Файлы статьи:

Похожие статьи

  • Lapis: сайт на Lua в конфигах Nginx
    Документ без названия
    Вступление


    image
    Lua — мощный и быстрый скриптовый язык, который очень легко встраивается в C. Разработан в PUC-Rio (Бразилия).

    LuaJIT
    LuaJIT — это самая быстрая реализация Lua (JIT-компилятор), настоящее произведение искусства. По некоторым оценкам, имеет шестикратное преимущество перед стандартным интерпретатором Lua и во многих тестах побивает V8. Разработчик Mike Pall (Германия).
  • Коллекция конфигураций Nginx для самых популярных CMS
    Список CMS конфигураций для nginx:

    Asgard CMS
    Bolt CMS
    CMS Made Simple
    Codeigniter
    Concerte5
    CraftCMS 2
    Data Life Engine
    Drupal 7, 8
    FuelPHP
    HostCMS
    ImpressPages
    InstantCMS
    Invision Power Board 3
    Joomla 2, 3
    KodiCMS
    Kohana
    Laravel
    LiveStreet
    MaxSite CMS
    MediaWiki
    MODx Revolution
    Octobercms
    OpenCart 1.5
    OsTicket
    Phalcon
    phpBB3
    ProcessWire 2
    Symfony
    UMI.CMS
    WebAsyst
    Wordpress 4
    Wordpress 4 + SuperCache
    Yii Advanced
    Yii Basic
    ZenCart 1.5
    Zend Framework
    1C Bitrix


  • Настройка сети в Debian 8
    Настройка сети в дистрибутиве Debian вещь довольно простая, для этого есть файл interfaces в котором содержаться все необходимые для этого настройки. Итак, открываем сам файл(не забудьте сделать это под root или sudo, иначе не будет прав на запись, я использую редактор “nano” ([root@vpsserver ~]#nano /etc/network/interfaces ), хоть и говорят, что он не тру для админов, но мне он нравиться):
0 комментариев
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.