Skip to main content
  1. Posts/

IPtables Cheatsheet

·6 mins·
iptables linux iptables
Table of Contents

IPtables adalah utilitas linux yang memungkinkan Anda mengonfigurasi aturan firewall pada tingkat OS seperti memblokir berdasarkan alamat IP, port dan protokol.

Berikut adalah beberapa aturan firewall dengan IPtables yang mungkin Anda butuhkan untuk mengamankan server Linux Anda.

Listing Rules
#

Untuk melihat aturan firewall filter.

iptables -S

Untuk melihat aturan firewall nat.

iptables -S -t nat

Melihat seluruh aturan firewall iptables.

iptables-save

Untuk melihat aturan firewall berdasarkan Chain.

iptables -L INPUT

Menampilkan nomor baris aturan firewall.

iptables -L --line-numbers

Menampilkan jumlah paket dan Aggregate size.

iptables -L INPUT -v

Reset jumlah paket dan Aggregate size.

iptables -Z

Deleting Rules
#

Untuk menghapus aturan firewall berdasarkan line-numbers.

iptables -D INPUT 3

Menghapus aturan firewall berdasarkan Chain.

iptables -F INPUT

Menghapus seluruh aturan firewall.

iptables -F

Untuk menghapus Chain.

iptables -X LOGDROPIN

Logging
#

Anda dapat mengaktifkan logging pada suatu aturan dengan cara berikut.

iptables -N LOGDROPIN
iptables -A INPUT -p tcp -m multiport --dports 80,443 -j LOGDROPIN
iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -j LOGDROPIN
iptables -A LOGDROPIN -p tcp -m limit --limit 30/min -j LOG --log-prefix "*Blokir Trafik HTTP* " --log-uid
iptables -A LOGDROPIN -j DROP

Dari contoh aturan firewall tersebut, kita akan mendapatkan log setiap ada trafik masuk yang mengarah ke port 80 (HTTP) dan 443 (HTTPS).

Jun  3 23:48:20 lamp kernel: *Blokir Trafik HTTP* IN=eth0 OUT= MAC=00:0c:29:03:8f:2d:00:0c:29:fa:93:f6:08:00 SRC=192.168.160.145 DST=192.168.160.30 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=28829 DF PROTO=TCP SPT=45996 DPT=80 WINDOW=29200 RES=0x00 SYN URGP=0
Jun  3 23:48:24 lamp kernel: *Blokir Trafik HTTP* IN= OUT=eth0 SRC=192.168.160.30 DST=104.21.30.34 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=8322 DF PROTO=TCP SPT=52702 DPT=80 WINDOW=29200 RES=0x00 SYN URGP=0 UID=1002 GID=1002

Anda juga dapat menerapkan aturan firewall tersebut untuk user Linux tertentu berdasarkan UID.

iptables -N LOGDROPIN
iptables -A INPUT -p tcp -m multiport --dports 80,443 -j LOGDROPIN
iptables -A OUTPUT -p tcp -m multiport --dport 80,443 -m owner --uid-owner 1002 -j LOGDROPIN
iptables -A LOGDROPIN -j LOG --log-prefix "*Blokir Trafik HTTP* " --log-uid
iptables -A LOGDROPIN -j DROP

Untuk menampilkan LOG trafik keluar pada user Linux teertentu berdasarkan UID.

iptables -N LOGACCIN
iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m owner --uid-owner 1002 -j LOGACCIN
iptables -A LOGACCIN -j LOG --log-prefix "*INFO TRAFIK* " --log-uid
iptables -A LOGACCIN -j ACCEPT

Log yang akan didapat.

Jun  3 23:56:53 lamp kernel: *INFO TRAFIK* IN= OUT=eth0 SRC=192.168.160.30 DST=172.67.150.119 LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=21276 DF PROTO=TCP SPT=34368 DPT=80 WINDOW=239 RES=0x00 ACK FIN URGP=0 UID=1002 GID=1002

Untuk melakukan trace IP tertentu di seluruh chain iptables.

iptables -t raw -A PREROUTING -s 192.168.160.41 -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j TRACE

Lalu cek trace IP menggunakan xtables-monitor.

# xtables-monitor -t
PACKET: 2 5faa8904 IN=eth0 MACSRC=52:54:0:30:67:b6 MACDST=52:54:0:9c:52:a4 MACPROTO=0800 SRC=192.168.160.41 DST=192.168.160.30 LEN=60 TOS=0x0 TTL=64 ID=43395 DF SPORT=51172 DPORT=22 SYN
 TRACE: 2 5faa8904 raw:PREROUTING:rule:0x3:CONTINUE  -4 -t raw -A PREROUTING -s 192.168.160.41/32 -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j TRACE
 TRACE: 2 5faa8904 raw:PREROUTING:return:
 TRACE: 2 5faa8904 raw:PREROUTING:policy:ACCEPT

Example Blocking Rules
#

Blokir IP tertentu yang mengakses port 80 (HTTP) dan 443 (HTTPS).

iptables -A INPUT -s 192.168.0.0/16 -p tcp --match multiport --dport 80,443 -j DROP

Untuk menambahkan comment ke aturan firewall.

iptables -A INPUT -s 192.168.0.0/16 -m comment --comment "Private IP Block"

Untuk mengizinkan 2 koneksi SSH per host klien.

iptables -I INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 2 -j REJECT
Opsi –syn digunakan agar koneksi yang telah dibuat sebelumnya tidak terputus saat melebihi jumlah yang telah ditentukan.

Untuk membatasi koneksi dan memblokir IP dalam waktu tertentu.

iptables -N PORTFLOOD
iptables -A INPUT -p tcp -m tcp --dport 80 -m conntrack --ctstate NEW -j PORTFLOOD
iptables -A PORTFLOOD -m recent --set --name portflood
iptables -A PORTFLOOD -m recent --update --seconds 300 --hitcount 20 --name portflood -j LOG --log-prefix "*BLOCK FLOOD* "
iptables -A PORTFLOOD -m recent --update --seconds 300 --hitcount 20 --name portflood -j DROP
Opsi –seconds untuk menentukan berapa lama IP tersebut diblokir. misal 300 = 5 menit.

Untuk memblokir semua permintaan MX dengan IPtables.

iptables -A OUTPUT -p udp --dport 53 --match string --algo kmp --hex-string '|00000f0001|' -j DROP

Untuk memblokir semua permintaan MX google.com dengan IPtables.

iptables -I OUTPUT -p udp --dport 53 -m string --algo kmp --hex-string "|06|google|03|com|00 000F|" -j DROP
06 merupakan jumlah karakter bytes bagian google, sedangkan 03 adalah jumlah karakter bytes TLD. 000F adalah HEX dari decimal 15 yang merupakan type id record MX.

Untuk memblokir trafik masuk HTTP berdasarkan MAC address. Hanya berlaku pada chain PREROUTING, FORWARD atau INPUT.

iptables -A INPUT -p tcp -m tcp --dport 80 -m mac --mac-source 00:0C:29:DB:B5:67 -j ACCEPT

Untuk memblokir trafik masuk HTTP berdasarkan list IP pada IPset.

iptables -A INPUT -p tcp -m tcp --dport 80 -m set --match-set dame_judol src,dst -j DROP

Untuk memblokir koneksi paket dengan status INVALID.

iptables -A INPUT -p tcp -m conntrack --ctstate INVALID -j DROP
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp -m conntrack --ctstate INVALID -j DROP
iptables -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 80 -j ACCEPT

Untuk mencegah serangan ping flood.

iptables -A INPUT -p icmp -m icmp --icmp-type 8 -m limit --limit 1/sec -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j DROP

Untuk melindungi server dari upaya DOS paket SYN TCP.

iptables -A INPUT ! -i lo -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j SYNFLOOD
iptables -A SYNFLOOD -m limit --limit 100/sec --limit-burst 150 -j RETURN
iptables -A SYNFLOOD -m limit --limit 30/min -j LOG --log-prefix "*BLOCK SYNFLOOD* "
iptables -A SYNFLOOD -j DROP

Example load balancer rule
#

Server Load Balancer

  • IP: 192.168.160.30

Web Server 1

  • IP: 192.168.160.42

Web Server 2

  • IP: 192.168.160.43

Sebelum menerapkan rule load balancer, pastikan Server Load Balancer telah disetting ip_forwarding.

sysctl net.ipv4.ip_forward=1

Untuk rule load balancing dengan metode random balancing.

iptables -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -m statistic --mode random --probability 0.33 -j DNAT --to-destination 192.168.160.42
iptables -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.160.43
iptables -A POSTROUTING -o eth0 -p tcp -m tcp -j SNAT --to-source 192.168.160.30

Untuk rule load balancing dengan metode round robin.

iptables -t nat -A PREROUTING -p tcp -m tcp -i eth0 --dport 80 -m statistic --mode nth --every 2 --packet 0 -j DNAT --to-destination 192.168.160.42
iptables -t nat -A PREROUTING -p tcp -m tcp -i eth0 --dport 80 -j DNAT --to-destination 192.168.160.43
iptables -t nat -A POSTROUTING -p tcp -m tcp -o eth0 -j SNAT --to-source 192.168.160.30

Opsi --every disetting bertingkat sesuai jumlah web server. Misal jika memiliki 4 web server maka aturan yang digunakan seperti berikut.

iptables -t nat -A PREROUTING -p tcp -m tcp -i eth0 --dport 80 -m statistic --mode nth --every 3 --packet 0 -j DNAT --to-destination 192.168.160.42
iptables -t nat -A PREROUTING -p tcp -m tcp -i eth0 --dport 80 -m statistic --mode nth --every 2 --packet 0 -j DNAT --to-destination 192.168.160.43
iptables -t nat -A PREROUTING -p tcp -m tcp -i eth0 --dport 80 -m statistic --mode nth --every 1 --packet 0 -j DNAT --to-destination 192.168.160.44
iptables -t nat -A PREROUTING -p tcp -m tcp -i eth0 --dport 80 -j DNAT --to-destination 192.168.160.45

Referensi:

Related

Install Hugo on Linux
·1 min
hugo hugo linux
How to Block IP Targeting Specific Domains
·2 mins
linux linux
Create Bridges on Bonds with and without VLANs using NetworkManager
·1 min
centos linux centos
Compiling Custom Kernel Modules
·3 mins
linux linux centos
Reinstalling GRUB Bootloader
·1 min
linux linux centos
Troubleshoot grub2-install: error: unknown filesystem
·2 mins
linux linux