Pengenalan Firewall & IPTables
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 lalulintas 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 kemanan di server.
Installasi 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 di izinkan, untuk melihat list dari iptables bisa menggunakan perintah
iptables -nvL
![](https://aryapramudika.com/wp-content/uploads/2022/07/image-12.png)
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
![](https://aryapramudika.com/wp-content/uploads/2022/07/image-13.png)
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
![](https://aryapramudika.com/wp-content/uploads/2022/07/image-14.png)
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 range 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
![](https://aryapramudika.com/wp-content/uploads/2022/07/image-15.png)
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
![](https://aryapramudika.com/wp-content/uploads/2022/07/image-16.png)
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
![](https://aryapramudika.com/wp-content/uploads/2022/07/image-17.png)
Terlihat ada nomor urut disetiap rule untuk menghapus rulenya cukup menggunakan perintah
iptables -D INPUT nomor
misal
iptables -D INPUT 1
![](https://aryapramudika.com/wp-content/uploads/2022/07/image-19.png)
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
![](https://aryapramudika.com/wp-content/uploads/2022/07/image-20.png)
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 mengaktfikan 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 ataupun private ke private yang lain
iptables -t nat -A POSTROUTING -o ens33 -s 172.23.2.0/24 -j MASQUERADE
![](https://aryapramudika.com/wp-content/uploads/2022/07/image-22.png)
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 / D-NAT
Fungsinya biasanya untuk port forwarding, misal kita mau mengekspose port 80 ke External Network
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 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 ad a 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