Từ chối địa chỉ IP trên AWS ELB


10

Tôi, ít nhiều, theo cấu hình sau trên AWS:

Cân bằng tải đàn hồi với 3 máy o 3 vùng khả dụng khác nhau. Nhóm bảo mật của tôi cho phép 0.0.0.0/0:80 vì đây là ứng dụng rails của tôi (nginx, kỳ lân).

Tôi đã tự hỏi nếu có cách nào để từ chối quyền truy cập vào ứng dụng của tôi đến một địa chỉ IP công khai cụ thể? Tôi đã đọc tài liệu AWS, nhưng vì SG "từ chối tất cả" nên không có cách nào để từ chối chỉ một địa chỉ IP cụ thể.

Có ý kiến ​​gì không? iptables trên 3 máy phía sau cân bằng tải?

Cảm ơn!

Câu trả lời:


16

Một giải pháp đơn giản là sử dụng Quy tắc vào ACL của Mạng VPC. Điều này chỉ hoạt động nếu ELB của bạn ở trong VPC, nhưng nếu bạn đã tạo nó trong vài năm qua thì nó sẽ ở mặc định.

Để cấm 1.2.3.4 chẳng hạn, hãy làm như sau:

  1. Đăng nhập vào AWS.
  2. Điều hướng đến VPC.
  3. Chọn Network ACLstừ menu bên trái.
  4. Chọn ACL được liên kết với VPC mà ELB của bạn đang ở.
  5. Chọn Inbound Rulestab.
  6. Chọn Editvà thêm quy tắc mới với các thuộc tính sau:
    • Quy tắc #: 50 (bất kỳ số nào miễn là ít hơn quy tắc TẤT CẢ từ TẤT CẢ)
    • Loại: TẤT CẢ lưu lượng
    • Giao thức: TẤT CẢ
    • Phạm vi cổng: TẤT CẢ
    • Nguồn: 1.2.3.4 / 32
    • Cho phép / Từ chối: DENY

Có rất nhiều thông tin về ACL mạng tại đây: http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_ACLs.html


1

Không, không có tùy chọn để chặn IP với nhóm bảo mật.

Nhóm bảo mật về cơ bản là một danh sách trắng, thay vì danh sách đen.

Mọi thứ đều bị từ chối theo mặc định và bạn có thể chọn cổng mở theo nhu cầu của mình, nhưng bạn không thể chặn bất kỳ người / ip cụ thể nào.

Đối với điều đó, giải pháp tốt nhất là, như bạn đã nói, IPtables tại 3 máy khác nhau.

Tôi chắc chắn rằng các nhóm bảo mật AWS trong tương lai cũng sẽ có chức năng này, nhưng không phải như bây giờ.


1

Nếu bạn chỉ cần đưa vào danh sách đen một vài IP, bạn có thể sử dụng nginx_http_access_module trên máy chủ web của mình.


Vấn đề chính với điều này, là tôi cần tìm ra cách thực hiện "tự động", vì tất cả các cấu hình của tôi đều được quản lý bởi Chef. Tôi cần một cái gì đó như fail2ban hoặc denyhost để nói với một số cấu hình Chef để chặn một số địa chỉ IP ...
boris quiroz

1

Đối với điều đó, giải pháp tốt nhất là, như bạn đã nói, IPtables tại 3 máy khác nhau.

Trên thực tế, đó không phải là một giải pháp tốt vì ip từ xa ( $remote_addrtrong Nginx) sẽ là từ bộ cân bằng tải của Amazon. Cấm điều đó sẽ dẫn đến tất cả lưu lượng chuyển tiếp bị cấm.

Bạn sẽ phải kiểm tra các gói và tìm X-Forwarded-Fortiêu đề HTTP , IPtables không nhận thức được giao thức như thế.

Tôi giải quyết cho giải pháp sau đây cho 2 IP nghịch ngợm ở Nginx

set $client_ip $remote_addr;
if ($http_x_forwarded_for) {
  set $client_ip $http_x_forwarded_for;
}

if ($client_ip = "123.123.123.123") {
  return 403;
}

if ($client_ip = "123.123.123.234") {
  return 403;
}

Giới thiệu một biến $client_ip, để tôi cũng có thể kiểm tra biến này tại địa phương, nơi không http_x_forwarded_forcó sẵn ..

Hơi khó chịu nhưng đăng để thuận tiện, tôi cũng đã thêm ip khách hàng đó vào nhật ký truy cập của mình:

log_format main "\$client_ip - \$remote_user [\$time_local] \"\$request\" \$status \$body_bytes_sent \"\$http_referer\" \"\$http_user_agent\"";
access_log /var/log/nginx.access.log main;

Nó không đẹp, nhưng hy vọng nó sẽ giúp

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.