Назад | Перейти на главную страницу

Как я могу проверить, находится ли IP-адрес $ remote_addr НЕ в диапазоне CIDR в nginx?

Я использую nginx latest web server. Как я могу проверить, есть ли $remote_addr ip НЕ указан CIDR range и return appropriate error code.

Я хотел бы вернуть конкретные коды ошибок, если IP НЕ входит в определенные диапазоны IP CIDR.

как я могу сделать это для диапазона IP CIDR ? например

Вы можете использовать geo директива для указания диапазонов IP-адресов.

Вот пример:

geo $block_these_turkeys {
    default         0;
    192.0.2.0/24    1;
    198.51.100.0/24 1;
    203.0.113.0/24  1;
    2001:db8::/32   1;
}

Это должно быть в http блок, вне любого server блок.

Он устанавливает переменную $block_these_turkeys к заданному значению в зависимости от того, соответствует ли IP-адрес одному из списков.

Позже в server блок, где вы хотите его использовать, сделайте что-нибудь вроде:

server {
    ....
    if ($block_these_turkeys) {
        return 444;
    }
    ....
}

По реверсирование значение, вы можете позволять Вместо этого диапазоны IP.

geo $block_almost_everybody {
    default         1;
    192.0.2.0/24    0;
    198.51.100.0/24 0;
    203.0.113.0/24  0;
    2001:db8::/32   0;
}

server {
    ....
    if ($block_almost_everybody) {
        return 444;
    }
    ....
}