Layanan anti-spam yang ditulis sendiri Gotoh, atau cara kami memperjuangkan putihnya alamat IP

Sistem antispam di Selectel sebelum solusi yang ditulis sendiri



Halo, Habr! Saya Sasha Fedoseev, pengembang Python junior di Selectel. Beberapa tahun yang lalu, ketika perusahaan kami mulai berkembang sangat pesat, kami menghadapi masalah. Segala macam pelaku spam yang tidak bermoral dari negara-negara panas mulai tertarik pada sumber daya kami . Kami memiliki konfigurasi mesin virtual yang cukup anggaran, dan apa lagi yang mereka butuhkan untuk bahagia.



Mengapa kami memutuskan untuk melawan mereka? Nah, mail dikirim dari akun, apa salahnya dengan itu ... Namun, dari sudut pandang penyedia cloud, ada alasan mengapa masih layak menghentikan "penggandaan" spammer.



Mengapa melawan spammer



Mereka merusak IP putih



Untuk mengirim beberapa jenis email ke luar, mesin virtual harus memiliki alamat IP. "IP" putih adalah sumber daya yang agak terbatas, jadi penting bagi kami untuk memahami bahwa IP tersebut ditempati oleh pengguna yang layak, bukan pengirim spam. Yang terakhir memprovokasi larangan IP pada bagian dari layanan email besar: "alamat IP" masuk daftar hitam, dan kami bahkan tidak selalu dapat memahami ini. Hanya ketika kami mentransfer IP seperti itu ke klien lain yang perlu mengirim email, dan pada akhirnya dia tidak dapat melakukan ini. Menghapus IP dari larangan adalah proses yang agak sulit, jadi lebih baik tidak melakukannya.



Efek Tetangga Bising



Tidak jarang pengirim spam menggunakan banyak mesin spam. Dan pengguna yang kurang beruntung berada di host virtualisasi yang sama bisa terluka. Itu tidak menyenangkan.



Menggunakan alamat IP dan waktu CPU



Mengapa Selectel membutuhkan klien seperti itu, jika di tempat mereka ada pengguna yang baik yang tertarik dengan kualitas layanan kami dan menggunakan kekuatan mereka untuk mengembangkan bisnis mereka?



Masalah reputasi



Tidak ada penyedia yang akan menyukainya jika mereka mengatakan tentang dia bahwa dia telah menceraikan pelaku spam dan dia memperdagangkannya.



Seperti sebelumnya



Sejak awal, antispam bersifat manual: masalah ditangani oleh staf dukungan teknis, yang menganalisis setiap insiden. Dukungan teknis memikul semua beban ini dengan sendirinya. Selain itu, administrator secara berkala meninjau pendaftaran untuk memastikan bahwa 10 akun tidak didaftarkan oleh pelaku spam dan ini hanya kebetulan: 10 pengguna berbeda terdaftar pada waktu yang sama.



Jelas bahwa sistem seperti itu agak tidak efektif. Pertama, ada penundaan yang sangat lama antara mengidentifikasi pelaku spam dan melarang mereka. Kedua, karyawan technical support dapat menggunakan waktu kerja mereka dengan lebih efisien. Jadi kami mulai mencari opsi lain.



Solusi yang mungkin untuk masalah tersebut



Pendaftaran dengan dokumen



Ini akan menakut-nakuti pengirim spam, tetapi membuat orientasi jauh lebih sulit bagi klien yang terhormat. Selain itu, staf pendukung harus melalui setiap pendaftaran. Sepertinya itu bukan pekerjaan yang paling menyenangkan. Dan keberadaan file jpg tidak menjamin keberadaan dokumen yang sebenarnya.



Intinya: kami memutuskan untuk tidak mengatur "kertas, tolong" dan menolak opsi ini.



Tutup kemampuan mengirim email untuk klien



Dimungkinkan untuk memperingatkan semua pelanggan bahwa kami sama sekali tidak mendukung pengiriman email dari word. Tapi, mungkin itu aneh. Pengguna yang tidak mengirim spam akan kehilangan fitur standar dan familiar mereka. Mereka bahkan tidak dapat mempertahankan korespondensi pos yang berfungsi dan pasti akan sedih karena ini.



Intinya: kami tidak ingin menghalangi klien dari beberapa kemampuan yang jelas diperlukan dan memaksa mereka untuk mencari solusi "di samping".



Buat Gateway untuk Mengirim Email



Secara umum, Mail Gateway adalah server yang dilalui semua email. Dia mampu menganalisis email dan membuat keputusan apakah surat ini atau itu adalah spam. Dalam kasus penyedia infrastruktur seperti Selectel, akan tepat untuk membingkainya sebagai layanan. Tetapi solusi seperti itu membutuhkan tim pengembangan yang terpisah, dukungan dan pengembangan yang konstan.



Intinya: pembuatan layanan semacam itu tidak ada dalam rencana perusahaan pada saat keputusan dibuat.



Gunakan layanan pihak ketiga



Kami juga mempertimbangkan opsi ini, tetapi menemukan lebih dari satu argumen yang menentangnya. Pertama, integrasi dengan layanan pihak ketiga adalah tugas teknis yang tidak sepele. Kedua, kita akan menempatkan diri kita dalam situasi di mana kita bergantung pada beberapa jenis layanan eksternal. Akhirnya, ini akan menaikkan label harga untuk layanan kami, karena kami harus memperhitungkan biaya layanan eksternal. Dan saya tidak ingin melakukan ini, tentu saja.



Intinya: penggunaan layanan eksternal dapat memengaruhi biaya layanan kami, tetapi kami tidak dapat melakukannya.



Secara umum, kami menolak semua opsi di atas, jadi kami memutuskan untuk membuat sistem antispam kami sendiri.



50 warna dari spammer



Jika kami ingin mengidentifikasi pelaku spam secara mandiri di antara pengguna, kami perlu menentukan dengan kriteria apa untuk melakukan ini.



Perlu memperhatikan karakteristik perilaku pengguna dan menganalisis lalu lintas:



tanggal pendaftaran akun. Jika itu didaftarkan 5 menit yang lalu, dan sudah masuk ke bidang pandang antispam, kemungkinan besar akun itu dibuat secara eksklusif untuk tujuan spam.



nama surat. Kita semua memanggil alamat pos sehingga namanya memiliki arti (nama perusahaan atau nama belakang pengirim). Jika namanya tidak jelas dan terlihat mencurigakan, ini adalah argumen yang cukup kuat untuk mendukung pelarangan tersebut.



alat pembayaran.Jika itu adalah kartu sekali pakai atau PayPal, maka akun seperti itu juga mencurigakan.



geolokasi alamat IP selama pendaftaran. Mayoritas klien Selectel berasal dari Rusia dan negara-negara CIS. Jika pengguna lain telah terdaftar di Brasil atau Maroko yang cerah (negara-negara ini biasanya merupakan pengirim spam paling banyak), hal ini memprihatinkan. Anda juga dapat memeriksa kode negara dan nomor telepon terhadap informasi yang diperoleh dari geolokasi alamat IP.



nama pengguna. Jika nama pengguna terlihat seperti dia mengusap jari secara acak ke keyboard, itu mencurigakan, setuju.



Saya akan menambahkan bahwa kami segera menghentikan analisis lalu lintas di tingkat L7. Bagaimanapun, ini berarti bahwa kita perlu membuka setiap email dan "membaca" apa yang ada di dalamnya. Pendekatan seperti itu, mungkin, dapat dilakukan oleh perusahaan besar dan berpengaruh seperti Google, menyiapkan analisis semantik konten surat dan menerapkan NDA dan pengacara. Tapi opsi ini tidak cocok untuk kita.



Tetapi sudah mungkin untuk bekerja dengan informasi di tingkat L4: itu impersonal dan diekspresikan dalam beberapa metrik. Di sini kita dapat melihat jumlah alamat tujuan pengiriman surat dari alamat IP kita, dan ukuran informasi yang dikirimkan . Adalah logis bahwa pelaku spam biasanya memiliki basis data alamat yang sangat besar yang mereka kirimi surat.



Akibatnya, kami memutuskan bahwa kerumitan dari semua kriteria ini cukup untuk membuat keputusan yang cukup beralasan apakah pelaku spam ada di depan kami atau tidak.



Konsep solusi



Peringkat akun



Kami memutuskan untuk mengotomatiskan proses penilaian pengguna berdasarkan kriteria yang terdaftar - menurut model peringkat, semacam "indeks kepercayaan". Kami tidak membaca email, tetapi kami menimbang amplop dan menganalisis metrik lalu lintas publik yang keluar dari cloud.



Bagaimana itu bekerja. Sejak awal, ketika pengguna mendaftar, dia diberi peringkat tertinggi yang mungkin sama dengan 100 poin. Awalnya, kami mempercayai semua orang dan yakin bahwa semua klien kami akan bekerja dengan normal dan tidak mengirim spam.





Kemudian pengguna menjalani serangkaian pemeriksaan. Setiap pemeriksaan yang gagal akan tercermin dalam peringkat akhir pengguna dalam bentuk penalti. Kami menetapkan ukurannya berdasarkan pengalaman kami dengan pelaku spam.



Pertama-tama, kami biasanya memperhatikan geolokasi alamat IP: apakah sesuai dengan negara tempat sebagian besar pengirim spam berasal. Kami memiliki daftar negara seperti itu, yang kami isi ulang secara berkala. Kemudian kami "menjalankan" pengguna baru melalui sisa filter yang saya sebutkan di atas. Hasilnya, kami memiliki skor akhir akun, yang kami simpan untuk digunakan lebih lanjut dalam layanan antispam.



Timbang amplop dan lihat alamat IP



Peralatan jaringan kami mampu menyediakan metrik lalu lintas publik menggunakan protokol Netflow. Ini termasuk paket SMTP, byte SMTP, jumlah aliran SMTP, dan jumlah alamat IP untuk setiap alamat sumber. Kami akan mengumpulkan semua metrik ini di Netflow Collector. Yang terakhir akan memformatnya sedikit untuk penggunaan yang lebih nyaman, dan kemudian, dengan bantuan layanan tambahan yang disebut NetClick fetchers, mereka akan masuk ke Clickhouse untuk digunakan lebih lanjut dalam anti-spam.





Goth



Pengembang Selectel memiliki tradisi kecil: kami menyebut layanan yang ditulis sendiri dengan nama karakter dari alam semesta Hunter x Hunter. Oleh karena itu namanya - untuk menghormati pahlawan manga Goto.



Antispam terdiri dari dua bagian dan ditulis dalam Go. Bagian pertama dari layanan ini disebut Gotoh-fetcher. Dia terlibat dalam mengambil data metrik lalu lintas yang disebutkan yang menjangkau kami melalui Netflow di beberapa pembaca Clickhouse. Data ini masuk ke inti pengambil Gotoh untuk diproses. Di sana mereka diformat ke dalam format yang lebih nyaman dan dikirim ke penulis Redis untuk penulisan lebih lanjut. Ini menyimpulkan pekerjaan Gotoh-fetcher.



Menimbang amplop dan melihat alamat



Selanjutnya, Gotoh-inspector, yang sesuai dengan namanya, mulai bekerja. Dia memainkan peran sebagai pembuat keputusan, hakim. Kemana perginya Gotoh-inspector? Ini mencari Redis untuk data yang diambilnya dari Gotoh-fetcher.



Setelah menerima data, "inspektur" kami mulai memeriksa. Pertama, ini akan melihat apakah batas untuk setiap metrik telah terlampaui. Jika tidak, maka verifikasi lebih lanjut tidak masuk akal - Gotoh-inspector mengecualikan bagian data ini dari pertimbangan.



Cara kerja Gotoh-inspector



Jika batas terlampaui untuk setidaknya satu metrik, pertama-tama kita akan melihat apakah klien memiliki tag tepercaya. Ini secara khusus diperkenalkan untuk memisahkan spammer dan pengguna yang mengirim email biasa, hanya dalam jumlah besar. Tag tepercaya pengguna hanya dapat muncul setelah berbicara dengan spesialis Selectel.



Kita harus memastikan bahwa kita berurusan dengan seseorang dari perusahaan sungguhan yang hanya mengirimkan surat bisnis biasa, ada banyak sekali. Jika ada tag tepercaya, kami menghasilkan insiden di Clickhouse dan tidak lagi mempertimbangkan bagian data ini. Tapi, jika klien tidak memiliki tag, kami melanjutkan "penyelidikan".



Kami melihat ratingnya, dan di sini kesenangan dimulai. Penilaian memiliki dua batasan. Yang pertama adalah batas kepercayaan. Jika, menurut hasil verifikasi, akun tersebut diberi peringkat yang baik, maka kami hanya akan mengirimkan insiden tersebut ke Clickhouse dan melupakannya. Secara umum, tidak ada lagi yang bisa dilakukan dengan pengguna dengan penilaian bagus.



Jika skornya kurang dari batas kepercayaan, maka kita lihat apakah itu jauh dari batas larangan. Dua batasan dibutuhkan untuk penilaian yang lebih adil. Jika skornya bagus, maka kami tidak akan melarang pengguna, tetapi jika rating menimbulkan pertanyaan, kami akan melihat jumlah insiden yang terkait dengan akun ini.



Jika akun termasuk dalam zona perantara, ketika peringkatnya kurang dari batas kepercayaan, tetapi lebih dari batas larangan, sistem akan mengirim peringatan ke obrolan ke petugas jaga. Mereka, pada gilirannya, akan memeriksa secara manual apakah spam dikirim dari akun atau mesin virtual.



Jika peringkatnya bahkan tidak mencapai batas larangan, maka semuanya cukup sederhana: akun tersebut diblokir, karena kami punya cukup alasan untuk percaya bahwa kami menghadapi pelanggar.



Hasil



Inilah cara kami membuat sistem antispam sederhana kami. Timbul pertanyaan: apakah sudah lebih baik?



Gambar di atas menunjukkan jumlah alert sejak diluncurkannya layanan ini pada awal tahun 2020. Jumlah peringatan di puncak lebih dari 60.000.



Dengan anti-spam manual, kami tidak dapat memproses informasi sebanyak itu - sejumlah besar data melewati kami. Dan sekarang entah bagaimana kami dapat bekerja dengan data ini, menganalisisnya.



Kami melihat jumlah total lansiran yang datang untuk keempat metrik lalu lintas yang kami analisis. Mari kita lihat grafik untuk setiap metrik.



Jumlah byte yang dikirim





Ini adalah metrik paling banyak dalam hal jumlah lansiran. Secara umum, grafik ini sangat mirip dengan yang sebelumnya, karena tanda ini hampir seluruhnya berbentuk gambar tanda spam. Di sini logikanya sederhana: semakin banyak email yang dikirim dari sebuah akun, semakin cepat ia masuk ke bidang pandang antispam dan semakin banyak peringatan yang akan dibuat untuknya.



Jumlah paket SMTP





Ada hubungan antara metrik ini dan yang sebelumnya. Tetapi mengapa kita menganalisis jumlah byte dan paket secara terpisah? Karena ada kasus ketika peringatan dibuat untuk akun dengan jumlah paket, tetapi tidak dengan jumlah byte. Misalnya, akun spam mengirimkan banyak surat kecil, yang masing-masing dikirim dalam paket terpisah - dalam hal ini, peringatan dibuat berdasarkan jumlah paket.



Jumlah alamat IP tujuan





Grafik ini tidak mudah dianalisis, tetapi dapat menjadi sumber informasi tambahan. Di setiap akun, spamming diatur secara berbeda: seseorang mengirim IP ke 10 atau 100 alamat berbeda, dan seseorang mengirim ke 10 alamat tetap dan tidak termasuk dalam bidang pandang antispam menurut metrik ini.



Jumlah aliran SMTP terbuka secara bersamaan





Metrik yang paling "tidak populer" - peringatan untuk itu jarang datang. Jika di ilustrasi sebelumnya ada ribuan dalam skala Y, ini dia ratusan. Di sini, tampaknya, spammer masih diasuransikan dan tidak mengirim email dari sejumlah besar koneksi terbuka. Meskipun sekilas grafik tidak mewakili, sebenarnya ini membantu untuk lebih memahami bagaimana spam dapat dikirim.



Kesimpulan



Tentunya, sistem ini dapat diperbaiki, dan kami berencana untuk memperbaikinya di masa mendatang. Tapi sekarang dia menunjukkan dirinya dengan cukup efektif dalam bekerja.



Misalnya, kami tidak pernah melarang pengguna terhormat. Dan jika ini benar-benar terjadi (yah, bagaimana jika seseorang memiliki proyek universitas yang terkait dengan milis), maka semuanya dapat dibatalkan. Jika Anda melihat bahwa akun Selectel Anda telah diblokir (alasan pemblokiran akan ditunjukkan di akun Anda), cukup tulis ke dukungan teknis. Kami akan melihat apa yang memengaruhi penurunan peringkat dan bagaimana Anda dapat menghindarinya di masa mendatang. Ini bukan larangan seumur hidup.



Saya juga berbicara tentang sistem antispam kami di Selectel DevTalks. Jika Anda ingin menonton ceramah, ini tautannya .






All Articles