Dari IgosCenter
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