Install Proxy Server dengan Ubuntu Server

Berikut ini kita akan men-setup sebuah proxy dengan konfigurasi sebagai berikut:

Nama Host: proxy.ibii.ac.id
IP Eksternal: 192.168.0.1
IP Internal: 192.168.3.1

Install Ubuntu Server seperti biasa

  • Untuk partisi gunakan LVM
  • Buat user admin
  • Login user admin
  • Buat password root
sudo passwd
  • Login user root
  • Disable sudo jalankan visudo dan comment akses group admin seperti dibawah ini:
#%admin ALL=(ALL) ALL
  • edit /etc/apt/sources.list (gunakan repository kambing.vlsm.org dan aktifkan universe dan multiverse)
  • update
aptitude update
aptitude dist-upgrade
  • aptitude install screen patch bzr make
  • cd /etc
  • bzr init
  • vi .bzrignore
./adjtime
./ld.so.*
./.pwd.lock
./mtab
./group-
./passwd-
./shadow-
./gshadow-
*/supervise
data.cdb
  • bzr add .
  • bzr commit -m START
  • Tambahkan setting network internal ke /etc/network/interfaces
auto eth1
iface eth1 inet static
       address 192.168.3.1
       netmask 255.255.255.0
  • Tambahkan nama lengkap hostname kita ke /etc/hosts
192.168.0.1    proxy.ibii.ac.id proxy
  • Restart Network
/etc/init.d/networking restart
  • Test Konfigurasi
ifconfig eth1
hostname -f
  • Simpan di sistem revisi
cd /etc
bzr commit -m "Setting Network"
  • aptitude install openssh-server
  • Simpan di sistem revisi
bzr add /etc
bzr commit -m "Install SSH" /etc

Kita perlu mengamankan SSH dengan menolak root login melalui SSH. (Untuk menjadi root harus lewat su).

  • Edit file /etc/ssh/sshd_config dan ubah baris sehingga menjadi seperti ini
PermitRootLogin no
  • Simpan di sistem revisi
bzr commit -m "Setup SSH" /etc

Shorewall adalah sebuah software untuk mengkonfigurasikan iptables (fitur firewall kernel linux) dengan mudah. Untuk lengkapnya lihat http://shorewall.net . Ubuntu Dapper menyediakan shorewall versi 3.0.4.

  • aptitude install shorewall
  • Simpan di sistem revisi
bzr add /etc
bzr commit -m "Install Shorewall" /etc

Kita akan mensetup shorewall untuk konfigurasi two interfaces. Lihat http://shorewall.net/two-interface.htm untuk lebih detailnya.

  • cd /etc/shorewall
  • Salin dari contoh two-interfaces dan beberapa file dari default-config
cp /usr/share/doc/shorewall/examples/two-interfaces/* .
cp /usr/share/doc/shorewall/default-config/{start,blacklist,maclist} .
gunzip *.gz
rm -f README.txt
  • Edit /etc/shorewall/shorewall.conf ubah baris sehingga seperti ini:
IP_FORWARDING=On
  • Edit /etc/shorewall/interfaces ubah baris sehingga seperti ini
#ZONE   INTERFACE       BROADCAST       OPTIONS
net     eth0            detect          tcpflags,routefilter,nosmurfs,logmartians
loc     eth1            detect          dhcp,tcpflags,detectnets,nosmurfs

Jika IP external anda adalah IP Publik tambahkan norfc1918 ke bagian OPTIONS.

  • Edit /etc/shorewall/masq ubah baris sehingga seperti ini
#INTERFACE             SUBNET          ADDRESS         PROTO   PORT(S) IPSEC
eth0                    eth1           192.168.0.1
  • Edit /etc/shorewall/policy ubah baris sehingga seperti ini
#SOURCE        DEST            POLICY          LOG LEVEL       LIMIT:BURST
loc            net             DROP            debug
fw             net             REJECT          info
fw             loc             ACCEPT
net            all             DROP            info
# THE FOLLOWING POLICY MUST BE LAST
all            all             REJECT          info
#LAST LINE -- ADD YOUR ENTRIES ABOVE THIS LINE -- DO NOT REMOVE
  • Edit /etc/shorewall/rules ubah baris sehingga seperti ini
################################################################################
#ACTION                SOURCE  DEST    PROTO   DEST    SOURCE  ORIGINAL        RATE    USER/
#                                      PORT    PORT(S) DEST            LIMIT   GROUP

#= Transparent Proxy ===========================================================
#REDIRECT      loc     3128    tcp     80      -       !192.168.0.1
# Coral CDN
#REDIRECT      loc     3128    tcp     8080    -       !192.168.0.1
#REDIRECT      loc     3128    tcp     8090    -       !192.168.0.1

#= Allow Ping to and from Firewall =============================================
ACCEPT         $FW     loc     icmp
ACCEPT         $FW     net     icmp
Ping/ACCEPT    loc     $FW
# Disable if flooded
Ping/ACCEPT    net     $FW

#= Net to Firewall =============================================================
SSH/ACCEPT     net     $FW

#= Firewall to Net =============================================================
DNS/ACCEPT     $FW     net
SSH/ACCEPT     $FW     net
Web/ACCEPT     $FW     net
FTP/ACCEPT     $FW     net
NTP/ACCEPT     $FW     net
SMTP/ACCEPT    $FW     net
Trcrt/ACCEPT   $FW     net
# Proxy
ACCEPT         $FW     net     tcp     8080,3128
ACCEPT         $FW     net     udp     3130,4827
# Coral CDN
ACCEPT         $FW     net     tcp     8090

#= Local to Firewall ===========================================================
DNS/ACCEPT     loc     $FW
SSH/ACCEPT     loc     $FW
ACCEPT         loc     $FW     tcp     3128

#= Local to Net ================================================================
DNS/ACCEPT     loc     net
Web/ACCEPT     loc     net
FTP/ACCEPT     loc     net
SSH/ACCEPT     loc     net
Telnet/ACCEPT  loc     net
NTP/ACCEPT     loc     net
POP3/ACCEPT    loc     net
IMAP/ACCEPT    loc     net
Trcrt/ACCEPT   loc     net
CVS/ACCEPT     loc     net
# SMTP: Hati-hati virus mengirim banyak email!
ACCEPT:debug   loc     net     tcp     25      -       -       1/sec
# Ping: Hati-hati virus mem-ping keluar!
ACCEPT:debug   loc     net     icmp    8       -       -       10/sec
# Yahoo Messenger
ACCEPT         loc     net     tcp     5000,5001,5050,5100,5101
ACCEPT         loc     net     udp     370
# MSN
ACCEPT         loc     net     tcp     1863
ACCEPT         loc     net     udp     7001
# AIM
ACCEPT         loc     net     tcp     5190
ACCEPT         loc     net     udp     5140
# Jabber/Google Talk
JabberPlain/ACCEPT loc net
JabberSecure/ACCEPT loc        net
# MS Streaming
ACCEPT         loc     net     tcp     1755
ACCEPT         loc     net     udp     1755
# Real
ACCEPT         loc     net     tcp     554
ACCEPT         loc     net     udp     7070

#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
  • Edit /etc/shorewall/start dan ubah baris sehingga seperti berikut
###############################################################################
dmesg -n 4
#LAST LINE - ADD YOUR ENTRIES ABOVE THIS ONE - DO NOT REMOVE

Baris tersebut berguna untuk menghilangkan pesan kernel yang tidak kritikal dari console.

  • Edit /etc/default/shorewall dan ubah baris bersesuaian sehingga seperti berikut
startup=1
  • Restart shorewall
/etc/init.d/shorewall restart
  • Simpan di sistem revisi
bzr add /etc
bzr commit -m "Setup Shorewall" /etc
  • Test dari client: set gateway ke IP 192.168.3.1 dengan DNS sama dengan DNS server, apakah bisa ke internet atau tidak.
  • TODO: djbdns-installer
  • dpkg -i daemontools_0.76-9_i386.deb djbdns_1.05-11_i386.deb
  • Simpan di sistem revisi
bzr add /etc
bzr commit -m "Install DJBDNS" /etc
  • dnscache-conf-fhs dnscache dnslog /etc/dnscache 192.168.3.1
  • echo 1 > /etc/dnscache/env/FORWARDONLY
  • Edit file /etc/dnscache/root/servers/@ dan tambahkan DNS server (satu IP satu baris) di baris paling atas
  • touch /etc/dnscache/root/ip/192.168.3
  • ln -s /etc/dnscache /var/lib/svscan/
  • svstat /etc/dnscache/

Harus tampil up (pid XXXX) X seconds

  • Edit file /etc/resolv.conf tambahkan di baris paling atas
nameserver 192.168.3.1
  • Testing
env DNSCACHEIP=192.168.3.1 dnsqr a google.com