2015-01-08 33 views
3

我的應用程序記錄了每個登錄用戶的IP地址,但我注意到它記錄了我們的負載平衡器的IP地址,而不是實際的客戶端IP。研究這個問題,我相信這是因爲我們的負載平衡器使用公共可路由的IP地址,而Rails忽略了X-Forwarded-For頭部,假設它被欺騙了。該解決方案似乎是將我們的負載均衡器使用的ip的範圍「白名單」。在Rails 4中,如何配置RemoteIp的可信代理列表?

我的問題是,對於rails 4.1.x,我該怎麼做?這是我現在有config/environments/production.rb

config.action_dispatch.custom_proxies = %r{ 
    ^100\.30 | # production environment load balancers 
    ^200\.40 | # dev environment load balancers 
}x 

我試着像remote_ip.rb的TRUSTED_PROXIES格式化,但也許它應該是一個字符串或數組,或者不同格式的正則表達式?任何有關細節的幫助非常感謝。 Bonv upvote如果你能建議一個集成測試,可以捕獲未來版本的rails中的這個配置。 :-)

UPDATE

我試過多種方式來更新這一點,並使用config.action_dispatch.trusted_proxies略有更大的成功。這使我的負載均衡器不會被記錄,但將所有IP地址記錄爲「127.0.0.1」,無論它們是內部還是外部。在logs/unicorn.log中,IP地址是作爲[外部地址,10 *地址,負載平衡器地址]進入的,所以我知道問題出在機架或導軌層,而不是早期的Apache或nginx。我也嘗試用一個不包含10. *範圍的列表替換TRUSTED_PROXIES常量(因爲內部用戶有這個範圍),但是沒有明顯的效果。

此時,Rails 4.1.x對於真實用戶來自非公共IP地址的應用程序或託管在具有負載平衡器的外部IP地址的網絡環境中的任何應用程序。

回答

1

您可以添加另一個配置選項config.action_dispatch.ip_spoofing_check,因此Rails不會檢查IP欺騙。

該選項在導軌上描述的引導有關configuration並在ActionDispatch::RemoteIp module

+0

我將我的配置從'config.action_dispatch.check_ip_spoofing = false'更正爲'config.action_dispatch.ip_spoofing_check = false',並將我的內部負載均衡器ip包含在'config.action_dispatch.trusted_proxies' opti上,但它仍然不能解決我的問題。只需設置ip_spoofing_check就不會改變任何內容。設置trusted_proxies設置不會改變任何內容。做這些事情加上猴子補丁ActionDispatch :: Request :: trusted_proxy?查看配置的trusted_proxies會導致它將所有請求記錄爲127.0.0.1。 – sockmonk

+0

我使用Rails 3.2.17(Apache + Passenger)在代理(Apache)後面配置了測試應用程序,並且所有工作都是開箱即用的,無需向action_dispatch添加任何配置 – fjuan

+0

找到了一篇關於x-forwarded-for標題:http://blog.gingerlime.com/2012/rails-ip-spoofing-vulnerabilities-and-protection/ – fjuan