Wednesday, June 3, 2009

Gateway Ubuntu dengan firewall, transparent-proxy, dan filtering (part3)

..sebelumnya..

3. Buat file konfigurasi firewall-nya.

Keluarga *NIX memiliki sebuah program yang mampu melakukan packet filtering dengan sangat baik dan cocok untuk membangun sebuah personal firewall, ialah iptables. Informasi lengkap tentang iptables dapat Anda temukan di netfilter.org.

Pertama, tentukan di mana Anda akan menyimpan file tersebut. Dalam contoh ini kita akan menyimpannya di etc/firewallku.bash.

sudo gedit /etc/firewallku.bash

Agar file ini mudah diubah nantinya, kita akan memakai variabel untuk beberapa hal.

#! /bin/sh

# SET VARIABLES
INTERNET_IP="192.168.1.2"
INTERNAL_IP="192.168.0.1"
INTERNAL_NETWORK="192.168.0.0/24"
INTERNET_IFACE="eth1"
INTERNAL_IFACE="eth0"
SQUID_PORT="8888"


Berikutnya, cegah IP spoofing dan tolak icmp

# No spoofing !!!
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]
then
for filtre in /proc/sys/net/ipv4/conf/*/rp_filter
do
echo 1 > $filtre
done
fi

# No icmp
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts


Kemudian, load semua modul yang dibutuhkan

modprobe ip_tables
modprobe ip_nat_ftp
modprobe ip_nat_irc
modprobe ip_conntrack_irc
modprobe ip_conntrack_ftp
modprobe iptable_filter
modprobe iptable_nat


Flush dan hapus semua chain iptables.

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X


Set default behaviour, yakni DROP ALL untuk keamanan.

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP


Buat chain baru untuk firewall kita.

iptables -N FIREWALL
iptables -N TRUSTED
iptables -N FIRE_FWD


Buat log untuk packet yang di-DROP.

iptables -N LOG_DROP
iptables -A LOG_DROP -j LOG --log-prefix '[IPTABLES DROP] : '


Di sinilah DROP benar-benar dilakukan.

iptables -A LOG_DROP -j DROP

Izinkan ESTABLISHED dan RELATED connections.

iptables -A FIREWALL -i $INTERNET_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT

Izinkan self-communication.

iptables -A FIREWALL -i lo -j ACCEPT
iptables -A FIREWALL -o lo -j ACCEPT


Semua packet akan disaring oleh TRUSTED chain.

iptables -A FIREWALL -j TRUSTED

LOG, kemudian DROP semua packet lainnya.

iptables -A FIREWALL -j LOG_DROP

Kirim semua packet melalui FIREWALL (dan kemudian ke TRUSTED).

iptables -A INPUT -j FIREWALL
iptables -A OUTPUT -j FIREWALL


Sampai di sini, semua packet kecuali yang berstatus RELATED dan ESTABLISHED akan di DROP. Untuk mengizinkan paket-paket tertentu, kita perlu melakukannya satu-persatu.


## ALLOWED LIST ##
# Allow dns
iptables -A TRUSTED -o $INTERNET_IFACE -p tcp -m tcp --dport 53 -j ACCEPT
iptables -A TRUSTED -o $INTERNET_IFACE -p udp -m udp --dport 53 -j ACCEPT

# Allow http
iptables -A TRUSTED -o $INTERNET_IFACE -m state --state NEW,ESTABLISHED,RELATED -p tcp --dport 80 -j ACCEPT

# Allow https
iptables -A TRUSTED -o $INTERNET_IFACE -p udp -m udp --dport 443 -j ACCEPT
iptables -A TRUSTED -o $INTERNET_IFACE -p tcp -m tcp --dport 443 -j ACCEPT

# allow SQUID
# allow INPUT FROM LAN to SQUID
iptables -A TRUSTED -i $INTERNAL_IFACE -m state --state NEW,ESTABLISHED,RELATED -p tcp --dport $SQUID_PORT -j ACCEPT
iptables -A TRUSTED -o $INTERNAL_IFACE -m state --state ESTABLISHED,RELATED -p tcp -m tcp --sport $SQUID_PORT -j ACCEPT


Kode di atas adalah konfigurasi minimal. Anda mungkin perlu membuka port untuk aplikasi lain seperti SSH dan Messenger. Daftar port terdapat di http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers. Anda dapat juga mencarinya di Google dengan keyword 'nama_aplikasi iptables'.

Berikutnya merupakan bagian terpenting yang memastikan Internet Connection Sharing Anda berjalan dengan baik.

Prerouting semua web traffic (yakni port 80) ke squid server.

iptables -t nat -A PREROUTING -i $INTERNAL_IFACE -p tcp --dport 80 -j REDIRECT --to-port $SQUID_PORT

ICS untuk semua selain web traffic. FIRE_FWD adalah chain filter khusus untuk FORWARD chain.

iptables -A FORWARD -i $INTERNAL_IFACE -o $INTERNET_IFACE -s $INTERNAL_NETWORK -m state --state NEW -j FIRE_FWD
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -j MASQUERADE


Firewall untuk ICS sebaiknya berbeda dengan firewall untuk gateway.


#izinkan Yahoo Messenger
iptables -A FIRE_FWD -p tcp -m tcp --dport 5050 -j ACCEPT

#smtp
iptables -A FIRE_FWD -p tcp -m tcp --dport 25 -j ACCEPT
iptables -A FIRE_FWD -p tcp -m tcp --dport 465 -j ACCEPT

#pop3
iptables -A FIRE_FWD -p tcp -m tcp --dport 110 -j ACCEPT
iptables -A FIRE_FWD -p tcp -m tcp --dport 995 -j ACCEPT
iptables -A FIRE_FWD -p tcp -m udp --dport 110 -j ACCEPT
iptables -A FIRE_FWD -p tcp -m udp --dport 995 -j ACCEPT

#ftp
iptables -A FIRE_FWD -p tcp -m tcp --dport 21 -j ACCEPT


DROP packet lainnya yang berada di FORWARD chain.

iptables -A FIRE_FWD -j LOG --log-prefix '[FWD_DROP]: '
iptables -A FIRE_FWD -j DROP



,,bersambung,,



references:
Great thanks to frodon at ubuntuforums.org: http://ubuntuforums.org/showthread.php?t=668148

No comments:

Post a Comment