Tôi đang thiết lập Solr bằng Jetty. Tôi muốn hạn chế quyền truy cập vào chỉ một vài địa chỉ IP. Nó không có vẻ ngay lập tức rõ ràng rằng điều này có thể được thực hiện bằng cách sử dụng Jetty. Có thể và nếu có, làm thế nào?Hạn chế địa chỉ IP cho Cầu tàu và Solr
Trả lời
Solr 4.2.1 sử dụng Jetty 8.1.8. Cầu cảng 8 (như được ghi chú bởi jonas789) không hỗ trợ .htaccess. Thay vào đó, nó sử dụng IPAccessHandler, không có tài liệu tuyệt vời. Tôi đã phải chơi với nó một chút để có được nó làm việc, vì vậy tôi đăng một giải pháp cập nhật ở đây.
IPAccessHandler quản lý danh sách đen và danh sách trắng, chấp nhận các dải IP tùy ý và hỗ trợ gắn đường dẫn URI cụ thể vào mỗi mục nhập danh sách trắng/đen. IPAccessHandler cũng phân lớp HandlerWrapper, mà hóa ra là quan trọng.
Ứng dụng solr vẫn tồn tại trong WebAppContext (như trong giải pháp của Lyndsay), nhưng WebAppContext hiện được chi phối bởi ContextHandler, nằm trong ContextHandlerCollection chiếm vị trí xử lý đầu tiên trong máy chủ. Để ngăn các yêu cầu từ IP sai khi truy cập vào ứng dụng, chúng ta cần bọc nó bên trong một IPAccessHandler ở đâu đó dọc theo đường dẫn đó. IPAccessHandler cư xử kỳ lạ nếu nó ở vị trí sai: Tôi đã thử chèn nó trước các trình xử lý ngữ cảnh và nó đã cho 403 Cấm cho các máy sai, ném NullPointerException tantrums mà không có thông báo lỗi bổ sung, tất cả các loại vô nghĩa. Cuối cùng tôi đã làm cho nó hoạt động bằng cách gói chính ContextHandlerCollection, ở cấp độ máy chủ.
Đi đến etc/jetty.xml
và cuộn đến phần trình xử lý. Sau đó quấn mục ContextHandlerCollection hiện như sau:
<!-- =========================================================== -->
<!-- Set handler Collection Structure -->
<!-- =========================================================== -->
<Set name="handler">
<New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
<Set name="handlers">
<Array type="org.eclipse.jetty.server.Handler">
<Item>
<!-- here begins the new stuff -->
<New class="org.eclipse.jetty.server.handler.IPAccessHandler">
<Call name="addWhite">
<Arg>xxx.xxx.xxx.xxx</Arg>
</Call>
<Set name="handler">
<!-- here's where you put what was there before: -->
<New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
</Set>
</New>
<!-- here ends the new stuff -->
</Item>
<Item>
<New id="DefaultHandler" class="org.eclipse.jetty.server.handler.DefaultHandler"/>
</Item>
<Item>
<New id="RequestLog" class="org.eclipse.jetty.server.handler.RequestLogHandler"/>
</Item>
</Array>
</Set>
</New>
</Set>
Resources:
Tôi đã thử nó và nó hoạt động hoàn hảo! Nó chặn truy cập vào 'solr admin' và đối với' client' được sử dụng từ các host khác so với cái được bạn sử dụng. – h4k1m
Tôi độc lập đến cùng một giải pháp này; Tôi không tìm thấy điều này trước. FYI điều này IPAccessHandler chỉ làm việc với IPv4 - đó là một lỗi/giới hạn. Vì vậy, khi bắt đầu Java, vượt qua: '-Djava.net.preferIPv4Stack = true'. Và đối với những người tìm kiếm các quy tắc được đề xuất, tôi trông giống như sau:
Tôi đã tìm thấy giải pháp.
Thứ nhất, trích xuất nội dung của solr.war trong thư mục ví dụ/webapps. Sau đó, tạo ra một tập tin gọi là .htaccess và đặt nó trong ví dụ/webapps/thư mục Solr (một trong những bạn chỉ cần trích xuất) có chứa những điều sau đây:
<Limit>
satisfy all
order deny,allow
deny from all
allow from xxx.xxx.xxx.xxx
</Limit>
Trong ví dụ/etc/chỉnh sửa các tập tin jetty.xml và bình luận ra phần org.mortbay.jetty.deployer.WebAppDeployer. Sau đó, cuối cùng tạo ra một thư mục trong ví dụ/gọi là bối cảnh (nếu chưa tồn tại) và thêm một tập tin gọi là solr.xml để nó có chứa:
<Configure id="solr" class="org.mortbay.jetty.webapp.WebAppContext">
<Set name="resourceBase"><SystemProperty name="jetty.home" default="."/>/webapps/solr</Set>
<Set name="contextPath">/solr</Set>
<Call name="setSecurityHandler">
<Arg>
<New class="org.mortbay.jetty.security.HTAccessHandler">
<Set name="protegee">
<Ref id="solr"/>
</Set>
</New>
</Arg>
</Call>
</Configure>
Sau đó khởi động Solr an toàn mới của bạn!
Đối với những người khác, điều này sẽ không hoạt động trong các phiên bản mới hơn của Jetty được lưu trữ vào nhật thực. Về cơ bản không còn HTAccessHandler nữa. Tham khảo: http://jetty.4.n6.nabble.com/jira-Created-JETTY-962-Clean-room-implementation-of-org-mortbay-jetty-securtiy-HTAccessHandler-td41205.html – jonas789
- 1. Yêu cầu điều chỉnh theo địa chỉ IP trên Apache?
- 2. Hạn chế quyền truy cập vào máy chủ HTTP dựa trên Node.js theo địa chỉ IP
- 3. Hạn chế IP với htaccess
- 4. Làm cách nào để hạn chế quyền truy cập theo địa chỉ IP với Tomcat?
- 5. Windows Azure - hạn chế sự phát tán địa chỉ IP để truy cập WebRole
- 6. Cách tốt nhất để hạn chế quyền truy cập theo địa chỉ IP?
- 7. Số nguyên cho Địa chỉ IP - C
- 8. Nhận địa chỉ IP yêu cầu với Pyramid
- 9. Tăng địa chỉ IP
- 10. Nhận danh sách địa chỉ IP hữu hạn cho Ứng dụng Heroku của tôi?
- 11. Giới hạn yêu cầu 2.500 cho IP "Chỉ đường dịch vụ web" có dựa trên không?
- 12. trim địa chỉ ip octet
- 13. Chỉ cho phép yêu cầu từ IP cụ thể
- 14. Địa chỉ IP từ sk_buff
- 15. Địa chỉ IP trong MaskedTextBox?
- 16. Chuyển đổi [địa chỉ NSNetservice] để ip địa chỉ chuỗi
- 17. Các vấn đề về Đường nối cầu tàu số
- 18. Hạn chế truy cập đến một bộ điều khiển cụ thể theo địa chỉ IP trong ASP.NET MVC Beta
- 19. Bảo mật WCF bằng địa chỉ IP của khách hàng
- 20. Xác thực bằng địa chỉ IP ở Django
- 21. Tôi nên lưu trữ địa chỉ IP cho MySQL?
- 22. Tính địa chỉ quảng bá từ ip và subnet mask
- 23. Chuyển đổi một địa chỉ IP cho một số:
- 24. Kỹ thuật phát hiện vị trí cho địa chỉ IP
- 25. Trang web hiển thị khác với địa chỉ máy chủ cục bộ và địa chỉ IP
- 26. Đảo ngược ip, tìm tên miền trên địa chỉ IP
- 27. Cách nghe trên nhiều địa chỉ IP?
- 28. Nhận địa chỉ IP cục bộ
- 29. Chỉ định cổng Cầu tàu trong SBT 0.10
- 30. Dns.GetHostEntry trả về nhiều địa chỉ IP
tôi nghĩ rằng bạn không thể trực tiếp mà không cần viết trình xử lý hoặc bộ lọc tùy chỉnh. Dù sao, bạn có thể đặt cầu cảng phía sau một máy chủ web khác như Apache. – Chewie