Фильтрация IP-адресов - PullRequest
       1

Фильтрация IP-адресов

8 голосов
/ 22 сентября 2010

Я смотрю на реализацию фильтрации IP-адресов для моего приложения Rails SaaS.Короче говоря, я хочу, чтобы администраторы могли указывать один или несколько IP-адресов (или диапазон IP-адресов), и тогда мое приложение будет принимать запросы только на свои экземпляры с указанных адресов.

Я смотрю наиспользование IPAddress (http://github.com/bluemonk/ipaddress) для разбора / проверки каждого адреса / диапазона адресов. Это хорошо подходит или есть лучшие / более подходящие библиотеки?

Кто-нибудь реализовал такой вид фильтрации, ктомог бы описать подход, который сработал для них, или есть какие-то ошибки, о которых мне нужно беспокоиться?

В качестве альтернативы, существует ли существующая библиотека Ruby, которая обрабатывает все это автоматически, что ускользнуло от моего поиска в Google?

Большое спасибо, Эш

Ответы [ 3 ]

6 голосов
/ 22 сентября 2010

ipaddress - потрясающая библиотека (я знаю автора), но она вам, вероятно, не понадобится, если вы не планируете выполнять некоторые сложные манипуляции с IP-адресами.

На самом деле, самый простой способ -

  1. хранить массив IP-адресов для фильтрации где-то. Вы можете использовать строковое представление (192.168.1.1) или длинное представление int. В строковой версии вы можете даже использовать подстановочные знаки (192.168.1. *)

  2. затем настройте before_filter в контроллере, который загрузит список запрещенных IP-адресов и выполнит простое сопоставление строк, чтобы проверить, соответствует ли текущий request.ip_address (request.remote_ip в рельсах 3) запрещенному IP-адресу. Если true, перенаправить на страницу ошибки.

Как видите, вам даже не нужно преобразовывать IP-адреса в объекты IP, если только вам не нужно выполнять другие виды манипуляций.

4 голосов
/ 24 апреля 2014

Немного опоздал на вечеринку, но так как я искал что-то похожее и наткнулся на этот прекрасный камень Ruby, я добавлю его сюда, чтобы внести свой вклад в тему. Мне нравится решение @ simone, но если вам нужен больший контроль, то Rack::Attack может быть хорошим выбором.

https://github.com/kickstarter/rack-attack

Rack :: Атака !!!

DSL для блокировки и регулирования злоупотреблений клиентов

3 голосов
/ 22 сентября 2010

Я думаю, вы можете достичь того, чего хотите, используя встроенные в Rails 3 функции маршрутизации.Грегг Поллак представляет Rails 3 Action Dispatch и упоминает (из скринкаста) опцию :constraints => {:ip => /192\.168\.1\.\d{1,3}}/}, где вы можете указать регулярное выражение, соответствующее диапазону IP-адресов, который вы хотите разрешить.

Еще немного расширяется, взглянув на Расширенные ограничения и их пример, демонстрирующий извлечение списка занесенных в черный список IP-адресов из базы данных и проверку, находится ли request.remote_ip в списке занесенных в черный список.IP-адрес.Похоже, вы хотите получить список принятых (он же белый список IP-адресов), но код будет почти идентичен примеру в руководствах по Rails.

Поэтому я бы построил ваше представление администратора, чтобы иметь возможность вводить утвержденные IP-адреса,тогда приложение маршрутизации может получить этот список для входящих запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...