До этого я был в похожей ситуации, когда мне нужно было блокировать людей по поведению, а не по другим произвольным правилам, которые брандмауэр мог бы самостоятельно выбирать.
Они решили, как я обошел проблему - заставить мою логику (Rails в вашем случае) делать блокировку ... Но долгий путь:
- Пусть ваша логика поддерживает черный список в виде открытого текста, разделенного новой строкой.
- Создайте bash (или другой) скрипт в качестве пользователя root для чтения этого файла и добавьте его списки в черный список вашего брандмауэра
- Создайте задание cron, чтобы снова вызвать скрипт как root
Причина, по которой я так поступаю (а не просто предоставляю Django разрешения на изменение конфигурации брандмауэра), заключается просто в: безопасности. Если бы мое приложение было взломано, я бы не хотел, чтобы оно повредило что-либо еще.
Сценарий bash выглядит примерно так:
exec < /path/to/my/djago-maintained/block-list
while read line
do
iptables -A INPUT --source $line/32 -j DROP
done