Jl. Projosumarto II Kab. Tegal
Jawa Tengah, Kode Pos 52193
0812-6666-802
info@servindo.co.id
support@servindo.co.id

Proteksi Server dari Scanning Port dan DDoS Dengan IPTABLES

Pada tahapan aksi hacking, yang pertama adalah Information Gathering atau mencari informasi korban sebanyak-banyaknya, mulai dari mencari kelemahan sistem, mencari port yang terbuka, versi software yang berjalan, Google hacking, dan lain sebagainya.

Tutorial kali ini akan membahas agar server terjaga dari aksi port scanning, tujuan dari port scanning biasanya untuk mencari port SSH yang sudah diubah, apakah service FTPnya berjalan, apakah port database servernya terbuka untuk melakukan remote database, apakah ada service dari proxy, dan lain sebagainya.

Untuk memproteksi serangan port scanning dapat dilakukan menggukan firewall atau IPTables, sedangkan pada serangan DDoS, firewall akan membatasi koneksi, namun tidak jaminan firewall dapat mencegah serangan DDoS.

Rule dibawah ini hanyak untuk memfilter koneksi INPUT/incomming, dapat dicustomisasi jika ingin memilter OUTPUT/outgoing.

Untuk mempermudah, membuat sebuah script bash

[root@server ~]# vim iptables.sh

Isi dengan script:


#!/bin/sh
#
#
# Script is for stoping Portscan and smurf attack

### first flush all the iptables Rules
iptables -F


# INPUT iptables Rules
# Accept loopback input
iptables -A INPUT -i lo -p all -j ACCEPT

# allow 3 way handshake
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

### DROPspoofing packets
iptables -A INPUT -s 10.0.0.0/8 -j DROP
iptables -A INPUT -s 169.254.0.0/16 -j DROP
iptables -A INPUT -s 172.16.0.0/12 -j DROP
iptables -A INPUT -s 127.0.0.0/8 -j DROP
iptables -A INPUT -s 192.168.0.0/24 -j DROP

iptables -A INPUT -s 224.0.0.0/4 -j DROP
iptables -A INPUT -d 224.0.0.0/4 -j DROP
iptables -A INPUT -s 240.0.0.0/5 -j DROP
iptables -A INPUT -d 240.0.0.0/5 -j DROP
iptables -A INPUT -s 0.0.0.0/8 -j DROP
iptables -A INPUT -d 0.0.0.0/8 -j DROP
iptables -A INPUT -d 239.255.255.0/24 -j DROP
iptables -A INPUT -d 255.255.255.255 -j DROP

#for SMURF attack protection
iptables -A INPUT -p icmp -m icmp --icmp-type address-mask-request -j DROP
iptables -A INPUT -p icmp -m icmp --icmp-type timestamp-request -j DROP
iptables -A INPUT -p icmp -m icmp -m limit --limit 1/second -j ACCEPT

# Droping all invalid packets
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP

# flooding of RST packets, smurf attack Rejection
iptables -A INPUT -p tcp -m tcp --tcp-flags RST RST -m limit --limit 2/second --limit-burst 2 -j ACCEPT

# Protecting portscans
# Attacking IP will be locked for 24 hours (3600 x 24 = 86400 Seconds)
iptables -A INPUT -m recent --name portscan --rcheck --seconds 86400 -j DROP
iptables -A FORWARD -m recent --name portscan --rcheck --seconds 86400 -j DROP

# Remove attacking IP after 24 hours
iptables -A INPUT -m recent --name portscan --remove
iptables -A FORWARD -m recent --name portscan --remove

# These rules add scanners to the portscan list, and log the attempt.
iptables -A INPUT -p tcp -m tcp --dport 139 -m recent --name portscan --set -j LOG --log-prefix "portscan:"
iptables -A INPUT -p tcp -m tcp --dport 139 -m recent --name portscan --set -j DROP

iptables -A FORWARD -p tcp -m tcp --dport 139 -m recent --name portscan --set -j LOG --log-prefix "portscan:"
iptables -A FORWARD -p tcp -m tcp --dport 139 -m recent --name portscan --set -j DROP

# Allow the following ports through from outside
iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 43 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

# Allow ping means ICMP port is open (If you do not want ping replace ACCEPT with REJECT)
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

# Lastly reject All INPUT traffic
iptables -A INPUT -j REJECT

# Simpan perubahan
iptables-save

Chmod agar executable.

[root@server ~]# chmod +x iptables.sh

Kemudian jalankan scriptnya:

[root@server ~]# ./iptables.sh

Script diatas akan menbanned IP attacker selama 1hari, dan attacker tidak dapat melakukan koneksi ke server kecuali masih dapat melakukan PING ke server. Perhatikan juga port yang terbuka pada server dan tambahkan jika perlu dan dapat diubah lamanya melakukakan banning IP.

Untuk melihat adanya aksi port scanning, dapat dilihat di log messagenya

[root@server ~]# tail /var/log/messages[/codes]