Điểm:0

iptables không hoạt động với "x-forwarded-for" (đằng sau Cloudflare)

lá cờ jm

Tôi có một máy chủ web (Ubuntu với Apache) chạy phía sau Cloudflare.Tôi muốn chặn người dùng bằng iptables. Ở đây tôi muốn triển khai tiện ích mở rộng khớp chuỗi của iptables và hủy kết nối nếu x-chuyển tiếp-cho phù hợp. Tôi đang thêm quy tắc bằng lệnh sau:

iptables -I INPUT -m string --string "x-forwarded-for: 216.244.66.205" --algo bm --to 65535 -j DROP

Sau khi thêm quy tắc này, máy khách vẫn có thể truy cập máy chủ.

Tôi biết về tiêu đề cụ thể của Cloudflare cho IP máy khách đó là cf-kết nối-ip. Nếu tôi thêm một quy tắc bằng lệnh sau, nó sẽ hoạt động như mong đợi. Đây là quy tắc hoạt động tốt:

iptables -I INPUT -m string --string "cf-connecting-ip: 216.244.66.205" --algo bm --to 65535 -j DROP

Tại sao tôi muốn sử dụng XFF thay vì cf-kết nối-ip:

Tôi có một bộ cân bằng tải riêng (haproxy) và một số miền đang chạy qua bộ này thay vì Cloudflare. Đó là lý do tại sao tôi muốn sử dụng XFF vì cf-kết nối-ip dành riêng cho Cloudflare và XFF được hỗ trợ bởi cả hai.

Lưu lượng truy cập từ Cloudflare đến máy chủ Web là HTTP (cổng 80) nên dữ liệu http hiển thị với iptables.

Tôi có thể thấy Cloudflare đang đính kèm cả hai cf-kết nối-ip và tiêu đề XFF. Đây là đầu ra của tcpdump trong số nhiều yêu cầu:

tcpdump -A -s 65535 'cổng tcp 80' | grep 216.244.66.205
chuyển tiếp x cho: 216.244.66.205
cf-kết nối-ip: 216.244.66.205
chuyển tiếp x cho: 216.244.66.205
cf-kết nối-ip: 216.244.66.205
chuyển tiếp x cho: 216.244.66.205
cf-kết nối-ip: 216.244.66.205
chuyển tiếp x cho: 216.244.66.205
cf-kết nối-ip: 216.244.66.205

Bằng cách nào đó, iptables có thể phát hiện cf-kết nối-ip nhưng không x-chuyển tiếp-cho.

Tôi làm gì sai ở đây?

Alex avatar
lá cờ in
Điều này có vẻ liên quan - https://serverfault.com/a/980916/802321
Ajaib Singh avatar
lá cờ jm
@Alex cái này không liên quan. Tôi đang sử dụng tiện ích mở rộng khớp chuỗi thay vì chặn IP kết nối. Tôi biết IP kết nối thuộc về Cloudflare, đó là lý do tại sao tôi đang thử với XFF.
Điểm:1
lá cờ us

Kết hợp chuỗi hoạt động trên tải trọng của gói IP đơn lẻ.

Vì vậy, một lý do có thể là vị trí của x-chuyển tiếp-cho: tiêu đề nằm trên ranh giới của hai phân đoạn TCP. Do đó, gói IP đầu tiên có thể chứa x-forw và gói IP thứ hai arded-cho:. Sau đó chuỗi mô-đun khớp không khớp với một trong hai gói.

Để kiểm tra xem đây có phải là lý do hay không, hãy xem xét các tải trọng gói IP khác nhau thuộc về kết nối và xem cách phân đoạn TCP được chia thành các gói IP.

Tốt nhất là triển khai các tính năng chặn như thế này ở cấp độ HTTP.

Ajaib Singh avatar
lá cờ jm
Làm thế nào để xem xét tải trọng gói? Có thể với tcpdump không?
lá cờ us
Bạn có thể sử dụng tcpdump hoặc Wireshark để kiểm tra tải trọng. Tôi không có hướng dẫn chính xác để cho bạn biết làm thế nào để làm điều đó mặc dù.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.