Isso é fácil. O módulo "geo" do Nginx permite definir uma variável com valor dependendo do endereço IP do cliente:
geo $ban_ip {
default 0;
10.1.0.0/24 1;
};
A diretiva geo
deve estar em http
level (por exemplo, fora de server
). Existe uma maneira conveniente de incluir grandes bancos de dados de IP via include
ou ranges
, consulte a documentação
Portanto, supondo que você tenha essa variável, você pode retornar os códigos de status desejados, por exemplo, 403 ou 404 (em server
level ou em location
):
if ($ban_ip) {
return 403;
}
Se você quiser abandonar a conexão silenciosamente, use
if ($ban_ip) {
return 444;
}
444
é um código de status não padrão usado internamente para instruir o Nginx a descartar a conexão. (assim, um cliente não o vê)