Firewall berjalan dengan menggunakan
aturan, jika kalian menggunakan sistem operasi Red Hat, CentOS, Fendora, RHEL
pada sistem operasi linux kalian akan menemukan sekumpulan aturan itu yang
terdapat di iptables. Setiap aturan yang terdapat pada iptables akan
dikelompokan dan dicocokan sesuai arus lalu lintas terhadap kondisi yang
diberikan dan tindakan yang mendefisinisikan apa yang harus dilakukan terhadap
paket paket data yang masuk atau pun keluar sesuai dengan aturan yang telah
dibuat pada iptables atau firewall filtering.
File semua aturan firewall atau iptables
terdapat di direktori /etc/sysconfig/iptables pada
sistem operasi linux berbasis CentOs, Fendora, RHEL, dan Red hat. Untuk
menampilkan rules atau aturan firewall yang telah kita buat bisa dengan mengetik
perintah dibawah ini pada terminal
iptables
--line-numbers -n –L
Sedangkan
untuk mengaktifkan, mematikan dan merestart firewall atau iptables bisa
menggunakan perintah berikut
Iptables
startIptables
stopIptables
restart
Ada 4
chain yang telah ditetapkan pada iptables
- INPUT = Digunakan untuk memproses paket memasuki sistem melalui salah satu interface dengan alamat ip address tujuan.
- Forward = digunakan untuk proses paket data melewati sistem
- Output = digunakan untuk proses paket data yang berasal dari sistem dan meninggalkan melalui salah satu interface.
- RH-Firewall-1-INPUT = Ini sama hampir sama dengan diatas, namun bedanya penggunaan RH-Firewall ini memiliki custom chain baik itu INPUT, OUTPUT, maupun forward.
Target paket pada iptables ;
- Accept = paket diterima dan tidak melanjutkan mebaca baris berikutnya
- Drop = Menolak paket secara diam-diam
- Reject = menolak paket dengan mengirimkan pesan error
Perlu kalian ketahui ketika memproses
chain, aturan yang diambil dari chain dalam daftar urutan akan dieksekusi dari
atas ke bawah. Maksudnya jika paket cocok dengan kriteria aturan yang telah
kita buat dalam iptables maka tindakan tertentu dilakukan diatasnya dan tidak
ada lagi aturan iptables yang diproses didalam chain, dan jika aturan tidak
cocok dengan salah satu aturan iptables dalam chain maka paket itu akan
diterima.
Hal diatas adalah hal dasar yang perlu
kalian ketahui sebelum kita membahas lebih dalam mengenai firewall atau
iptables. Tetap semangat belajar okey :) sekarang kita coba masuk ke dalam
aturan iptables yang terdapat dalam direktori /etc/sysconfig/iptables
Atau bisa melalui perintah pada
terminal dengan mengetik
# vi /etc/sysconfig/iptables
Setelah
masuk mungkin kalian akan mendapatkan kulkas ;p hehehe eehhhh maksud saya
mendapatkan sekumpulan aturan iptables seperti ini (Namun tidak harus seperti
dibawah loo yaa)
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
Okey deh, saya beri contoh beberapa
kasus pengisian aturan iptables :
Untuk Drop semua trafik
temukan baris seperti ini :
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
Ganti ACCEPT menjadi DROP
Log dan Drop Spoofing dari alamat IP
Adress tertentu
Masukan kode dibawah ini sebelum kode COMMIT
-A INPUT -i eth0 -s 10.0.0.0/8 -j LOG --log-prefix "IP DROP SPOOF "
-A INPUT -i eth0 -s 172.16.0.0/12 -j LOG --log-prefix "IP DROP SPOOF "
-A INPUT -i eth0 -s 192.168.0.0/16 -j LOG --log-prefix "IP DROP SPOOF "
-A INPUT -i eth0 -s 224.0.0.0/4 -j LOG --log-prefix "IP DROP MULTICAST "
-A INPUT -i eth0 -s 240.0.0.0/5 -j LOG --log-prefix "IP DROP SPOOF "
-A INPUT -i eth0 -d 127.0.0.0/8 -j LOG --log-prefix "IP DROP LOOPBACK "
-A INPUT -i eth0 -s 169.254.0.0/16 -j LOG --log-prefix "IP DROP MULTICAST "
-A INPUT -i eth0 -s 0.0.0.0/8 -j LOG --log-prefix "IP DROP "
-A INPUT -i eth0 -s 240.0.0.0/4 -j LOG --log-prefix "IP DROP "
-A INPUT -i eth0 -s 255.255.255.255/32 -j LOG --log-prefix "IP DROP "
-A INPUT -i eth0 -s 168.254.0.0/16 -j LOG --log-prefix "IP DROP "
-A INPUT -i eth0 -s 248.0.0.0/5 -j LOG --log-prefix "IP DROP "
Log dan Drop semua Trafik
Temukan baris seperti dibawah
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
Kemudian ganti dengan kode dibawah ini
-A RH-Firewall-1-INPUT -j LOG
-A RH-Firewall-1-INPUT -j DROP
COMMIT
Untuk membuka akses Port tertentu
Masukan kode dibawah ini sebelum COMMIT
Untuk web server biasa menggunakan
port 80 maka agar bisa diakses masukan kode
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 80 -j ACCEPT
Untuk SSH server biasanya menggunakan
port 22
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 22 -j ACCEPT
Untuk FTP biasanya menggunakan port 21
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 21 -j ACCEPT
Untuk HTTPS (SSL) biasanya menggunakan
port 443
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 443 -j ACCEPT
Nah untuk memberikan akses kepada ip
address tertentu misalnya ip address 192.168.1.0/24 saja yang dapat mengakses
ssh server
-A RH-Firewall-1-INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT
Untuk memberikan akses print kepada ip
tertentu saja misalnya sama dari ip address 192.168.1.0/24 saja
-A RH-Firewall-1-INPUT -s 192.168.1.0/24 -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 631 -j ACCEPT
Silahkan kalian atur sendiri sesuai
kebutuhan, diatas sudah saya beri contoh penulis aturan iptables sekarang
tinggal improvisasi kalian aja untuk mengatur firewall server kalian.
Jika sudah simpan dan keluar dari
pengaturan iptables, kemudian restart
# service
iptables restart
Ohya
pada artikel sebelumnya saya sudah membahas, cara mengaktifkan TCP SYN Cookies untuk menangkal serangan DDOS
, sekarang akan saya bahas lagi untuk hasil yang lebih sempurna :)
Kita masuk dulu ke sysctl.conf dengan cara
# vi /etc/sysctl.conf
Lalu
masukan kode dibawah ini :
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
#net.ipv4.icmp_ignore_bogus_error_messages = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
Alternatif lain bisa kalian gunakan script
kode dibawah ini dan buat file di direktori /etc/sysconfig/iptables
#!/bin/bash
# A sample firewall shell script
IPT="/sbin/iptables"
SPAMLIST="blockedip"
SPAMDROPMSG="BLOCKED IP DROP"
SYSCTL="/sbin/sysctl"
BLOCKEDIPS="/root/scripts/blocked.ips.txt"
# Stop certain attacks
echo "Setting sysctl IPv4 settings..."
$SYSCTL net.ipv4.ip_forward=0
$SYSCTL net.ipv4.conf.all.send_redirects=0
$SYSCTL net.ipv4.conf.default.send_redirects=0
$SYSCTL net.ipv4.conf.all.accept_source_route=0
$SYSCTL net.ipv4.conf.all.accept_redirects=0
$SYSCTL net.ipv4.conf.all.secure_redirects=0
$SYSCTL net.ipv4.conf.all.log_martians=1
$SYSCTL net.ipv4.conf.default.accept_source_route=0
$SYSCTL net.ipv4.conf.default.accept_redirects=0
$SYSCTL net.ipv4.conf.default.secure_redirects=0
$SYSCTL net.ipv4.icmp_echo_ignore_broadcasts=1
#$SYSCTL net.ipv4.icmp_ignore_bogus_error_messages=1
$SYSCTL net.ipv4.tcp_syncookies=1
$SYSCTL net.ipv4.conf.all.rp_filter=1
$SYSCTL net.ipv4.conf.default.rp_filter=1
$SYSCTL kernel.exec-shield=1
$SYSCTL kernel.randomize_va_space=1
echo "Starting IPv4 Firewall..."
$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t nat -X
$IPT -t mangle -F
$IPT -t mangle -X
# load modules
modprobe ip_conntrack
[ -f "$BLOCKEDIPS" ] && BADIPS=$(egrep -v -E "^#|^$" "${BLOCKEDIPS}")
# interface connected to the Internet
PUB_IF="eth0"
#Unlimited traffic for loopback
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
# DROP all incomming traffic
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
if [ -f "${BLOCKEDIPS}" ];
then
# create a new iptables list
$IPT -N $SPAMLIST
for ipblock in $BADIPS
do
$IPT -A $SPAMLIST -s $ipblock -j LOG --log-prefix "$SPAMDROPMSG "
$IPT -A $SPAMLIST -s $ipblock -j DROP
done
$IPT -I INPUT -j $SPAMLIST
$IPT -I OUTPUT -j $SPAMLIST
$IPT -I FORWARD -j $SPAMLIST
fi
# Block sync
$IPT -A INPUT -i ${PUB_IF} -p tcp ! --syn -m state --state NEW -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "Drop Sync"
$IPT -A INPUT -i ${PUB_IF} -p tcp ! --syn -m state --state NEW -j DROP
# Block Fragments
$IPT -A INPUT -i ${PUB_IF} -f -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "Fragments Packets"
$IPT -A INPUT -i ${PUB_IF} -f -j DROP
# Block bad stuff
$IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
$IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags ALL ALL -j DROP
$IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags ALL NONE -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "NULL Packets"
$IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags ALL NONE -j DROP # NULL packets
$IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
$IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "XMAS Packets"
$IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP #XMAS
$IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags FIN,ACK FIN -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "Fin Packets Scan"
$IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags FIN,ACK FIN -j DROP # FIN packet scans
$IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
# Allow full outgoing connection but no incomming stuff
$IPT -A INPUT -i ${PUB_IF} -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -o ${PUB_IF} -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
# Allow ssh
$IPT -A INPUT -i ${PUB_IF} -p tcp --destination-port 22 -j ACCEPT
# Allow http / https (open port 80 / 443)
$IPT -A INPUT -i ${PUB_IF} -p tcp --destination-port 80 -j ACCEPT
#$IPT -A INPUT -o ${PUB_IF} -p tcp --destination-port 443 -j ACCEPT
# allow incomming ICMP ping pong stuff
$IPT -A INPUT -i ${PUB_IF} -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#$IPT -A OUTPUT -o ${PUB_IF} -p icmp --icmp-type 0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allow port 53 tcp/udp (DNS Server)
$IPT -A INPUT -i ${PUB_IF} -p udp --dport 53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#$IPT -A OUTPUT -o ${PUB_IF} -p udp --sport 53 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -i ${PUB_IF} -p tcp --destination-port 53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#$IPT -A OUTPUT -o ${PUB_IF} -p tcp --sport 53 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Open port 110 (pop3) / 143
$IPT -A INPUT -i ${PUB_IF} -p tcp --destination-port 110 -j ACCEPT
$IPT -A INPUT -i ${PUB_IF} -p tcp --destination-port 143 -j ACCEPT
##### Add your rules below ######
#
#
##### END your rules ############
# Do not log smb/windows sharing packets - too much logging
$IPT -A INPUT -p tcp -i ${PUB_IF} --dport 137:139 -j REJECT
$IPT -A INPUT -p udp -i ${PUB_IF} --dport 137:139 -j REJECT
# log everything else and drop
$IPT -A INPUT -j LOG
$IPT -A FORWARD -j LOG
$IPT -A INPUT -j DROP
exit 0
Selesai sudah, tutorial setting
Firewall atau iptables pada Linux gunakan otak naluri kalian saat membuat
aturan iptables. Good Luck :)