Bagaimana saya bisa memblokir rentang alamat IP dengan instance Amazon EC2?

27

Saya tahu sejumlah alamat IP yang menyebabkan masalah dengan server saya, 172.64.*.*apa cara terbaik untuk memblokir akses ke contoh Amazon EC2 saya? Apakah ada cara untuk melakukan ini menggunakan grup keamanan atau lebih baik melakukannya dengan firewall di server itu sendiri?

cwd
sumber
1
Jika instance berada dalam VPC, Anda dapat mengedit Network ACL untuk menolak rentang tertentu.

Jawaban:

17

Memblokir traffic pada server dan firewall jika memungkinkan, untuk berjaga-jaga.

Grup keamanan baik karena mereka eksternal untuk host Anda sehingga data tidak pernah mencapai Anda. Mereka tidak cukup dapat dikonfigurasi seperti kebanyakan firewall berbasis server sekalipun.

Sayangnya, grup keamanan EC2 hanya dapat "mengizinkan" layanan melalui kebijakan penolakan standar. Jadi, jika Anda mencoba memblokir akses ke layanan "yang diizinkan" untuk rentang IP kecil, membuat aturan izin untuk "sisa internet" sedikit lebih rumit daripada hanya memblokir rentang IP. Seperti yang Anda tentukan potongan besar yang bagus, daftar rentang jaringan tidak termasuk 172,64.0.0/16 tidak terlalu panjang:

0.0.0.0/1
128.0.0.0/3
160.0.0.0/5
168.0.0.0/6
172.0.0.0/10
173.0.0.0/8
174.0.0.0/7
176.0.0.0/4
192.0.0.0/3
224.0.0.0/3

Daftar ini perlu ditambahkan untuk port Anda. Kemudian Anda dapat menghapus aturan 'izinkan semua' untuk port itu. Jika Anda memiliki beberapa port yang ingin Anda lakukan untuk ini yang tidak berdekatan, daftar tersebut harus masuk berkali-kali. Jika Anda memiliki beberapa grup keamanan, ini dapat dengan cepat menjadi tidak terkelola.

Firewall secara lokal juga akan berfungsi. iptablestersedia di Amazon AMI default, dan semua distro linux

sudo iptables -I INPUT -s 172.64.0.0/16 -j DROP

Setelah menambahkan aturan, Anda harus menyimpannya, dan memastikan iptableslayanan dimulai saat boot.

# For Amazon Linux
sudo service iptables save

# Other distributions might use one of these:
#sudo iptables-save > /etc/sysconfig/iptables-config
#sudo iptables-save > /etc/iptables/rules.4

File konfigurasi untuk menyimpan akan bervariasi sesuai dengan distribusi.

Menggunakan VPC

Jika Anda menggunakan VPC untuk instance Anda, Anda dapat menentukan "Network ACLS" yang berfungsi pada subnet Anda. Jaringan ACL memungkinkan Anda untuk menulis izin dan menolak aturan, jadi saya sarankan melakukannya dengan cara ini.

Mat
sumber
ini tidak berfungsi lagi
Kim Jong Woo
@ KimJongWoo apa yang tidak berhasil? Saya tidak bisa melihat iptablestidak berfungsi jadi apakah Anda merujuk ke subnet besar memungkinkan di grup keamanan?
Mat
12

Cara termudah untuk menghentikan lalu lintas adalah (dengan asumsi VPC sedang digunakan) dengan menambahkannya ke ACL Jaringan VPC dari contoh itu dan menolak semua lalu lintas dari Alamat IP itu.

Satu hal yang perlu diingat adalah nomor aturan deny harus kurang dari angka aturan pertama yang diizinkan.

hal2286
sumber
4
Maksud Anda nomor aturan tolak harus kurang dari angka aturan pertama yang diizinkan ?
Dan Tenenbaum
Ya itu benar.
pg2286
1
perlu diingat bahwa ada batas 20 aturan ACL. Dan ini menyebalkan, Amazon.
Alex
3

Saya telah mengalami masalah dua kali dan menyadari bahwa situasi EC2 saya sedikit berbeda: iptablestidak berfungsi jika server Anda berada dalam kelompok di belakang penyeimbang beban elastis (ELB) - alamat IP yang diketahui oleh contoh ini adalah dari ELB.

Jika ELB Anda terkonfigurasi dalam konfigurasi yang lebih modern, lihat jawaban SO ini: /programming/20123308/how-to-configure-aws-elb-to-block-certain-ip-addresses-known -pelaku

Dalam kasus kami, kami tidak memiliki hal-hal yang diatur dengan baik, jadi saya harus menggunakan Apache, yang dapat mencari X-FORWARDED-FORheader dan memblokir alamat IP dari itu.

Tambahkan ini ke konfigurasi apache Anda (mungkin di blok VirtualHost):

RewriteEngine On
RewriteCond %{HTTP:X-FORWARDED-FOR] ^46\.242\.69\.216
RewriteRule .* - [F]

Ini akan memeriksa tajuk yang diatur oleh ELB

Simpan konfigurasi, uji dengan apache2ctl -tuntuk debian / ubuntu (atau apachectl -tuntuk RHEL), kemudian restart apache.

Ini hanya mengirim 403 Forbiddenrespons kembali

Tom Harrison Jr
sumber