Tutorial Setting Firewall pada Linux

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

  1. INPUT = Digunakan untuk memproses paket memasuki sistem melalui salah satu interface dengan alamat ip address tujuan.
  2. Forward = digunakan untuk proses paket data melewati sistem
  3. Output = digunakan untuk proses paket data yang berasal dari sistem dan meninggalkan melalui salah satu interface.
  4. 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 ;

  1. Accept = paket diterima dan tidak melanjutkan mebaca baris berikutnya
  2. Drop =  Menolak paket secara diam-diam
  3. 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 :)


LihatTutupKomentar