Linux datang dengan di lengkapi firewall berbasis host yang disebut netfilter, menurut situs resminya.
Netfilter adalah satu set kait di dalam kernel Linux yang memungkinkan modul kernel untuk mendaftarkan fungsi callback. Sebuah fungsi callback terdaftar kemudian dipanggil kembali untuk setiap paket yang melintasi kail masing-masing dalam tumpukan jaringan.
Firewall berbasis linux ini dikendalikan oleh program yang di sebut iptables untuk melakukan pemilteran IPv4 atau IPv6. Beberapa contoh penerapan iptables di bawah ini adalah umum saya kira dan banyak digunakan sebagai pembanding dan sebagainya untuk sisi konfigurasi lebih advance lagi, berikut contoh-contoh aturan iptables :
Catatan:
- Tanda # di depan aturan adalah status login root.
- Pada contoh rule aturan iptables yang panjang dan tidak muat dalam 1 baris pada posting di bawah maka hati-hati jika langsung di copy, pastikan rule penulisannya tersambung atau bisa menggunakan "\" untuk menyatukan 2 baris rule iptables .
- Tanda # di depan suatu comment dalam script bukan aturan dan tidak akan di eksekusi
- Melihat/cek aturan firewall yang sedang berjalan :
# iptables -L
lebih detail bisa dengan :
# iptables -L -n -v
Dimana :
-L adalah list aturan
-n adalah menampilkan alamat IP dan port dalam format numerik. Jangan gunakan DNS untuk menyelesaikan nama. Hal ini akan mempercepat daftar.
-v adalah menampilkan rincian informasi. Pilihan ini membuat perintah list untuk menampilkan nama interfaces, opsi aturan, dan mask TOS. Counter paket dan byte juga tercantum, dengan akhiran 'K', 'M' atau 'G' untuk 1000, 1.000.000 dan 1000000000. - Untuk memeriksa aturan firewall secara penomoran baris :
# iptables -n -L -v --line-numbers
Dengan cara ini kita bisa menghapus/menambahkan aturan nomor berapa akan di rubah
- Untuk menampilkan aturan chain di INPUT atau OUTPUT :
# iptables -L INPUT -n -v
# iptables -L OUTPUT -n -v --line-numbers - Untuk merestart/stop/start aturan firewall untuk pengguna RHEL, Centos, Fedora, atau keluarga lainnya :
# service iptables stop
# service iptables start
# service iptables restart - Cara manual melakukan stop atau hapus semua aturan :
# iptables -F
# iptables -X
# iptables -t nat -F
# iptables -t nat -X
# iptables -t mangle -F
# iptables -t mangle -X
# iptables -P INPUT ACCEPT
# iptables -P OUTPUT ACCEPT
# iptables -P FORWARD ACCEPT
Dimana :
-F adalah penghapusan (flushing) semua aturan atau rules
-X adalah penghapusan chain (rantai)
-t nama_tabel adalah pemilihan tabel (di sebut nat atau mangle) dan hapus/flush aturan.
-P adalah mengatura kebijakan default pada chain/rantai (seperti DROP, REJECT, atau ACCEPT)
Menghapus aturan pada chain, misal INPUT atau OUTPUT
Pertama, lihat list penomoran aturan iptables pada chain INPUT atau OUTPUT
# iptables -L INPUT -n --line-numbers
# iptables -L OUTPUT -n --line-numbers
Kedua, tentukan nomor berapa yang hendak di hapus, dalam contoh misal nomor 4 :
# iptables -D INPUT 4
Atau cara manual bisa dengan dari mengetik ulang aturan yang sama namun opsi -A di ganti -D
Dimana:
-D adalah delete/hapus - Memasukan aturan iptables pada susunan aturan iptables yang sudah ada sebelumnya :
- Lihat penomoran aturan iptables pada suatu chain :
# iptables -L INPUT -n --line-numbers
Misal contoh output di konsol dari hasil command di atas adalah sebagai berikut :
Chain INPUT (policy DROP)
num target prot opt source destination
1 DROP all -- 202.54.1.1 0.0.0.0/0
2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state NEW,ESTABLISHED - Kita ingin menyelipkan aturan baru diantara nomor 2 dan 3, maka :
# iptables -I INPUT 2 -s 202.54.1.2 -j DROP
Cek update terbaru aturan pada chain tersebut :
# iptables -L INPUT -n --line-numbers
dan output konsolenya sebagai berikut :
Chain INPUT (policy DROP)
num target prot opt source destination
1 DROP all -- 202.54.1.1 0.0.0.0/0
2 DROP all -- 202.54.1.2 0.0.0.0/0
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state NEW,ESTABLISHED
- Lihat penomoran aturan iptables pada suatu chain :
- Cara save iptables di keluarga RHEL seperti Centos, Fedora, dll :
# service iptables save
Untuk distro keluarga linux lainnya gunakan perintah save yang di sertakan spesifik, misal :
# iptables-save > /root/firewall.rules
Dimana :
Penyimpanan semua aturan iptables akan di simpan ke direktori /root dengan nama file firewall.rule
- Me-restore atau mengembalikan aturan iptables yang sebelumnya lebih sesuai dari pada yang baru (jika itu kasusnya) :
# iptables-restore < /root/firewall.rules
Kemudian di restart iptablesnya jika di keluarga/turunan RHEL
# service iptables restart - Mengganti default aturan pada chain, misal di INPUT yang awalnya dari ACCEPT ingin ke DROP :
# iptables -P INPUT DROP - Memblok traffic masuk di interface yang mengarah ke Internet tetapi membiarkan traffic yang keluar :
# iptables -P INPUT DROP
# iptables -P FORWARD DROP
# iptables -P OUTPUT ACCEPT
# iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT - Drop jaringan private yang berada di interface publik (internet) :
IP spoofing tidak lain untuk menghentikan bentang alamat IPv4 untuk jaringan pribadi pada interface publik. Packets with non-routable source addresses should be rejected using the following syntax: Paket dengan alamat sumber non-routable harus ditolak menggunakan sintaks berikut:
# iptables -A INPUT -i eth1 -s 192.168.0.0/24 -j DROP
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP - Blok traffic masuk suatu IP pada semua interface karena sesuatu hal :
# iptables -A INPUT -s 1.2.3.4 -j DROP
# iptables -A INPUT -s 192.168.0.0/24 -j DROP
Tambahkan -i eth* jika ingin menspesifikan pada interface tertentu - Blok request traffic masuk ke port-port tertentu :
Blok semua request ke port 80 :
# iptables -A INPUT -p tcp --dport 80 -j DROP
# iptables -A INPUT -i eth1 -p tcp --dport 80 -j DROP
Blok dari ip 192.168.0.22 jika merequest port 80 (http) :
# iptables -A INPUT -p tcp -s 192.168.0.22 --dport 80 -j DROP
# iptables -A INPUT -i eth1 -p tcp -s 192.168.0.22/32 --dport 80 -j DROP - Log dan Drop paket
Ketik sebagai berikut untuk mencatat log dari semua paket yang di drop pada interface publik yang disini saya sebut di eth1 :
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix "IP_SPOOF A: "
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
Secara default, pencatatan log ada di dir /var/log/messages :
# tail -f /var/log/messages
# grep --color 'IP SPOOF' /var/log/messages - Drop atau Accept dari MAC Address :
Hanya mengijinkan traffic masuk 22 saja dari MAC Address 00:0F:EA:91:04:08
# iptables -A INPUT -m mac --mac-source 00:0F:EA:91:04:08 -j DROP
# iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source 00:0F:EA:91:04:07 -j ACCEPT - Blok paket ICMP ping request :
Blok semua traffic masuk protokol jenis icmp
# iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
Blok semua traffic masuk protokol jenis icmp pada interfaces eth1
# iptables -A INPUT -i eth1 -p icmp --icmp-type echo-request -j DROP - Batasi request ping pada jaringan atau host tertentu :
Di asumsikan default policy INPUT adalah DROP, maka
# iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
# iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
# iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
# iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT - Buka bentang port tertentu
Misal, bentang port yang akan di buka untuk traffic masuk dari 7000:8000, maka :
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 7000:8000 -j ACCEPT - Buka bentangan IP tertentu
Misal hanya menyetujui traffic masuk sambungan ke port 80 protokol tcp hanya di rentan IP 192.168.0.100 s/d 192.168.0.200 :
# iptables -A INPUT -p tcp --destination-port 80 -m iprange --src-range 192.168.0.100-192.168.0.200 -j ACCEPT
Contoh pada NAT, dimana proses terjadi setelah routing :
# iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.0.100-192.168.0.200 - Aturan firewall yang sudah di rasa stabil dan firewall akan di Restart.
Saat kita merestart service firewall maka koneksi yang sedang terjalin saat itu akan drop sementara karena modul yang terbongkar di distro Linux RHEL/Fedora/Centos dan sebagainya. Edit /etc/sysconfig/iptables-config dan atur IPTABLES_MODULES_UNLOAD sebagai berikut:
IPTABLES_MODULES_UNLOAD = no - Bantuan jika terjadi flooding iptables di layar suatu server.
Gunakan opsi crit log untuk mengirim pesan ke file log bukannya ke konsol:
# iptables -A INPUT -s 1.2.3.4 -p tcp --destination-port 80 -j LOG --log-level crit
- Blok atau buka port umum yang terbuka.
Sisipkan ACCEPT dengan DROP untuk memblok port (ini di tulis dalam sebuah script) :
## buka port ssh tcp port 22 ##
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT
## buka cups (layanan printing) udp/tcp port 631 untuk user di LAN ##
iptables -A INPUT -s 192.168.1.0/24 -p udp -m udp --dport 631 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 631 -j ACCEPT
## Setujui sinkronisasi waktu via NTP untuk user di LAN (buka udp port 123) ##
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p udp --dport 123 -j ACCEPT
## buka port tcp 25 (smtp) untuk semua ##
iptables -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT
## buka port dns server untuk semua ##
iptables -A INPUT -m state --state NEW -p udp --dport 53 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT
## buka http/https (apache) server port untuk semua ##
iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT
## buka tcp port 110 (pop3) untuk semua ##
iptables -A INPUT -m state --state NEW -p tcp --dport 110 -j ACCEPT
## open tcp port 143 (imap) for all ##
## buka tcp port 143 (imap) untuk semua ##
iptables -A INPUT -m state --state NEW -p tcp --dport 143 -j ACCEPT
## buka akses ke samba file server hanya untuk user LAN saja ##
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 137 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 138 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 139 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 445 -j ACCEPT
## buka akses ke proxy server hanya untuk user LAN saja ##
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 3128 -j ACCEPT
## buka akses ke mysql server hanya untuk user LAN saja ##
iptables -I INPUT -p tcp --dport 3306 -j ACCEPT - Batasi koneksi pararel dari beberapa klien dalam satu kali waktu ke server
Kita dapat menggunakan modul connlimit untuk menempatkan pembatasan tersebut. Untuk memungkinkan hanya 3 koneksi per host ssh klien, masukkan :
# iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT
Set request HTTP ke 20 :
# iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j DROP - Troubleshooting iptables.
Untuk mengetahui lebih detail tentang iptables silahkan halaman manualnya dengan mengetikan perintah seperti di bawah ini pada konsol/terminal :
# man iptables
atau
# iptables -h
Untuk melihat perintah iptables secara lebih spesifik, misal mengenai -j DROP :
# iptables -j DROP -h - Menguji/tes aturan iptables apakah sudah benar.
Cari tahu port yang terbuka atau tidak :
# netstat -tulpn
Cari tahu apakah tcp port 80 terbuka atau tidak :
# netstat -tulpn | grep :80
Jika port 80 tidak terbuka, start-kan apache :
# service httpd start
atau
# /etc/init.d/apache2 start
Memastikan iptables mengijinkan akses ke port 80 :
# iptables -L INPUT -v -n | grep 80
Jika tidak, buka port 80 menggunakan iptables untuk semua pengguna:
# iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
# service iptables save
Gunakan perintah telnet untuk melihat apakah firewall memungkinkan untuk terhubung ke port 80:
# telnet www.ncupisme.blogspot.com 80
Contoh outputnya kurang lebih sebagai berikut :
Trying 75.126.153.206...
Connected to www.ncupisme.blogspot.com.
Escape character is '^]'.
^]
telnet> quit
Connection closed.
Kita juga dapat menggunakan nmap untuk menyelidiki server kita sendiri dengan menggunakan sintaks sebagai berikut:
# nmap -sS -p 80 www.ncupisme.blogspot.com
Contoh output :
Starting Nmap 5.00 ( http://nmap.org ) at 2011-12-13 13:19 IST
Interesting ports on www.ncupisme.blogspot.com (75.126.153.206):
PORT STATE SERVICE
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 1.00 seconds
Disarankan juga kalian menginstal dan menggunakan sniffer seperti ngrep tcpdupm dan untuk menguji pengaturan firewall, semoga bermanfaat bagi kita amin :D
Tidak ada komentar:
Posting Komentar