Mengamankan server linux: iptables vs fail2ban

10

Saya ingin memilih otak komunitas mengenai keamanan server linux, khususnya tentang serangan brute-force dan menggunakan fail2ban vs custom iptables .

Ada beberapa pertanyaan serupa di luar sana tetapi tidak satupun dari mereka membahas topik untuk kepuasan saya. Singkatnya saya mencoba menentukan solusi terbaik untuk mengamankan server linux yang terpapar ke internet (menjalankan layanan biasa, ssh, web, mail), dari serangan brute-force.

Saya memiliki pegangan yang baik pada keamanan server, yaitu mengunci ssh dengan tidak mengizinkan login root atau kata sandi, mengubah port default, memastikan perangkat lunak mutakhir, memeriksa file log, hanya mengizinkan host tertentu untuk mengakses server dan memanfaatkan keamanan alat audit seperti Lynis ( https://cisofy.com/lynis/ ), untuk kepatuhan keamanan umum, jadi pertanyaan ini tidak selalu mengenai itu meskipun masukan dan saran selalu diterima .

Pertanyaan saya adalah solusi mana yang harus saya gunakan (fail2ban atau iptables), dan bagaimana saya harus mengkonfigurasinya, atau haruskah saya menggunakan kombinasi keduanya untuk mengamankan terhadap serangan brute-force?

Ada tanggapan yang menarik mengenai topik tersebut ( Denyhosts vs fail2ban vs iptables- cara terbaik untuk mencegah masuknya brute force? ). Jawaban yang paling menarik bagi saya secara pribadi adalah ( https://serverfault.com/a/128964 ), dan bahwa routing iptables terjadi di kernel sebagai lawan fail2ban yang menggunakan alat mode pengguna untuk mengurai file log. Fail2ban menggunakan iptables tentu saja, tetapi masih harus mengurai file log dan mencocokkan pola hingga melakukan tindakan.

Maka masuk akal untuk menggunakan iptables dan menggunakan pembatasan-tingkat ( https://www.rackaid.com/blog/how-to-block-ssh-brute-force-attacks/ ) untuk membatalkan permintaan dari IP untuk suatu periode waktu yang membuat terlalu banyak upaya koneksi selama periode tertentu terlepas dari protokol apa yang berusaha disambungkan? Jika demikian, maka ada beberapa pemikiran menarik tentang penggunaan drop vs reject untuk paket-paket tersebut di sini ( http://www.chiark.greenend.org.uk/~peterb/network/drop-vs-reject ), ada pemikiran tentang itu?

Fail2ban memungkinkan untuk konfigurasi khusus dalam bentuk dapat menulis ' aturan ' khusus untuk layanan yang mungkin tidak dibahas dalam konfigurasi default. Mudah untuk menginstal dan mengatur dan kuat, tetapi mungkinkah ini merupakan kerja keras jika semua yang saya coba capai adalah ' memblokir ' IP dari server jika mereka melakukan 2 upaya akses yang gagal pada layanan / protokol apa pun dengan jumlah x waktu?

Tujuannya di sini adalah untuk membuka laporan logwatch harian dan tidak perlu menelusuri halaman-halaman upaya koneksi gagal ke server.

Terima kasih telah meluangkan waktu.

kingmilo
sumber
3
Anda mungkin menemukan Mengapa saya perlu firewall jika server saya dikonfigurasi dengan baik? dapat menjelaskan masalah ini.
MadHatter

Jawaban:

21

saya harus menggunakan fail2ban atau iptables?

Anda menggunakan fail2ban sebagai tambahan untuk solusi firewall, untuk memperluas sesuai permintaan aturan firewall yang ada dengan aturan untuk memblokir ip-address spesifik dari sistem yang melakukan tindakan yang tidak diinginkan pada layanan publik. Mereka bekerja bersama satu sama lain.

Sederhana: firewall hanya melihat koneksi dan paket jaringan dan dapat memahami beberapa pola di dalamnya, tetapi firewall tidak memiliki wawasan tingkat aplikasi untuk membedakan permintaan yang diinginkan dan valid dari permintaan jahat, cacat, dan permintaan yang tidak diinginkan. Misalnya firewall Anda tidak dapat membedakan antara sekelompok permintaan HTTP API dan sejumlah upaya login yang salah yang disebabkan oleh tebakan kata sandi brute force pada halaman admin Wordpress Anda, ke firewall keduanya hanya koneksi TCP ke port 80 atau 443.

Fail2ban adalah pendekatan umum dan dapat dikembangkan untuk memberikan wawasan tingkat aplikasi itu ke firewall Anda, meskipun agak tidak langsung.
Seringkali aplikasi akan mendaftar dan mencatat permintaan jahat, salah bentuk dan tidak diinginkan, tetapi jarang mereka memiliki kemampuan asli untuk mencegah penyalahgunaan lebih lanjut. Meskipun sedikit dipisahkan Fail2ban kemudian dapat menindaklanjuti peristiwa berbahaya yang dicatat dan membatasi kerusakan dan mencegah penyalahgunaan lebih lanjut, biasanya dengan mengkonfigurasi ulang firewall Anda secara dinamis untuk menolak akses lebih lanjut. Dengan kata lain Fail2ban memberikan aplikasi Anda yang ada, tanpa mengubahnya, cara untuk menangkis penyalahgunaan.

Metode berbeda untuk memberikan wawasan tingkat aplikasi pada firewall adalah melalui sistem deteksi / pencegahan intrusi .


Misalnya server web adalah layanan publik yang umum dan di firewall Anda port TCP 80 dan 443 terbuka untuk internet pada umumnya.
Biasanya Anda tidak memiliki batasan tingkat pada port HTTP / HTTPS karena beberapa pengguna yang valid dapat memiliki satu asal ketika mereka misalnya di belakang gateway NAT atau proxy web.

Ketika Anda mendeteksi tindakan yang tidak diinginkan dan / atau berbahaya terhadap server web Anda, Anda menggunakan fail2ban untuk mengotomatiskan pemblokiran pelaku seperti itu (baik memblok mereka sepenuhnya atau dengan hanya mengunci akses mereka ke port 80 & 443).

Di sisi lain, akses SSH bukan layanan publik, tetapi jika Anda tidak berada dalam posisi untuk membatasi akses SSH di firewall Anda hanya untuk rentang alamat IP yang terdaftar putih, koneksi masuk yang membatasi tingkat adalah salah satu cara untuk memperlambat serangan brutal. Serangan-force. Tetapi firewall Anda masih tidak dapat membedakan antara pengguna yang berhasil masuk sebanyak 5 kali karena ia menjalankan buku pedoman yang dimungkinkan dan 5 upaya gagal untuk masuk sebagai root oleh bot.

HBruijn
sumber
Ini adalah wawasan yang saya cari, sangat masuk akal bagi saya, terima kasih telah meluangkan waktu.
kingmilo
2
Meskipun ada firewall aplikasi (juga dikenal sebagai gateway aplikasi) yang dapat melakukan inspeksi paket yang mendalam.
gardenhead
@gardenhead setuju, dan +1; karena yang iptablesdisebutkan oleh OP, saya berfokus terutama pada Linux packetfilter build ke dalam kernel. Menurut pendapat saya " firewall aplikasi " tidak cukup memeriksa paket mereka adalah protokol aplikasi sadar dan harus memeriksa permintaan lengkap. Di web Anda kemudian berurusan dengan produk-produk seperti mod_security apache, peralatan F5 dan Bluecoat dan bahkan proksi balik "rendah hati"
HBruijn
@ Hruijn Anda benar - saya salah menggunakan istilah term. Saya tidak tahu detail bagaimana gateway aplikasi dibangun, tapi saya membayangkan mereka menunggu untuk menerima paket yang cukup untuk mengumpulkan pesan layer aplikasi lengkap sebelum inspeksi + penerusan.
gardenhead
1
Protip: gunakan modul iptables terkini untuk ssh, bahkan jika Anda menggunakan fail2ban untuk layanan lain. Mungkin ada mode kegagalan yang menarik di mana aturan tidak dibersihkan dengan benar, dan memiliki login yang terkena dampaknya akan sangat mengganggu (dan juga membuat masalah sulit untuk di-debug). Dengan baru-baru ini , aturan aktual tidak perlu diubah, sehingga Anda memiliki peluang bagus untuk mendapatkan akses kembali.
Simon Richter
7

saya harus menggunakan fail2ban atau iptables?

Ini agak mirip dengan bertanya "haruskah saya menggunakan sabuk pengaman atau mobil?".

Pertama, ingat bahwa fail2ban benar-benar hanya alat untuk secara otomatis mendeteksi entri berulang dalam file teks dan menjalankan beberapa perintah ketika mereka memenuhi ambang yang ditentukan.

Kami sering menggunakannya untuk memblokir host yang melanggar beberapa kebijakan sebagaimana dibuktikan dengan entri log berulang yang menunjukkan pelanggaran kebijakan, tetapi itu bukan satu-satunya hal yang dapat Anda gunakan untuk itu.

Anda dapat menggunakan fail2ban untuk menambahkan (dan menghapus) aturan iptables sesuai permintaan. Anda juga dapat menambah dan menghapus aturan iptables dengan tangan, atau Anda dapat menggunakan fail2ban untuk melakukan sesuatu yang sama sekali berbeda sebagai respons. Itu semua tentang bagaimana Anda mengkonfigurasinya.

Anda harus memiliki firewall umum di tempat terlepas dari apakah Anda menjalankan fail2ban atau tidak. Firewall seperti itu akan, misalnya, untuk memblokir lalu lintas (masuk atau keluar) yang Anda tahu tidak akan pernah sah. Misalnya, apakah server basis data itu benar - benar perlu menangani koneksi masuk pada port 25 dari seluruh Internet?

Di atas itu, memiliki respon fail2ban untuk pelanggaran kebijakan dengan memotong menyinggung IP (s) untuk sementara tidak akan melakukan banyak untuk mengamankan server Anda per se (baik mengeksploitasi hanya perlu untuk melewati firewall Anda sekali) tetapi akan kurangi tingkat kebisingan pada sistem Anda, termasuk tetapi tidak terbatas pada log sistem. Cara sederhana untuk melakukannya adalah menjalankan iptables fail2ban untuk mengkonfigurasi kernel agar menjatuhkan paket untuk sementara waktu. Jika Anda dapat mengkonfigurasi ulang firewall perimeter Anda, bukan hanya firewall host, maka itu jauh lebih baik.

Dengan kata lain, sejauh mereka dapat dengan mudah dipisahkan di tempat pertama, Anda menginginkan keduanya.

mungkinkah ini merupakan pembunuhan berlebihan jika semua yang saya coba capai adalah 'memblokir' IP dari server jika mereka melakukan 2 upaya akses yang gagal pada layanan / protokol apa pun selama jumlah waktu yang ditentukan?

Itulah tepatnya use case fail2ban dirancang untuk dipecahkan. Menggunakan alat untuk tujuan yang dimaksud hampir tidak pernah berlebihan.

Tujuannya di sini adalah untuk membuka laporan logwatch harian dan tidak perlu menelusuri halaman-halaman upaya koneksi gagal ke server.

Selain itu, tidak terkait langsung dengan pertanyaan Anda: Setiap kali Anda memfilter log untuk ditinjau, pertimbangkan apa yang akan Anda lakukan tentang beberapa entri tertentu. Jika semua yang akan Anda lakukan tentang entri adalah mengatakan "meh" dan melanjutkan, maka Anda mungkin ingin menyaringnya. Pastikan untuk menyimpan log lengkap untuk ditinjau jika itu diperlukan, tetapi hanya mendorong alur kerja pemantauan rutin Anda hal-hal yang benar-benar akan Anda lakukan ketika muncul. Jika Anda mengatur fail2ban untuk memblokir host setelah beberapa upaya koneksi gagal, kemungkinan Anda cukup baik untuk tidak perlu memeriksanya secara manual, dan dapat membatalkannya dari pemberitahuan pemantauan. Jika pengguna yang sah mengeluh tentang kehilangan akses, cukup tarik log lengkap dan lihatlah.

sebuah CVn
sumber
Menghargai umpan balik yang luas, saya kira saya tidak pernah berpikir keduanya memiliki fungsi yang sepenuhnya terpisah.
kingmilo
4

Saya memecahkan pertanyaan yang sama beberapa tahun yang lalu. Saya memutuskan untuk menggunakan iptables dengan modul terbaru karena kinerja dan pengaturan yang mudah. Saya harus melindungi banyak kontainer virtual di host. Ingatlah untuk tidak membuka vektor DOS apa pun dengan aturan Anda. Juga gunakan ipset untuk mencocokkan daftar jaringan atau daftar ip dalam aturan. Saya menggunakannya untuk daftar putih. Semua jaringan dari satu negara dalam satu daftar sangat bagus untuk penyempurnaan. Dan sangat mudah untuk melindungi layanan lain dengan aturan yang sama hanya dengan menambahkan satu port lagi yang cocok. Jadi saya tidak suka berganti dengan fail2ban tapi mungkin seseorang dengan kebutuhan lain akan senang dengan fail2ban.

Berikut ini beberapa contohnya:

  #
  # SSH tracking sample
  #
  #################################################################################
  iptables -X IN_SSH
  iptables -N IN_SSH
  iptables -A IN_SSH -m set --match-set net_blacklist src -p tcp -j REJECT
  iptables -A IN_SSH -m set --match-set net_whitelist src -p tcp --match limit --limit 5/second -j LOG --log-prefix whitelist_de_prefix
  iptables -A IN_SSH -m set --match-set net_whitelist src -p tcp -j ACCEPT
  # filter update
  iptables -A IN_SSH -m recent --name sshbf --set --rsource
  # connlimit
  iptables -A IN_SSH -m connlimit --connlimit-above 4 --match limit --limit 5/second -j LOG --log-prefix ssh_connlimit_per_ip_above_4
  iptables -A IN_SSH -m connlimit --connlimit-above 4 -j REJECT
  # filter
  iptables -A IN_SSH -m recent --name sshbf --rttl --rcheck --hitcount 13 --seconds 60 --match limit --limit 5/second -j LOG --log-prefix ssh_filtered_13in60sec
  iptables -A IN_SSH -m recent --name sshbf --rttl --rcheck --hitcount 13 --seconds 60 -j REJECT
  iptables -A IN_SSH -j ACCEPT

iptables -A FORWARD -p tcp --dport ssh --syn --jump IN_SSH
# iptables -A INPUT -p tcp --dport ssh --syn --jump IN_SSH

Output dari pesan logging Anda dapat digabungkan dengan fail2ban. Anda dapat menggunakannya untuk aturan INPUT juga.

Rainer
sumber