2012-08-27 35 views
21

Có cách nào để thực hiện lọc IP hoặc các quy tắc truy cập IP giống như tôi muốn với nginx/apache để hạn chế hoặc chặn một số IP nhất định trên Heroku không?Làm cách nào để chặn hoặc lọc địa chỉ IP trên Heroku?

Lưu ý: Tôi biết điều này có thể được thực hiện từ bên trong ứng dụng của tôi (Rails 3.2) rất dễ dàng nhưng tôi không nghĩ đây là cách sử dụng tài nguyên hiệu quả nhất trên Heroku. Ngoài ra, một giải pháp dựa trên Rack sẽ tốt hơn so với thực hiện lọc trong Rails.

Trả lời

7

Tôi đã thêm 'rack-block' làm Rack middleware. Trong cấu hình/initializers, thêm một tập tin mới:

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 

Làm việc như một sự quyến rũ.

+2

Cảm ơn, đây chính xác là những gì tôi đang tìm kiếm. Tôi rất lo lắng với kỹ năng googling của tôi bây giờ. –

+2

Có cách nào để chặn các địa chỉ trung tâm trước khi yêu cầu nhấn dyno không? –

+0

Làm cách nào để chặn tất cả các địa chỉ IP ngoại trừ một IP mà tôi muốn cho phép? Đối với tôi có vẻ như với rack-block tôi phải liệt kê tất cả các địa chỉ IP tôi muốn chặn: ( – morgler

13

Bạn nên xem rack-attack. Có vẻ như nó cũng giống như rack-block, nhưng được sử dụng rộng rãi hơn và cập nhật thường xuyên. Để chặn một IP cụ thể, bạn có thể thực hiện việc này:

# 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

Tôi có thể chặn dải IP không? 1.2.3. *? –

+1

@Stefanos .Ioannou để chặn giá trị bạn chỉ cần chắc chắn rằng khối bạn vượt qua để 'Rack :: Attack.blacklist' trả về true.Bạn có thể làm một cái gì đó như thế này: ' (0..255) .map {| val | '1.2.3.' + Val.to_s} .include? (Req.ip) ' – Phil

+2

@Phil Tôi đang bị lừa đảo về một ví dụ giả tạo, nhưng ...;) Bạn có lẽ sẽ tốt hơn với' starts_with? ('1.2.3') 'ở đó - xây dựng một mảng gồm 256 chuỗi, sau đó kiểm tra xem ip nằm trong số đó có thể không lớn tính toán, nhưng có thể không phải thứ bạn muốn thực hiện trên mọi yêu cầu nếu không cần thiết. –

Các vấn đề liên quan