Mengunci server dan memasang WAF di depan aplikasi Anda
Sejak deploy pertama,
erpc worker hanya mengizinkan SSH masuk dari alamat Anda dan men-drop semua koneksi masuk lainnya. Tabel [waf] memasang proxy penyaring di depan API Anda.Halaman ini menjelaskan ERPC CLI
v0.1.0-rc.4, versi pra-rilis.Firewall
Deploy mengatur firewall server sebelum aplikasi dijalankan untuk pertama kalinya:
- SSH hanya dari
firewall.ssh_allowdan dari alamat asal deploy; - semua koneksi masuk lainnya di-drop, kecuali
run.portdarifirewall.app_allow; untuk aplikasi di belakang WAF, port WAF menggantikannya, dan hanya jika WAF di server sudah menjalankan aturan yang sekarang dibuat oleh[waf](di bawah).
Setiap perubahan berjalan di bawah timer rollback 120 detik dan hanya dipertahankan setelah koneksi baru berhasil masuk, sehingga perubahan yang keliru tidak dapat mengunci Anda di luar.
Namun, allowlist bertahan lebih lama daripada alamat yang menjadi asalnya: jika alamat rumah Anda berubah, jalan untuk masuk kembali adalah lewat tim dukungan ERPC untuk server ERPC, atau konsol penyedia untuk server milik Anda sendiri. Simpan alamat kedua yang dapat Anda pakai untuk menjangkau server (kantor, exit VPN) di
firewall.ssh_allow sebelum Anda mengandalkan alamat rumah.Jika alamat Anda berubah, tambahkan setiap alamat tetap yang dipakai admin Anda:
bash
Pasang WAF di depan aplikasi Anda
Tambahkan satu tabel ke
erpc.toml:toml
Setelah itu
erpc worker deploy menjalankan HTTP reverse proxy di server, dalam unit systemd tersendiri (erpc-waf-<app>-<env>): user dinamis tanpa hak istimewa, tanpa kunci, tanpa secret, dan tanpa apa pun milik worker, dibatasi 1 GiB memori. Proxy ini mendengarkan di waf.port, membaca setiap request sebelum aplikasi membacanya, menolak apa yang disebut oleh aturannya, dan meneruskan sisanya ke aplikasi di 127.0.0.1:<run.port>.-
Aplikasi tetap di loopback. Port miliknya sendiri tidak pernah dibuka dari luar.
erpc worker apidan health check menjangkau aplikasi di loopback, tanpa melalui WAF. -
Siapa yang boleh terhubung tetap ditentukan oleh daftar firewall, dan port WAF adalah satu-satunya tempat daftar itu boleh menyebut semua orang:shJika tidak ada yang tercantum, WAF mendengarkan dan tidak ada yang diizinkan masuk, dan deploy memberitahukannya.
-
Port dibuka setelah WAF mendengarkan di port itu, tidak pernah sebelumnya. Deploy yang WAF-nya tidak berjalan akan gagal dan menyebutkan alasannya, sementara aplikasi tetap berjalan.
-
Saat Anda mengubah
[waf], port tidak dibuka untuk siapa pun yang baru sampai sebuah deploy memasang aturan yang baru. -
Menghapus
[waf]darierpc.tomllalu men-deploy akan menghapus WAF dari server.
Pengaturan WAF
Hanya
port yang wajib. Setiap key, beserta nilai default-nya:toml
rate, max_connections_per_address, ban, dan new_connections dimatikan dengan false (ban = false), dan key yang tidak ditulis memakai nilai default-nya. erpc worker check menjelaskan apa yang akan dilakukan tabel [waf], dan apa yang salah di dalamnya, sebelum deploy apa pun.Yang dilakukan WAF tanpa perlu pengaturan
- Request yang tidak terbaca sebagai satu request HTTP/1 yang tidak ambigu mendapat 400, begitu juga path yang tidak dalam bentuk normal.
- Request untuk mengganti protokol (
Upgrade) mendapat 501. - Setiap penolakan dihitung untuk ban, dan setiap penolakan mengakhiri koneksinya.
- Satu alamat adalah satu alamat IPv4, atau satu
/64IPv6. - WAF tidak meneruskan header milik koneksi antara client dan proxy (
Connectiondan header yang disebutnya,Keep-Alive,Proxy-Authenticate,Proxy-Authorization,Proxy-Connection,TE,Trailer),Expect, header yang namanya mengandung garis bawah, maupunForwarded,X-Real-IP, danX-Forwarded-Protomilik client sendiri. WAF mengisiX-Real-IPdengan alamat asal koneksi dan menambahkan alamat itu ke akhirX-Forwarded-For; hanya entri terakhirX-Forwarded-Foryang berasal dari proxy.
Melihat apa yang dilakukan WAF
Request yang diteruskan tidak meninggalkan baris log, dan header atau body tidak pernah dicatat dalam log; query dari request yang diblokir dicatat, sejauh 200 byte itu menjangkaunya. Apa yang dikirim client tidak dapat menulis di terminal Anda: WAF menulis journal-nya sebagai ASCII yang dapat dicetak.
Yang tidak dilakukan WAF
- Tanpa TLS. WAF memakai HTTP/1.1 biasa di port-nya.
- Tanpa HTTP/2: WAF menjawabnya dengan 400.
- Tanpa WebSocket, maupun
Upgradelainnya: 501. - Tidak memeriksa isi body. Body diukur, tidak pernah dibaca. Daftar probe itu pendek dan merupakan penyaring gangguan, bukan jaminan: aplikasi tetap memeriksa input-nya.
- Tanpa autentikasi. Siapa yang boleh memanggil aplikasi adalah keputusan aplikasi, dan daftar firewall.
- Satu alamat adalah satu client. Client di belakang satu NAT, proxy, atau CDN berbagi satu rate dan satu ban; client dengan banyak alamat memiliki rate sebanyak alamatnya.
- Ban dan hitungan dilupakan saat WAF di-restart.
- WAF mengingat paling banyak 8192 alamat dan memegang paling banyak 1024 koneksi sekaligus.
- WAF hanya mendengarkan di IPv4, sehingga entri IPv6 di
app_allowbelum menjangkau apa pun. - Path dibandingkan sebagai byte hasil decode-nya. Aplikasi yang membaca path dengan lebih longgar (mengabaikan huruf besar-kecil, parameter
;, decode dua kali) dapat dijangkau lewat nama yang tidak dicakupdeny_paths.allow_pathstidak memiliki celah seperti itu: apa yang tidak tercantum tidak diteruskan. - Pembaca yang lambat dilayani sampai selesai. Client yang terus menerima jawaban, selambat apa pun, dilayani sampai selesai.
- Banjir request dapat memutus upload besar. WAF berjalan di satu thread, sehingga banjir request dapat memutus upload besar dengan 408. Aplikasi yang menerima body besar menaikkan
body_timeout_secsbersama denganmax_body_bytes.
Panduan worker memuat setiap aturan, termasuk kapan perubahan pada
app_allow ditahan sampai deploy berikutnya.





