2012-08-27 2 views
21

Heroku에서 특정 IP를 제한하거나 차단하기 위해 nginx/apache를 사용하는 것과 마찬가지로 IP 필터링 또는 IP 액세스 규칙을 구현하는 방법이 있습니까?어떻게 Heroku에서 IP 주소를 차단하거나 필터링 할 수 있습니까?

참고 : 난이 아주 쉽게 내 응용 프로그램 (레일 3.2) 내에서 수행 할 수 있지만, 나는이 Heroku가 내 자원을 가장 효율적으로 사용할 생각하지 않는다 알고있다. 또한 Rack 기반 솔루션은 Rails에서 필터링을 구현하는 것보다 낫습니다.

답변

7

랙 미들웨어로 'rack-block'을 추가했습니다. 마법처럼

YourApp::Application.configure do 

    config.middleware.insert_before(Rack::Lock, Rack::Block) do 
    # Add your rules with the rack-block syntax in here 
    end 

end 

작품 : 설정/초기화에 새 파일을 추가합니다.

+2

감사합니다. 이것은 정확히 내가 찾고 있었던 것입니다. 나는 지금 나의 인터넷 검색 기술에 약간 관심이있다. –

+2

요청이 dyno를 치기 전에 센터 주소를 차단하는 방법이 있습니까? –

+0

허용하려는 하나의 IP를 제외한 모든 IP 주소를 차단하려면 어떻게해야합니까? 내게는 랙 블록으로 내가 차단하고자하는 모든 IP 주소를 나열해야한다. ( – morgler

13

rack-attack을 확인해야합니다. 랙 블록과 동일하지만 자주 사용되며 자주 업데이트됩니다. 특정 IP를 차단하려면 다음을 수행하십시오.

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

IP 범위를 차단할 수 있습니까? 예 : 1.2.3. *? –

+1

@Stefanos .Ianannou는'Rack :: Attack.blacklist'에 전달하는 블록이 true를 리턴 하는지를 확인하는 데 필요한 값을 차단합니다. 다음과 같이 할 수 있습니다 : '(0..255) .map {| val | '.2.3.'+ val.to_s} .include? (req.ip)' – Phil

+2

@ 필 힐 나는 인위적인 예제를 아주 좋아합니다.하지만 ...;) 당신은 'starts_with? ('1.2.3')'- 256 문자열의 배열을 구축하고, 그 중 ip가 큰 문자열이 아닌지 확인합니다 계산적으로, 그러나 필요하지 않은 모든 요청에 ​​대해 당신이하고 싶지 않은 무언가는 아닙니다. –

관련 문제