Panduan gratis SSem SecuMon
Mulai dari satu server pribadi · per Oktober 2026
Segera hadirPaket instalasi sedang dipersiapkan.
Panduan ini lebih dulu memuat persiapan, urutan instalasi, dan hal yang perlu diketahui saat mengoperasikannya. Begitu distribusi dimulai, alamat unduhannya akan dicantumkan di sini.
1. Persiapan
| Apa | Syarat |
|---|---|
| Server yang dilindungi | Linux (systemd) + fail2ban · nftables · sqlite3. amd64 atau arm64. Sudah diuji di Ubuntu 22.04 · CentOS 8. |
| Server konsol | 1 server. JDK 21 · Tomcat 11 · PostgreSQL 17. Paling mudah dijalankan dengan Docker. |
| Jaringan | Server-server harus bisa mengakses alamat konsol lewat HTTPS. Tidak perlu port masuk ke server. Konsol sebaiknya ditempatkan di balik VPN atau jaringan internal. |
| Jam | Sinkronkan jam semua server dan konsol dengan NTP. Jika waktu tanda tangan meleset lebih dari 60 detik, permintaan ditolak. |
| Sertifikat | Sertifikat HTTPS untuk konsol (mis. Let's Encrypt). Cookie login hanya dikirim lewat HTTPS, jadi Anda tidak bisa login lewat HTTP biasa. |
Pasang paket-paket ini terlebih dahulu di setiap server yang dilindungi.
# Debian · Ubuntu apt-get update && apt-get install -y fail2ban nftables sqlite3 # RHEL · Rocky · CentOS dnf install -y epel-release && dnf install -y fail2ban nftables sqlite systemctl enable --now fail2ban
2. Aktifkan ban eksponensial fail2ban
Atur agar IP yang sama diblokir makin lama setiap kali kembali. SecuMon memakai pengali ini untuk menghitung “level saat ini” dan “berapa lama blokir berikutnya”.
# /etc/fail2ban/jail.local [DEFAULT] bantime = 1h findtime = 10m maxretry = 5 bantime.increment = true bantime.multipliers = 1 2 4 8 16 32 64 168 bantime.maxtime = 168h ignoreip = 127.0.0.1/8 ::1 <rentang VPN Anda> # /etc/fail2ban/fail2ban.local — simpan riwayat residivis 60 hari (bawaan 1 hari: sehari kemudian dianggap pelanggar baru lagi) [DEFINITION] dbpurgeage = 60d
Dengan pengaturan di atas, durasi ban menjadi seperti berikut. fail2ban menambahkan sedikit waktu acak, jadi nilai sebenarnya sedikit berbeda.
| Ban kumulatif | 1 kali | 2 kali | 3 kali | 4 kali | 5 kali | 6 kali | 7 kali | 8 kali atau lebih |
|---|---|---|---|---|---|---|---|---|
| Durasi ban | 1 jam | 2 jam | 4 jam | 8 jam | 16 jam | 32 jam | 64 jam | 7 hari |
Pastikan jalur akses Anda (mis. rentang VPN) dimasukkan ke ignoreip. Ini mencegah Anda terkena ban di server sendiri hanya karena beberapa kali salah memasukkan kata sandi.
3. Instalasi konsol
3-1. File rahasia
Nilai rahasia tidak ditulis di kode atau variabel lingkungan, melainkan disimpan sebagai file dalam satu folder. Kontainer konsol memasang folder ini di /App/secrets sebagai hanya-baca.
mkdir -p /srv/secumon/secrets/tls && chmod 700 /srv/secumon cd /srv/secumon/secrets openssl rand -hex 24 > db_password openssl rand -base64 18 > admin_password # Kata sandi login pertama (nama akun admin) openssl genpkey -algorithm ed25519 -out console_ed25519.key openssl pkey -in console_ed25519.key -pubout -out console_ed25519.key.pub # File dibuat 644 agar bisa dibaca akun kontainer — perlindungan ditangani folder induk 700 chmod 644 db_password admin_password console_ed25519.key console_ed25519.key.pub
| File | Kegunaan | Jika tidak ada |
|---|---|---|
db_password | Akses basis data | Konsol tidak bisa berjalan |
admin_password | Kata sandi akun administrator pertama admin | Akun tidak dibuat sehingga tidak bisa login |
console_ed25519.key · .pub | Tanda tangan perintah | Hanya bisa melihat, tidak bisa melakukan penegakan |
abuseipdb.key | Kunci API AbuseIPDB (opsional) | Laporan · cek reputasi tidak bisa dipakai |
telegram.env | Notifikasi Telegram (opsional) | Notifikasi tidak terkirim |
tls/cert.pem · chain.pem · privkey.pem | Sertifikat HTTPS konsol | Tidak bisa dibuka lewat HTTPS |
Hanya dengan console_ed25519.key, perintah yang sah untuk semua server bisa ditandatangani. Jangan simpan file ini di repositori · drive bersama; simpan secara terpisah.
3-2. Basis data
Port DB tidak dibuka ke luar. Konsol mengaksesnya dengan nama kontainer di dalam jaringan Docker yang sama.
docker network create secumon-net docker run -d --name secumon-db --network secumon-net --restart unless-stopped \ -e POSTGRES_DB=secumon -e POSTGRES_USER=secumon \ -e POSTGRES_PASSWORD_FILE=/run/secrets/db_password \ -v /srv/secumon/secrets/db_password:/run/secrets/db_password:ro \ -v secumon_pgdata:/var/lib/postgresql/data \ postgres:17
Tabel dan data dasar dibuat sendiri oleh konsol saat pertama kali berjalan. Tidak perlu memasukkan skema secara terpisah dengan psql.
3-3. Pengaturan konsol
Konsol adalah aplikasi web yang berjalan di atas Tomcat 11. Cara menjalankannya akan diumumkan bersama paket distribusi; di sini kami rangkum dulu variabel lingkungan yang perlu ditetapkan.
| Variabel lingkungan | Nilai bawaan | Arti |
|---|---|---|
F2B_DB_URL | jdbc:postgresql://…:5432/secumon | Alamat DB. Tulis dengan nama kontainer. |
F2B_CANONICAL_HOST | Wajib diisi nilai Anda | Domain konsol Anda. Akses lewat HTTP biasa atau alamat lain dialihkan ke HTTPS alamat ini. |
F2B_PROTECTED_CIDRS | Wajib diisi nilai Anda | Rentang yang tidak akan pernah diblokir — VPN Anda · jaringan internal · IP publik server. Jaringan privat · loopback selalu dilindungi, terlepas dari nilai ini. |
F2B_BLOCK_TTL_DAYS | 30 | Durasi bawaan blokir rentang IP (hari). 0 berarti permanen. |
F2B_AUTO_BLOCK_ENABLED | true | Mengaktifkan atau menonaktifkan blokir otomatis IP residivis. |
F2B_AUTO_BLOCK_THRESHOLD | 3 | Mulai ban keberapa blokir otomatis diterapkan. |
F2B_AUTO_BLOCK_TTL_DAYS | 30 | Durasi blokir otomatis (hari). |
F2B_FEED_REFRESH_HOURS | 24 | Interval mengunduh ulang daftar blokir publik · daftar negara (jam). |
F2B_BAN_MULTIPLIERS | 1 2 4 8 16 32 64 168 | Samakan persis dengan pengali di pengaturan jail. |
F2B_ABUSE_DAILY_LIMIT | 1000 | Batas pemakaian harian AbuseIPDB. |
Setelah berjalan, periksa statusnya. Jika muncul "db":"ok", berarti normal.
curl -s https://<alamat konsol>/api/health
4. Mendaftarkan server — agen
- Login ke konsol sebagai
admin, masukkan nama server di tab Target, lalu klik Daftarkan + terbitkan token. - Layar menampilkan ID target dan token sekali pakai. Token hanya ditampilkan sekali saat itu dan kedaluwarsa setelah 15 menit.
- Jalankan skrip instalasi sebagai root di server yang dilindungi.
# Di server yang dilindungi (root) tar xzf agent-amd64.tgz && cd agent ./install-agent.sh --console https://<alamat konsol> \ --target-id <ID target> --token <token sekali pakai> journalctl -u secumon-agent -f # Normal jika dalam 30 detik muncul baris seperti di bawah
Jika berjalan normal, akan muncul baris seperti ini secumon-agent: 2026/10/06 16:40:12 전송 완료 — jail 2개, 밴 5건
Inilah semua yang dilakukan skrip instalasi. Port firewall tidak dibuka.
- Membuat akun khusus
f2bagentyang tidak bisa dipakai login — agen tidak berjalan sebagai root. - Hanya mengizinkan satu wrapper berhak root,
/usr/local/sbin/f2b-agent-exec, lewat sudo. - Membuat kunci tanda tangan agen di server itu sendiri. Kunci privat tidak pernah keluar ke jaringan.
- Setelah mendaftar ke konsol, agen dijalankan terus-menerus sebagai layanan
secumon-agent.
Jangan memakai nama host yang mengandung garis bawah (_) untuk alamat konsol. Tomcat 11 menolaknya karena melanggar standar. Periksa dulu dengan getent hosts <domain konsol> apakah server bisa me-resolve domain konsol.
Jika pendaftaran sudah selesai tetapi langkah sesudahnya gagal, perbaiki penyebabnya lalu jalankan perintah yang sama persis sekali lagi. Agen yang sudah terdaftar tidak memakai token lagi.
Untuk melepas server, klik Nonaktifkan di konsol (permintaan dari agen tersebut langsung ditolak), lalu jalankan systemctl disable --now secumon-agent di server.
5. Membaca tampilan
- Dasbor — ban aktif · ban kumulatif · IP residivis · tren semua server. Jika “terakhir diterima” pada kartu server jauh melewati 30 detik, periksa agen di server itu.
- Daftar ban — IP yang sedang diblokir, beserta level residivis · sisa waktu · negara. Negara dicari dari tabel bawaan di konsol.
- Detail IP — server tempat IP itu terkena ban, riwayat ban, perkiraan durasi ban berikutnya, reputasi AbuseIPDB.
“Ban aktif” dibaca dari daftar yang benar-benar sedang diblokir fail2ban, sedangkan “jumlah residivis” dibaca terpisah dari catatan ban fail2ban. Karena itu, ban yang sudah dicabut tidak keliru tampil sebagai ban aktif.
6. Ban · unban · blokir rentang IP
- Ban · unban bisa dilakukan oleh operator ke atas. Ban bisa untuk IP apa saja, dan jika jail tidak dipilih, dipakai
sshd. - Blokir rentang IP hanya bisa dilakukan administrator. Perintah baru dijalankan setelah Anda mengetik ulang rentang yang akan diblokir, dan rentang yang lebih luas dari IPv4 /16 · IPv6 /48 ditolak. Secara bawaan dicabut otomatis setelah 30 hari.
- Anda bisa memblokir banyak rentang × banyak server sekaligus. Semuanya harus lolos pemeriksaan sebelum satu pun diterbitkan — karena kondisi setengah terblokir adalah yang paling berbahaya.
- Perintah hanya dijalankan jika agen di server mengambilnya dalam 60 detik. Hasilnya bisa dilihat di riwayat perintah pada tab Penegakan sebagai selesai · gagal · kedaluwarsa.
Jika salah memblokir, cabut lewat Penegakan → Buka blokir di konsol. Jika begitu mendesak sampai Anda tidak bisa masuk ke konsol, hapus langsung di server tersebut.
# Satu rentang saja nft delete element inet f2b_console blocklist4 '{ 203.0.113.0/24 }' # Semua blokir yang dimasukkan SecuMon (aturan fail2ban ada di tabel lain, jadi tetap utuh) nft delete table inet f2b_console
7. Blokir otomatis
Blokir otomatis IP residivis
Setiap 5 menit, IP yang sudah terkena ban 3 kali atau lebih secara kumulatif dipilih lalu diblokir 30 hari di semua server. Ini satu-satunya fitur yang mengubah firewall tanpa persetujuan manusia, jadi diberi beberapa lapis pengaman.
- Yang diblokir hanya IP tunggal (
/32·/128), bukan rentang. - Rentang terlindungi dilewati. Maksimal 20 entri diterbitkan sekaligus.
- IP yang sama tidak dieskalasi dua kali, dan semuanya dicatat di log audit serta dikirim ke Telegram.
Untuk menonaktifkan, beri konsol F2B_AUTO_BLOCK_ENABLED=false lalu jalankan ulang. IP yang salah terblokir harus dicabut dulu lewat Buka blokir, lalu catatan eskalasinya dihapus agar nanti dinilai ulang.
docker exec secumon-db psql -U secumon -d secumon -c "DELETE FROM auto_block WHERE ip = '<IP>'"
Daftar blokir publik
Aktifkan di tab Feed blokir. Awalnya keduanya nonaktif.
- Spamhaus DROP — rentang yang dibajak atau hanya dipakai untuk kejahatan. Tidak mungkin ada lalu lintas normal dari sana, jadi hampir tidak ada risiko salah blokir.
- FireHOL level1 — alamat yang tidak dipakai dan rentang berbahaya yang sudah terkonfirmasi. Daftar ini juga berisi jaringan privat, jadi konsol menyaring entri yang tumpang tindih dengan rentang terlindungi sebelum mengirimnya.
Daftar diunduh ulang sekali sehari; jika isinya tidak berubah, tidak dikirim ulang ke server. Rentang yang keluar dari daftar otomatis dicabut pada pembaruan berikutnya.
8. Blokir negara — sebelum mengaktifkan
Layanan yang harus bisa diakses dari seluruh dunia tidak bisa diblokir per negara.
- Server DNS otoritatif — resolver di seluruh dunia harus bisa masuk agar domain Anda bisa di-resolve. SecuMon selalu mengizinkan port 53.
- Penerimaan email (25) · VPN — jika diblokir, email terputus dan Anda sendiri tidak bisa masuk ke server dari luar negeri. Jangan aktifkan blokir negara di server seperti ini.
- Bot mesin pencari — jika memblokir negara besar, bot pencari ikut terblokir dan situs web Anda bisa hilang dari hasil pencarian.
Saat Anda memilih negara di tab Blokir negara, jumlah rentangnya ditampilkan lebih dulu. Begitu diterapkan, daftar langsung diunduh dan masuk ke semua server dalam 30 detik; saat dinonaktifkan, daftar negara itu dihapus. Negara besar bisa memiliki puluhan ribu rentang.
Negara asal banyak serangan pun sering kali sebenarnya hanya beberapa rentang atau server sewaan di negara itu. Jika diblokir, penyerang pindah ke server di negara lain. Anggap blokir negara sebagai sarana pendukung yang dipakai bersama daftar blokir publik dan blokir otomatis residivis.
SecuMon mengizinkan balasan koneksi yang sudah terjalin di posisi paling depan aturan firewall. Tanpa aturan ini, balasan untuk koneksi keluar dari server Anda ke layanan di negara itu (mirror paket · API notifikasi · penerbitan sertifikat) juga ikut terblokir.
9. AbuseIPDB · Telegram
AbuseIPDB
Fitur ini aktif jika abuseipdb.key diletakkan di folder rahasia. Kunci hanya ada di server konsol dan tidak pernah keluar ke layar · DB · server mana pun.
- Hanya IP yang sedang terkena ban atau terkena ban dalam 30 hari terakhir yang bisa dilaporkan — IP sembarang tidak bisa dilaporkan.
- IP yang sama tidak dilaporkan ulang dalam 15 menit. Batas harian dihitung sendiri oleh konsol.
- Kategori ditentukan dari nama jail — ssh → 18 · 22, web (apache · nginx) → 18 · 21, email → 18 · 11, lainnya → 18.
Telegram
# /srv/secumon/secrets/telegram.env
TELEGRAM_TOKEN=<token bot>
TELEGRAM_CHAT_ID=<ID chat>
Memberi tahu blokir otomatis residivis dan perubahan daftar publik. Daftar lengkapnya dilampirkan sebagai file. Jika tidak ada perubahan, tidak ada notifikasi — kalau setiap hari datang pesan “tidak ada perubahan”, notifikasi yang benar-benar penting malah terlewat.
10. Akun · autentikasi dua faktor
| Peran | Yang bisa dilakukan |
|---|---|
VIEWER hanya-lihat | Melihat dasbor · daftar ban · detail IP · riwayat perintah |
OPERATOR operator | + ban · unban · laporan AbuseIPDB dan cek reputasi |
ADMIN administrator | + blokir rentang IP · pendaftaran server · feed blokir · blokir negara · pengguna · log audit |
- Login pertama memakai
admindan kata sandi dari fileadmin_password. Setelah login, ganti kata sandi di Akun saya. - Di Akun saya → Autentikasi dua faktor, pindai kode QR dengan aplikasi autentikator atau masukkan kodenya secara manual. Kode yang sama tidak bisa dipakai dua kali.
- Jika kata sandi salah 5 kali, akun dikunci 15 menit, dan satu IP hanya bisa mencoba hingga 10 kali per menit. Jika tidak ada aktivitas selama 30 menit, Anda otomatis logout.
Jika aplikasi autentikator hilang, autentikasi dua faktor tidak bisa direset dari layar. Orang yang memiliki akses ke server konsol harus meresetnya langsung di DB.
docker exec secumon-db psql -U secumon -d secumon -c \ "UPDATE app_user SET totp_enabled=false, totp_secret=NULL, totp_last_counter=0 WHERE username='admin';"
11. Cadangan · pengelolaan kunci
# Basis data — kata sandi tersimpan sebagai hash, token pendaftaran juga hanya sebagai hash docker exec secumon-db pg_dump -U secumon secumon | gzip > secumon-$(date +%F).sql.gz # Folder rahasia — inilah rahasia yang sebenarnya. Simpan di tempat berbeda dari cadangan DB tar czf secumon-secrets-$(date +%F).tgz -C /srv/secumon secrets
- Jika kunci tanda tangan konsol diganti, semua agen menolak perintah. Jika sudah terlanjur diganti, daftarkan ulang setiap server dengan urutan: nonaktifkan → terbitkan ulang token → hapus
/etc/secumon/agent.json·agent_ed25519.keydi server → instal ulang. - Yang perlu diperiksa secara rutin: setiap hari, status server dan perintah yang gagal; setiap minggu, catatan penolakan di log audit dan akun yang belum mengaktifkan autentikasi dua faktor.
12. Pemecahan masalah
Pesan dari agen dan konsol dicetak dalam bahasa Korea. Cari di log teks persis yang ditampilkan dengan format kode pada tabel di bawah.
| Gejala | Penyebab | Tindakan |
|---|---|---|
Log agen 등록되지 않았거나 비활성 상태인 타겟 | Server dinonaktifkan di konsol | Terbitkan ulang token lalu daftar ulang |
Log agen 요청 시각 편차가 허용치를 넘습니다 | Jam server meleset lebih dari 60 detik | Sinkronkan jam dengan NTP |
Log agen 이미 사용된 nonce | Permintaan yang sama masuk lagi | Ini pertahanan yang normal. Jika terus terjadi, curigai pengiriman ganda di jaringan |
Hasil perintah 거부: 만료된 명령 | Agen tidak mengambilnya dalam 60 detik | Periksa status secumon-agent di server lalu jalankan ulang |
Hasil perintah 거부: 서명이 유효하지 않음 | Kunci tanda tangan konsol diganti tanpa pendaftaran ulang | Daftar ulang mengikuti urutan di bab 11 |
| “Terakhir diterima” di kartu server berhenti · log terputus | Agen macet | systemctl restart secumon-agent |
| Blokir negara sudah diaktifkan, tetapi tidak diterapkan di server | Baris ini tidak ada di log agen: 국가 차단 적용 | Pastikan agen versi terbaru dan periksa pesan error di log |
| Terus-menerus ter-logout | Mengakses lewat alamat yang bukan HTTPS | Akses lewat alamat HTTPS konsol |
Pertanyaan lain? Kirimkan ke halo@levelupsoft.com.
fail2ban · nftables · AbuseIPDB · Spamhaus · FireHOL · Telegram · Let's Encrypt adalah milik pemiliknya masing-masing; SSem SecuMon tidak berafiliasi dengan maupun didukung oleh mereka.