Limitasi Bandwidth + Mac IP Filtering in Linux Server

Limitasi Bandwidth
Pada praktek kali ini, proses limitasi bandwidth saya akan menggunakan squid berdasarkan delay pools diamana saya membuat aturan sebagai berikut
  • Limitasi berdasarkan IP Address dimana IP admin : 192.168.0.2-192.168.0.10/24 dan IP user : 192.168.0.11-192.168.0.254/24
  • Untuk admin mendapatkan full bandwidth alias tanpa limitasi sedangkan untuk user limitasi berjalan ketika ada user yang mendownload file lebih dari 5Mbps, jadi apabila file melebihi 5Mbps maka bandwidth untuk user maksimum menjadi 9 Kbps
dengan asumsi PC telah selesai terinstall Ubuntu server :

1. Setting interfaces sesuai topologi jaringan anda, pada praktek ini saya menggunakan settinggan interface sebagai berikut
root@goestoe:/# nano /etc/network/interfaces

auto eth0
iface eth0 inet static
address 192.168.10.188
netmask 255.255.255.0
network 192.168.10.0
broadcast 192.168.10.255
gateway 192.168.10.100
dns-nameservers 202.134.0.155
auto eth1
iface eth1 inet static
address 192.168.0.1
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255

Catatan : Apabila anda tidak menginstall dns maka agar squid dapat berjalan maka sebaiknya pada interface eth1 ditambahkan dns-nameservers lalu nantinya pada resolv.conf juga ditambahkan nameservers


2. Selanjutnya aktifkan packet forward ipv4 pada file sysctl.conf
root@goestoe:/# nano /etc/sysctl.conf
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

3. Tambahkan iptables pada rc.local untuk masquerade paket ke default interface
root@goestoe:/# nano /etc/rc.local
iptables -A POSTROUTING -t nat -o eth0 -j MASQUERADE
exit 0


4. Tambahkan nameserver pada file resolv.conf
root@goestoe:/# nano /etc/resolv.conf
nameserver 202.134.0.155


5. Selanjutnya kita mulai mamasuki squid, pertama kita install dahulu paket squid tersebut lalu edit file squid.conf
root@goestoe:/# apt-get install squid
root@goestoe:/# nano /etc/squid/squid.conf
http_port 3128 transparent
cache_mem 32 MB
cache_dir ufs /var/spool/squid 1600 4 256
negative_ttl 2 minutes
maximum_object_size 1024 KB
minimum_object_size 4 KB
cache_swap_low 80
cache_swap_high 100
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
acl clients src 192.168.0.0/24
acl admin src 192.168.0.2-192.168.0.10/32
acl user src 192.168.0.11-192.168.0.254/32
acl ftp proto FTP

acl download url_regex -i \.avi$\.mpg$\.mpeg$\.rm$\.iso$\.wav$\.mov$\.dat$\.mpe$
acl download url_regex -i ftp \.exe$\.mp3$\.mp4$\.tar.gz$\.tar.bz2$\.rpm$\.zip$$
acl download url_regex –I \.midi$\.rmi$\.wma$\.wmv$\.ogg$\.ogm$\.m1v$\.mp2$\.mp$
acl download url_regex -i \.m3u$\.asx$\.wpl$\.wmx$\.dvr-ms$\.snd$\.au$\.aif$\.a$
acl download url_regex -i \.m2p$\.ts$\.tp$\.trp$\.div$\.divx$\.mod$\.vob$\.aob$$
acl download url_regex -i \.ac3$\.cda$\.vro$\.deb$\.mkv$

delay_pools 2

delay_class 1 1
delay_parameters 1 -1/-1
delay_access 1 allow admin
delay_access 1 deny all

delay_class 2 1
delay_parameters 2 9000/500000
delay_access 2 allow user
delay_access 2 allow user download
delay_access 2 deny all

http_access allow ftp
http_access allow clients 
http_access deny all


6. Tambahkan iptables pada rc.local agar semua paket yang direquest oleh client yang melalui interface local dipaksa / redirect untuk melalui port 3128 / proxy
root@goestoe:/# nano /etc/rc.local
iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 80 -j REDIRECT –to-port 3128


7. Langkah terakhir restart PC lalu test download pada clients dan lihat perbedaan transfer rate antara admin dengan user, tapi sebaiknya agar lebih aman kita tambahkan Mac dan IP filtering agar tidak ada user ynag menggunakan IP admin


Mac & IP filtering
1. Pada proses Mac IP filtering kali ini saya akan menggunakan script yang akan di eksekusi pada file /etc/network/filter.rules dengan isi script sebagai berikut
#!/bin/bash
# Bash script Firewall with IP Address and MAC Address Filtering
###### VARIABLE
files=”/etc/network/clientsfilter.list”                                                  
device=eth1                                                      
device_inet=eth0                                           
                                                     
http=80
proxy=3128
####### SCRIPT
echo “FIREWALL STATUS: All Firewall Drop & Reset”
/sbin/iptables -t mangle -F
/sbin/iptables -t nat -F
/sbin/iptables -t filter -F
/sbin/iptables -t filter -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT

echo “FIREWALL STATUS: Drop all PREROUTING on $device”
/sbin/iptables -t nat -I PREROUTING -i $device -j DROP

echo “FIREWALL STATUS: Drop all FORWARD on $device”
/sbin/iptables -t filter -I FORWARD -i $device -j DROP
echo “FIREWALL STATUS: IP & MAC Filtering on device $device”
echo “FIREWALL STATUS: Allow access for IP-ADDRESS and MAC-ADDRESS: “

cat $files | while read ip_address mac_address client; do
/sbin/iptables -A INPUT -t filter -i $device -s $ip_address -m mac –mac-source $mac_address -j ACCEPT
/sbin/iptables -I PREROUTING -t nat -i $device -s $ip_address -m mac –mac-source $mac_address -j ACCEPT
/sbin/iptables -t nat -I PREROUTING -i $device -s $ip_address -p tcp -m tcp –dport $http -j REDIRECT –to-ports $proxy
/sbin/iptables -t nat -I PREROUTING -i $device -s $ip_address -p udp -m udp –dport $http -j REDIRECT –to-ports $proxy
/sbin/iptables -I FORWARD -i $device -s $ip_address -m mac –mac-source $mac_address -j ACCEPT
/sbin/iptables -t nat -A POSTROUTING -s $ip_address -o $device_inet -j MASQUERADE
echo “$ip_address [$mac_address] => $client”
done

echo “FIREWALL STATUS: Drop all INPUT on $device”
/sbin/iptables -t filter -A INPUT -i $device -j DROP

echo “FIREWALL STATUS: Accept all INPUT on $device_inet”
/sbin/iptables -t filter -A INPUT -i $device_inet -j ACCEPT


2. Buat file /etc/network/clientsfilter.list sebagai database yg berisi MAC-ADDRESS client dgn IP yg telah di tentukan, contoh:
192.168.0.13    B8:70:F4:12:D3:CB   Mar-LAN
192.168.0.3     68:A3:C4:9F:BE:8F   Mar-WLAN


3. Beri chmod a+x  untuk file /etc/network/filter.rules
chmod a+x file1 file2 (Give execute permission to everybody)
root@goestoe:/# chmod a+x /etc/network/filter.rules


4. Agar setiap kali reboot atau startup program langsung jalan maka buka file /etc/rc.local dan tambahkan /etc/network/filter.rules pada baris terakhir tetapi hapus baris exit 0
root@goestoe:/# nano /etc/rc.local
# By default this script does nothing.
/etc/network/filter.rules
exit 0


5. Langkah terakhir reboot server lalu tes apakah mac filter sudah berjalan atau belum, untuk hasil akan dicantumkan pada bab berikutnya


Untuk lebih jelasnya saya berikut adalah video tutorialnya…





Previous
Next Post »