Firewall adalah sistem keamanan di komputer dimana melindungi sebuah jaringan agar aman dari ancaman yang ada di Internet.
IPTables adalah tools firewall di linux yang bisa digunakan untuk memfilter/menyaring lalu lintas jaringan yang masuk,keluar dan melewati server. Kita juga bisa menggunakan IPTables ini untuk mengelola jenis paket, port, source address, destination address dan lainnya.
IPTables memiliki sebuah tabel untuk menentukan data, di dalam sebuah tabel tersebut ada sebuah aturan yang biasa disebut chain. Berikut beberapa Tabel di IPTables:
- Tabel Filter
- Tabel NAT
- Tabel Mangle
Di dalam tabel Filter ada 3 Chain:
- Chain INPUT (Aturan paket yang masuk ke server)
- Chain FORWARD(Aturan paket yang melewati server)
- Chain OUTPUT(Aturan paket yang keluar dari server)
Di dalam tabel NAT ada 4 Chain:
- PREROUTING/DST-NAT (Mengubah tujuan alamat)
- INPUT(Aturan NAT yang masuk ke server)
- OUTPUT(Aturan NAT yang keluar dari server)
- POSTROUTING/SRC-NAT(Mengubah sumber alamat)
Di dalam tabel Mangle bisa menggunakan semua chain diatas untuk menandai sebuah paket.
Selanjutnya kita akan coba menggunakan IPTables untuk keamanan di server.
Instalasi IPTables di Linux
Lakukan dengan menggunakan user root atau dengan sudo
Debian Based
apt -y install iptables-persistent |
RHEL/Centos Based
dnf -y install iptables-services |
Konfigurasi Policy/Aturan Default di Chain
Secara default di semua chain paket akan di ACCEPT atau diizinkan, untuk melihat list dari iptables bisa menggunakan perintah
iptables -nvL |
Terlihat di sebelah nama chain ada policy ACCEPT berarti kita mengizinkan paket masuk, untuk mengubahnya kita gunakan perintah
iptables -P namachain ACCEPT/DROP |
Contoh mengubah policy INPUT agar menjadi DROP
iptables -P INPUT DROP |
Ketika kita mengubah chain default INPUT menjadi DROP agar kita bisa mengakses si server maka diperlukan rule perizinan, jadi rule IPTables ini dibaca urut dari atas ke bawah, misal kita menambahkan rule untuk mengizinkan akses SSH
Menambah Rule di Chain Input
iptables -A INPUT -p tcp –dport 22 -j ACCEPT |
Keterangan perintah:
-A INPUT | Append atau menambah rule ke chain INPUT |
-p tcp | Protokol TCP |
– -dport | Destinasi Port |
-j | Jump atau akses yang diberikan misal ACCEPT |
Terlihat bahwa kita mengizinkan paket dengan protokol TCP dan Tujuan Port 22(SSH), untuk source addressnya 0.0.0.0/0 berarti siapa saja bisa mengakses server kita melalui koneksi SSH. Kita bisa melimit source addressnya misal hanya Network IP Tertentu yang bisa mengakses server kita, tambahkan parameter -s
iptables -A INPUT -p tcp –dport 22 -s 172.23.0.0/20 -j ACCEPT |
Menambahkan Rule untuk mengizinkan akses web server
iptables -A INPUT -p tcp –dport 80 -j ACCEPT iptables -A INPUT -p tcp –dport 443 -j ACCEPT |
Menghapus Rule
Kita bisa menghapus langsung dengan cara menggunakan perintah kemudian ditambah -D, contoh
menghapus rule di chain INPUT yang mengizinkan akses web server
iptables -D INPUT -p tcp –dport 80 -j ACCEPT |
Atau bisa juga berdasarkan nomor, untuk melihat list nomor rule di setiap chain gunakan perintah
iptables -nvL –line-number |
Terlihat ada nomor urut di setiap rule untuk menghapus rulenya cukup menggunakan perintah
iptables -D INPUT nomor |
misal
iptables -D INPUT 1 |
Rule pertama berhasil dihapus
Menghapus Semua Rule Firewall di Chain
Untuk menghapus semua rule firewall bisa menggunakan perintah
iptables -F namachain |
misal ingin menghapus semua rule di chain input
iptables -F INPUT |
Forward dan NAT
Forward biasanya digunakan untuk meneruskan sebuah paket bisa dari satu interface ke interface lain, di linux secara default fitur IP forwarding dimatikan, untuk mengaktifkannya kita bisa menggunakan perintah sysctl
sysctl -w net.ipv4.ip_forward=1
Perintah tadi mengaktifkan IP Forwarding saat itu juga, ketika mesin restart/mati maka IP Forwarding akan mati lagi, untuk mengaktifkan secara permanen kita bisa konfigurasi di file /etc/sysctl.conf
vi /etc/sysctl.conf ….. net.ipv4.ip_forward = 0 Ubah menjadi net.ipv4.ip_forward = 1 ….. |
Untuk menambah rule di chain forward berikut perintahnya
iptables -A FORWARD -i ens33 -j ACCEPT iptables -A FORWARD -o ens33 -j ACCEPT |
Keterangan perintah
-A FORWARD | Append atau menambah rule di chain FORWARD |
-i ens33 | In Interface / Di dalam interface ens33 |
-o ens33 | Out Interface /Keluar dari interface ens33 |
-j ACCEPT | Jump atau akses yang diberikan misal ACCEPT |
IP Masquerade / POSTROUTING
Biasanya digunakan untuk mentranslasikan IP, dari private ke publik. Contohnya ketika klien ingin mengakses ke internet maka kita perlu menambahkan rule ini.
iptables -t nat -A POSTROUTING -o ens33 -s 172.23.2.0/24 -j MASQUERADE |
Keterangan perintah
-t nat | Target NAT |
-A POSTROUTING | Menambah rule ke chain POSTROUTING(src-nat) |
-o ens33 | Out Interface/ Interface dimana paket tersebut keluar di interface ens33 |
-s | Source Address, sumber alamat yang ingin di translasikan |
-j MASQUERADE | Jump atau akses yang diberikan yaitu MASQUERADE |
PRERouting / DNAT
Fungsinya biasanya untuk port forwarding, misal kita mau mengekspos port 80 ke External Network. Jadi semisal kita punya web server di internal network akan bisa diakses dari ip publik server
iptables -t nat -A PREROUTING -p tcp –dport 80 -j DNAT –to 172.23.0.201:80 |
Jadi ketika ada klien mengakses ke server kita dengan port 80 maka akan diteruskan ke 172.23.0.201.
IPTables Log
Jadi jika kita ingin menyimpan log yang ada di IPTables kita cukup buat rule baru dengan action/jump LOG. Contohnya kita membuat log untuk semua chain INPUT
iptables -A INPUT -j LOG |
Dimana lokasi log nya?
Untuk log nya ada di file /var/log/kern.log
Kita gunakan perintah tail untuk melihatnya
tail -f /var/log/kern.log |
Terlihat pada gambar diatas log iptables berhasil dibaca.
Mengubah Lokasi File Log
Pastikan server sudah terinstall rsyslog
Kemudian buat rule LOG baru(hapus yang tadi), misal kita buat seperti tadi tapi dengan tambahan parameter – – log-prefix agar log iptables mudah dikenali.
iptables -A INPUT -j LOG –log-prefix “[IPTABLES]: “ |
Buat konfigurasi rsyslog baru, yang berisi seperti ini
nano /etc/rsyslog.d/10-iptables.conf :msg, contains, “[IPTABLES]: ” -/var/log/iptablesl.log & ~ |
Restart layanan rsyslog
systemctl restart rsyslog |
Cek Log file baru
IPTables Statefull Firewall
Apa bedanya statefull firewall dengan firewall yang kita konfigurasi tadi? bedanya ada di connection tracking nya jadi di Statefull Firewall kita bisa menginspek sebuah koneksi berdasarkan connection state seperti NEW,ESTABLISHED, & RELATED
Penjelasan paket connection state:
- NEW (Paket yang meminta koneksi baru)
- ESTABLISHED (Paket yang sudah saling terkoneksi/saling kenal)
- RELATED(Paket yang berhubungan dengan koneksi yang sudah ada)
- INVALID(Paket yang tidak ada dalam connection state diatas)
Konfigurasi Statefull Firewall di IPTables
Contoh:
Mengizinkan paket baru,paket yang sudah ada, dan paket yang berhubungan dengan paket yang sudah ada untuk melakukan koneksi menuju ke server
iptables -A INPUT -m state –state NEW,ESTABLISHED,RELATED -j ACCEPT |
Mengizinkan hanya paket yang dikenali dan berhubungan/mirip saja yang diizinkan melewati server
iptables -A FORWARD -m state –state ESTABLISHED,RELATED -j ACCEPT |
Menyimpan Konfigurasi IPTables secara permanen
iptables-save > /etc/iptables/rules.v4 |
Mengembalikan Konfigurasi IPTables seperti semula(seperti file yang kita simpan tadi)
iptables-restore < /etc/iptables/rules.v4 |
Untuk mempelajari lebih lanjut tentang firewall, bisa mengikuti training Ubuntu Server atau Redhat
Penulis: Arya Pramudika