2013-05-03 4 views
5

У меня есть приложение rails на heroku, и есть около 10 запросов в секунду, что странно, потому что сейчас никто не использует приложение. Все запросы предназначены для URI, которые явно пытаются использовать уязвимости безопасности, например.Block IP's В приложении rails на heroku

http://myapp.com/etc/passwd 

и все такое.

Как я могу заблокировать этого человека от доступа к моему приложению? Есть ли быстрое решение для этого?

ответ

7

Возможно, rack-attack сделает все, что вы пожелаете?

# Block requests from 1.2.3.4 
Rack::Attack.blacklist('block 1.2.3.4') do |req| 
    # Request are blocked if the return value is truthy 
    '1.2.3.4' == req.ip 
end 
+1

Есть ли способ, который я мог бы настроить для динамической работы из таблицы базы данных? Как я могу сделать своего рода пользовательский черный список, используя это? – OneChillDude

+0

возможно, но вам нужно было бы спроектировать, что это похоже. Возможно, вы захотите посмотреть другие опции Rails, если сможете найти их. – catsby

+1

Существует встроенная поддержка Redis, требования к документации. – RandallB

2

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

От этого Github Issue. Возможно, вы можете использовать присутствие/существование IP-адреса в вашем хранилище кеша, чтобы определить, следует ли его блокировать (вместо того, чтобы вручную добавлять IP-адрес и повторно развертывать приложение).

Rack::Attack.blacklist('block <ip>') do |req| 
    # if variable `block <ip>` exists in cache store, then we'll block the request 
    Rails.cache.fetch("block #{req.ip}").present? 
end 

Из приложения или с консоли вы можете записать в свой кэш-хранилище.

Rails.cache.write('block 1.2.3.4', true, expires_in: 5.days) 
Смежные вопросы