Menerapkan filter mac address dengan iptables

Dari IgosCenter

Langsung ke: Navigasi, Cari

Satu lagi artikel untuk para admin jaringan nih, kali ini saya akan mencoba menjelaskan langkah demi langkah untuk melakukan filter MAC address dengan menggunakan iptables. Pertanyaannya buat apa sih kita pake filter-filter segala ?? jawabannya adalah sebagai langkah pengamanan jaringan komputer yang kita kelola. Dengan menerapkan filtering MAC address, kita dapat memastikan komputer mana saja yang dapat terhubung dan menggunakan jaringan komputer. Pertama-tama mari kita lihat definisi dari MAC address.

MAC Address (Media Access Control Address) adalah sebuah alamat jaringan yang diimplementasikan pada lapisan data-link dalam OSI Reference Model tujuh lapisan model OSI, yang merepresentasikan sebuah node tertentu dalam jaringan. Dalam sebuah jaringan berbasis Ethernet, MAC address merupakan alamat yang unik yang memiliki panjang 48-bit (6 byte) yang mengidentifikasikan sebuah komputer, interface dalam sebuah router, atau node lainnya dalam jaringan. MAC Address juga sering disebut sebagai Ethernet address, physical address, atau hardware address. from : (http://id.wikipedia.org/wiki/MAC_address)

Lumayan berat kan bahasanya :p, sederhananya sih mac address itu adalah nama/alamat dari interface jaringan yang kita miliki. Mau itu ethernet,Wireless ethernet,Modem, pasti semuanya punya MAC address :). Cara untuk melihat mac address adalah dengan mengetikan perintah ifconfig. Ayo kita coba :

ifconfig 

maka akan muncul informasi sebagai berikut :


Informasi MAC address dapat dilihat pada pada tulisan Hwaddr yang biasanya ditulis dengan format 2 digit angka yang dipisahkan titik dua (:). Contohnya seperti 00:19:21:c5:29:83
Mari kita beranjak ke teknis cara filtering
Pertama-tama kita harus membuat skrip iptables yang akan disimpan di direktori /etc/init.d/ :

nano /etc/init.d/iptables 

Isi skripnya adalah sebagai berikut :

#!/bin/sh
# Start/stop/restart firewall
# Minimal ip.tables for router.45
iptables="/sbin/iptables" 
modprobe="/sbin/modprobe" 
SERVIS="/etc/iptables/servis"
MACFILE="/etc/iptables/macfile"
# Start firewall
firewall_start() {
   # enable ip_conntrack
   $modprobe ip_conntrack
   $modprobe ip_conntrack_ftp
   # tcp properties
   echo 1 > /proc/sys/net/ipv4/ip_forward
   echo 1 > /proc/sys/net/ipv4/tcp_syncookies
   echo "Starting firewall.. "
   # flush rules
   $iptables -F
   $iptables -X
   $iptables -Z  
   #$iptables -t nat -F
   #$iptables -t nat -X
   #$iptables -t nat -Z    
   # default policy
   $iptables -P INPUT ACCEPT
   $iptables -P FORWARD DROP
   $iptables -P OUTPUT ACCEPT
   # Aktifkan service sesuai dengan list yang di ijinkan
   # Service dibatasi hanya untuk lingkungan / Segmen Tertentu
#    if [ -e $SERVIS ]; then  
#      while read line
#	do
#	  servis="$(echo $line | cut -d " " -f1)"
#	  protokol="$(echo $line | cut -d " " -f2)"
#	  alamat="$(echo $line | cut -d " " -f3)"
#	  # Servis yang di ijinkan
#	  #$iptables -A INPUT -p $protokol -m $protokol -s $alamat --dport $servis -j ACCEPT
#	  $iptables -A INPUT -p $protokol -m $protokol -s ! $alamat --dport $servis -j DROP
#	done < $SERVIS
#   fi
   ## ATURAN FORWARD
   $iptables -A FORWARD -p tcp --dport 135:139 -j DROP
   $iptables -A FORWARD -p udp --dport 135:139 -j DROP
   $iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
   ## Filter registered MAC & IP
if [ -e $MACFILE ]; then 
   while read line
    do
     macaddr="$(echo $line | cut -d " " -f1)"
     #ipaddr="$(echo $line | cut -d " " -f2)"
     # Allow registered MAC & IP
     $iptables -A FORWARD -m mac --mac-source $macaddr -j ACCEPT
      done < $MACFILE
     fi
#  $iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
   #$iptables -t nat -A PREROUTING -i br0 -p tcp --dport 80 -j REDIRECT --to-port 8080
   #$iptables -t nat -A PREROUTING -i br0 -p tcp --dport 3128 -j REDIRECT --to-port 8080
   #$iptables -t nat -A PREROUTING -i br0 -p tcp --dport 80 -j REDIRECT --to-port 3128
}
firewall_stop() {
   echo "Shutting down firewall.. "
   # disable tcp syncookies
   echo 0 > /proc/sys/net/ipv4/tcp_syncookies 
   # accept default policy
   $iptables -F
   $iptables -X
   $iptables -Z
   $iptables -P INPUT ACCEPT
   $iptables -P OUTPUT ACCEPT
   $iptables -P FORWARD DROP
}
firewall_restart() {
   firewall_stop
   firewall_start
}
firewall_status() {
   $iptables -n -L
}
case "$1" in
'start' )
  firewall_start
  ;;
'stop' )
  firewall_stop
  ;;
'restart' )
  firewall_restart
  ;;
'status' )
  firewall_status
  ;;
*)
  echo "usage $0 start|stop|restart|status"
esac 


Kalo sudah selesai jangan lupa menyimpan file dan ubah mode-nya menjadi 755

cd /etc/init.d/
sudo chmod 755 iptables


Langkah kedua adalah membuat aturan Service dan Macfile sesuai dengan yang ada di baris skrip iptables yang sebelumnya kita buat (SERVIS="/etc/iptables/servis" MACFILE="/etc/iptables/macfile")

cd /etc
sudo mkdir iptables
cd iptables 

Membuat file macfile untuk list filter MAC address

nano macfile

Isi file macfile :

00:1f:29:bd:1e:a2       nama-komputer      #20101025
00:00:00:00:00:00       #DUMMY, MASUKAN MAC ADDRESS SEBELUM BARIS INI + TGL

Formatnya adalah MAC address,nama komputer,dan tanggal modifikasi
Setelah selesai save file dan buatlah file servis

nano servis

Isi filenya sebagai berikut :

137 udp 192.168.1.0/26         netbios-ns
138 udp 192.168.1.0/26         netbios-dgm
139 tcp 192.168.1.0/26          netbios-ssn
445 tcp 192.168.1.0/26          microsoft-ds
3306 tcp 192.168.1.0/26        mysql
3306 udp 192.168.1.0/26       mysql

Isi dari file servis memungkinkan kita untuk melakukan filter terhadap port yang diperbolehkan bekerja pada iptables. Setelah disimpan
Selanjutnya ubahlah mode file macfile dan servis

cd /etc/iptables
sudo chmod 755 macfile
sudo chmod 755 servis

kita lakukan restart pada iptables.

sudo /etc/init.d/iptables restart

Jika berhasil dan tidak ada error akan muncul tampilan sebagai berikut :

Done,, filtering MAC addressnya sudah berfungsi, itu artinya MAC address yang tidak didaftarkan di file /etc/iptables/macfile tidak akan dapat menggunakan service server :)


From [1]

Command Description
# iptables -t filter -L show all chains of filtering table
# iptables -t nat -L show all chains of nat table
# iptables -t filter -F clear all rules from filtering table
# iptables -t nat -F clear all rules from table nat
# iptables -t filter -X delete any chains created by user
# iptables -t filter -A INPUT -p tcp --dport telnet -j ACCEPT allow telnet connections to input
# iptables -t filter -A OUTPUT -p tcp --dport http -j DROP block HTTP connections to output
# iptables -t filter -A FORWARD -p tcp --dport pop3 -j ACCEPT allow POP3 connections to forward chain
# iptables -t filter -A INPUT -j LOG --log-prefix Logging on input chain
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE configure a PAT (Port Address Traslation) on eth0 masking outbound packets
# iptables -t nat -A PREROUTING -d 192.168.0.1 -p tcp -m tcp --dport 22 -j DNAT --to-destination 10.0.0.2:22 redirect packets addressed to a host to another host

Kontributor: Dwiharyanto, Estiyand

(c) Igos Center Bandung, 2009