Akankah memblokir semua koneksi di luar AS, selain dari port 80 menyebabkan beban server yang tinggi?

16

Seperti kebanyakan server (saya berasumsi), kami memiliki orang yang mencoba memaksa layanan kami 24/7. Saya memiliki cpHulk daftar hitam IP mereka, tetapi sepertinya akan lebih baik jika mereka tidak sampai sejauh itu di tempat pertama. Saya dan tuan rumah saya adalah satu-satunya yang terhubung ke server pada port selain 80, jadi saya ingin memblokir koneksi dari semua negara di luar AS, kecuali untuk port 80. Saya menghubungi host saya untuk mengatur ini, tetapi mereka ragu-ragu karena mereka mengatakan itu akan membuat beban server yang sangat tinggi. Ini adalah server khusus Xeon 1230 dengan RAM 32GB yang menjalankan CentOS 6.6 dan iptables.

Pertama, ada alasan untuk tidak melakukan ini? Kedua, apakah yang dikatakan oleh tuan rumah saya kepada saya benar? Ketiga, apakah ada cara untuk mencapai ini tanpa dampak kinerja tinggi?

Besi Besar
sumber
12
Sangat disayangkan bahwa kontak hosting Anda tidak menyebutkan "Tapi ada cara standar industri untuk melakukan hal yang sama yang Anda inginkan dengan pemeliharaan yang jauh lebih sedikit, keamanan yang lebih baik, dan server yang rendah yang disebut Explicit Deny All. Dapatkan saya daftar IP yang Anda butuhkan daftar putih dan saya akan mengaturnya untuk Anda dalam 20 menit. " - Itulah yang saya harapkan untuk mendengar dari setiap sysadmin senilai kursi yang mereka duduki.
corsiKa
cukup blokir mereka ketika mereka menyalahgunakan ... pemeliharaan minimal dengan cara ini ... dengan tabel lengkap Anda harus terus memperbaruinya
Skaperen

Jawaban:

33

Menyiapkan aturan khusus untuk memblokir setiap rentang IP (dengan mendaftar setiap rentang) adalah pendekatan yang salah.

Tetapkan aturan default di iptables untuk menjatuhkan semua lalu lintas ke port manajemen Anda. Kemudian tambahkan aturan untuk hanya mengizinkan akses dari IP tepercaya Anda (milik Anda dan host Anda).

Memblokir semuanya secara default, dan hanya mengizinkan lalu lintas yang disetujui biasanya disebut "eksplisit deny all", dan dianggap sebagai praktik terbaik. Dalam hal ini juga tidak membantu untuk menghindari dampak kinerja host Anda khawatir.

jtintinen
sumber
Mengapa, jika Anda tahu, apakah ini secara eksplisit menolak semua ketika Anda secara implisit menolak semua orang dengan secara eksplisit hanya mengizinkan beberapa IP masuk melalui firewall?
Ben
Tidak ada yang tersirat tentang itu benar-benar ...
mr-sk
Salah satu potensi kekhawatiran untuk masuk daftar putih adalah akses jarak jauh. Anda akan membutuhkan VPN yang andal (terpisah dari server ini) dan memungkinkan jangkauan IP-nya juga.
Foo Bar
9

Untuk melakukan ini, Anda harus menambahkan puluhan ribu aturan firewall, satu untuk setiap netblock, di mana suatu negara mungkin memiliki antara satu hingga beberapa ribu netblock yang terkait dengannya.

Ketika permintaan masuk, itu harus diperiksa terhadap setiap aturan tunggal , yang membutuhkan waktu sangat sedikit untuk beberapa lusin atau bahkan mungkin beberapa ratus aturan, tetapi dengan sebanyak mungkin aturan yang perlu Anda gunakan, (1) setiap permintaan akan melambat secara signifikan dan (2) akan menggunakan banyak CPU.

Cara untuk melakukan ini tanpa dampak kinerja yang signifikan adalah dengan melakukan apa yang sudah Anda lakukan: memblokir hanya alamat-alamat spesifik yang bermasalah.

Michael Hampton
sumber
Terima kasih atas jawabannya, Michael. Apakah tidak ada cara untuk hanya mengizinkan IP berbasis AS, sehingga hanya perlu memeriksa satu aturan?
Big Iron
2
@BigIron Tentu saja tidak. Ada juga puluhan ribu netblock di AS. Anda kehilangan arah mana pun.
Michael Hampton
1
@SamuelEdwinWard Tidak, tidak. Meskipun mereka tersebar di semua tempat, pada umumnya blocklists semacam itu tidak berjumlah lebih dari beberapa ratus entri.
Michael Hampton
1
Apakah Anda memiliki referensi untuk seberapa signifikan perlambatan itu? Pencarian linear meskipun semua aturan terdengar sangat tidak efisien, setidaknya pencarian biner berarti pencarian tabel aturan 60.000 hanya akan membawa 16 penyelidikan ke dalam tabel, dan itu bisa lebih cepat daripada membiarkan lalu lintas melewati server web yang mungkin harus menjalankan disk I / O untuk melayani permintaan. Saya tidak dapat menemukan metrik pada aturan besar di iptables.
Johnny
1
@Johnny netfilter (iptables) memproses aturan itu sayangnya secara linear: serverfault.com/questions/334885/…
Ross Ridge
5

Yang Anda butuhkan adalah alat yang disebut ipsets

Set IP adalah kerangka kerja di dalam kernel Linux, yang dapat dikelola oleh utilitas ipset. Tergantung pada jenisnya, saat ini satu set IP dapat menyimpan alamat IP, nomor port (TCP / UDP) atau alamat IP dengan alamat MAC dengan cara, yang memastikan kecepatan kilat saat mencocokkan entri dengan set.

hal penting yang perlu diperhatikan di sini adalah cepat kilat! Itu karena sejumlah besar jaringan ip dapat diwakili oleh hash tunggal, bukan ratusan atau ribuan baris aturan iptables.

Untuk negara yang memblokir lihat contoh ini :

Ricardo
sumber
1

Mengabaikan sedikit tentang apakah melakukannya dengan cara ini adalah ide yang baik, Anda dapat melakukan apa yang Anda minta dengan modul GeoIP untuk iptables.

Setelah membangun dan memasang modul (dan membuat daftar IP Anda diperbarui setiap bulan), Anda dapat melakukan hal-hal seperti ini untuk memblokir masing-masing negara:

iptables -I INPUT -m geoip --src-cc CN -j DROP

Atau gunakan --src-cc US -j ACCEPTdan seterusnya jika Anda lebih suka menentukan negara-negara yang ingin Anda pertahankan.

Scott Dudley
sumber
Bukankah itu akan menjadi bencana kinerja bahkan jika menggunakan "secara eksplisit menolak semua" dan hanya mengizinkan satu negara?
@ AndréDaniel, saya akui bahwa saya belum melihat kode GeoIP itu sendiri, tetapi dengan asumsi bahwa mereka menggunakan implementasi non-naif yang lebih pintar daripada secara berurutan membandingkan sekelompok netblock (mis. Trie), itu tidak perlu.
Scott Dudley
Dan jika Anda berbicara tentang IPv4 dan Anda memiliki 512 Mb untuk cadangan per aturan, implementasi teoritis menggunakan tabel pencarian bisa menyelesaikan pekerjaan di O (1).
Scott Dudley
1

Jika Anda ingin mempertahankan kemampuan untuk terhubung dari mana saja tanpa mempertahankan daftar hitam / daftar putih geo-location, Anda dapat menerapkan port-knocking . Ini akan menghentikan sebagian besar upaya otomatis sambil memungkinkan Anda tetap terhubung dari alamat apa pun.

Catatan: Jangan menempatkan port untuk mengetuk berdampingan dengan port untuk membuka, jika tidak, pemindaian port sekuensial akan mengaktifkan aturan Anda.

seren
sumber
0

Jika Anda memiliki satu atau dua router yang diaktifkan BGP di tumpukan Anda DAN memiliki semacam gagasan apa yang sedang Anda lakukan / bekerja dengan seseorang yang tahu apa yang sedang mereka lakukan, atau apakah mungkin di balik penyedia pencegahan DDoS cukup keren untuk membantu dalam pelaksanaan ini, ada metode yang relatif segar untuk membatasi lalu lintas ke wilayah geografis yang disebut blackholing selektif yang menurut saya layak untuk dilihat.

https://ripe68.ripe.net/presentations/176-RIPE68_JSnijders_DDoS_Damage_Control.pdf

http://mailman.nanog.org/pipermail/nanog/2014-Februari/064381.html

http://www.internetsociety.org/deploy360/blog/2014/07/video-selective-blackholing-at-ripe-68/

Karena metode ini bekerja pada manipulasi rute, ia mem-bypass masalah server load.

Dmitri DB
sumber