Firewall dengan nftables bagian Ketiga
Bismillah,
Ini adalah lanjutan dari tulisan saya yang kedua tentang nftables.
Sebuah Firewall yang baik, memiliki 3 (tiga) kriteria utama, yaitu:
- Koneksi dibatasi hanya dari negara tertentu
- Mampu mencegah reverse telnet
- Mampu mencegah DDOS
Pada tulisan bagian ketiga ini, akan saya tampilkan contoh pembatasan koneksi hanya dari IP yang berasal dari Indonesia. Serangan terhadap webserver bisa datang dari negara mana saja, sehingga dengan membatasi koneksi/akses hanya dari IP Indonesia, telah mengurangi peluang server kita di rusak oleh pihak asing.
Daftar IP yang berasal dari Indonesia saya dapatkan dari website https://www.ipdeny.com/ yaitu file id.zone
Nah, inilah file /etc/nftables.conf nya.
Wah-wah, filenya panjang sekali ya…he…he… (senyum) yah itulah karena file ini menampung hasil data IP dari file id.zone ini.
Saya akan menjelaskan beberapa baris perintah yang saya anggap penting untuk di jelaskan, dan kalau di perlukan, silahkan merujuk pada tulisan saya bagian pertama dan kedua.
Pendefinisian IP yang berasal dari Indonesia
Chain input, rinciannya sebagai berikut:
Default Deny, blok semua koneksi masuk secara default
Terima Koneksi balasan yang berasal dari dalam
Izinkan localhost
Izinkan akses ke port 22 dan port 80 hanya dari IP yang berasal dari Indonesia.
Blok semua IP lainnya.
NFTables ini memiliki prinsip The first rule to match is the “winner”, yaitu perintah pertama yang sesuai, itu yang akan langsung di jalankan, sehingga kita tempatkan perintah drop pada bagian paling bawah, yang berarti semua yang tidak sesuai rule di atas nya akan di blok.
Kalau kita tempatkan perintah drop di atas, maka semua koneksi di blok dan NFTables tidak membaca lagi rule di bawah nya.
Dari Contoh Di atas, saat IP berasal dari Indonesia, maka akan sesuai dengan rule:
maka IP Indonesia di izinkan, sedangkan seluruh IP lain, tidak match dengan rule tersebut, sehingga terkena rule drop.
Untuk chain output, secara ringkas bahwa semua koneksi ke seluruh IP di tolak, kecuali IP yang di definisikan di kolom ip_output.
Untuk daftar IP yang masuk ke <@ip_output> maka di contoh ini saya masukkan IP DNS Google, IP localhost, IP deb.debian.org dan IP securty.debian.org
Secara detailnya, sebagai berikut:
Default Deny, Blok semua koneksi keluar. Fitur ini untuk mencegah serangan reverse ssh.
Ini untuk koneksi dari luar, saat ada paket balasan dari dalam, maka paket balasan tersebut perlu izin keluar, padahal semua koneksi secara default kita blok, sehingga perlu rule ini. Dengan rule ini, paket balasan dari dalam untuk koneksi awal dari luar bisa lewat.
Ini lah bedanya dengan fitur keep state pada OpenBSD PF, yang mana pada fitur itu, koneksi balasan langsung bisa melewati firewall tanpa mendefinisikan secara tersendiri di rule output.
Izinkan akses keluar menuju IP yang ada di interface lo.
Izinkan koneksi keluar, dari dalam, menuju daftar IP di table ip_output. Hal ini akan saya coba jelaskan di tulisan berikutnya tentang NFTables, InsyaAllah.
Semua koneksi lain di blok.
Nah, sekian dulu dari saya, semoga bisa di lanjutkan ke tingkat yang lebih tinggi dan semoga bermanfaat, aamiin.
Alhamdulillah
Daftar Pustaka