Данный сценарий применим не только в целях блокировок, но и в других сценариях, т.к. по сути по итогу лист будет находиться замэпленым в переменной и дальше можно применять в логике настройки согласно своим хотелкам.
Также чуть переделав данный сценарий - можно генерировать подобные листы для фаерволов и других систем, где это может понадобиться.
Итак, допустим нам прилетела задача по блокировке входящих соединений скажем нууу... С microsoft'а... Мы знаем AS мелгомякгой компании - это AS8075.
Я набросал вот таков вот простенький скриптик на баше, который будет генерировать geo лист для nginx:
#!/bin/bash
echo 'geo $remote_addr $ipblocked {'
echo ' default 0;'
whois -h whois.radb.net -- "-i origin $1" | grep 'route:\|route6:' | awk '{print $2 " 1;"}'
echo '}'
Вызовем его так:
./t.sh AS8075 > msblocklist.conf
Получим файл с примерно таким содержимым:
geo $remote_addr $microsoft {
default 0;
1.186.0.0/16 1;
2.58.103.0/24 1;
...
}
Не забудем подключить данный файл в nginx добавив строку вида:
include /etc/nginx/blacklists/microsoft.conf;
Ну и теперь, где оно необходимо будем использовать данный список согласно нашим хотелкам примерно так:
if ($microsoft) {
return 403;
}
Данный лист генерируется с учётом как ipv4, так и с учётом ipv6 адресов. Если необходимо оставить только ipv4, то достаточно
grep 'route:\|route6:'
исправить на
grep 'route:'