Tolak alamat IP di AWS ELB

10

Saya telah, kurang lebih, mengikuti konfigurasi pada AWS:

Penyeimbang beban elastis dengan 3 mesin o 3 zona ketersediaan berbeda. Grup keamanan saya memungkinkan 0.0.0.0/0:80 karena ini adalah aplikasi rel saya (nginx, unicorn).

Saya bertanya-tanya apakah ada cara untuk menolak akses ke aplikasi saya ke alamat IP publik tertentu? Saya telah membaca dokumentasi AWS, tetapi karena SG "menolak semua" tidak ada cara untuk menolak hanya satu alamat IP tertentu.

Ada ide? iptables pada 3 mesin di belakang load balancer?

Terima kasih!

boris quiroz
sumber

Jawaban:

16

Solusi lurus ke depan adalah dengan menggunakan VPC Network ACL Inbound Rule. Ini hanya berfungsi jika ELB Anda berada dalam VPC, tetapi jika Anda telah membuatnya dalam beberapa tahun terakhir, ELB tersebut harus dalam keadaan default.

Untuk melarang 1.2.3.4 misalnya, lakukan hal berikut:

  1. Masuk ke AWS.
  2. Arahkan ke VPC.
  3. Pilih Network ACLsdari menu sebelah kiri.
  4. Pilih ACL yang terkait dengan VPC tempat ELB Anda berada.
  5. Pilih Inbound Rulestab.
  6. Pilih Editdan tambahkan aturan baru dengan atribut berikut:
    • Aturan #: 50 (angka berapa pun asalkan kurang dari aturan yang MEMUNGKINKAN dari SEMUA)
    • Jenis: SEMUA Lalu Lintas
    • Protokol: SEMUA
    • Kisaran Port: ALL
    • Sumber: 1.2.3.4/32
    • Allow / Deny: DENY

Ada banyak informasi lebih lanjut tentang ACL Jaringan di sini: http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_ACLs.html

Tama
sumber
1

Tidak, Tidak ada opsi untuk memblokir IP dengan grup keamanan.

Grup keamanan pada dasarnya adalah daftar putih, bukan daftar hitam.

Semuanya ditolak secara default dan Anda dapat membuka porta secara selektif sesuai kebutuhan Anda, tetapi Anda tidak dapat memblokir orang / ip tertentu.

Untuk itu, solusi terbaik adalah, seperti yang Anda katakan, IPtables di 3 mesin yang berbeda.

Saya yakin ke depan grup keamanan AWS akan memiliki fungsi ini juga, tetapi tidak seperti sekarang.

Napster_X
sumber
1

Jika Anda hanya perlu membuat daftar hitam beberapa IP, Anda mungkin bisa menggunakan nginx_http_access_module di server web Anda.

Sebastian Cruz
sumber
Masalah utama dengan ini, adalah saya perlu mencari tahu bagaimana melakukannya "secara otomatis", karena semua konfigurasi saya dikelola oleh Chef. Saya butuh sesuatu seperti fail2ban atau denyhost untuk memberitahu beberapa konfigurasi Chef untuk memblokir beberapa alamat IP ...
boris quiroz
1

Untuk itu, solusi terbaik adalah, seperti yang Anda katakan, IPtables di 3 mesin yang berbeda.

Sebenarnya, itu bukan solusi yang baik karena ip jarak jauh ( $remote_addrdi Nginx) akan berasal dari loadbalancer Amazon. Larangan yang akan mengakibatkan semua lalu lintas diteruskan dilarang.

Anda harus memeriksa paket-paket dan menemukan X-Forwarded-Forheader HTTP , IPtables tidak menyadari protokol seperti itu.

Saya setuju untuk solusi berikut untuk 2 IP nakal di 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;
}

Memperkenalkan variabel $client_ip, hanya supaya saya juga bisa menguji ini secara lokal, di mana tidak ada yang http_x_forwarded_fortersedia ..

Sedikit offtopic tetapi memposting untuk kenyamanan, saya juga menambahkan ip klien ke log akses saya:

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;

Itu tidak cantik, tapi harap itu membantu

kvz
sumber