Sabtu, 23 Juni 2012

Transparent Proxy with TProxy & Bridging Squid using Ubuntu 12.04 TLS

Berikut rancangan topologi jaringan yang akan dibuat:



Adapun alasan menggunakan topologi di atas adalah sbb:
1. Proxy dibuat transparent agar tidak ada setingan apapun disisi users/client
2. Proxy dibuat bridging untuk menghemat pemakaian IP (karena hanya menggunakan 1 IP address)
3. Proxy dibuat tproxy agar mempermudah bandwidth management di mikrotik/router karena disisi proxy tidak di NAT sehingga IP users akan langsung terbaca disisi mikrotik/router
4. Keuntungan lainnya adalah apabila Proxy Server “bermasalah”, dari switch dapat langsung dibypass ke mikrotik/router sehingga user tetap bisa connect tanpa ada perubahan seting apapun

Persiapan:
1. PC server:
   a. 2 buah lan card/ethernet card
   b. 2 buah/lebih hardisk sebagai system (OS) storage dan sisanya sebagai cache storage. (optional)
   c. DVD Ubuntu 12.04 TLS (yang digunakan saat ini adalah versi server 64bit)
2. Cemilan ;)
3. Semangat & do’a... :D

So.. langsung saja...
1. Install Ubuntu (gunakan minimal server, jika menggunakan 2 hdd/lebih set hdd 1 untuk OS dengan pembagian partisi /boot, swap dan /. hdd sisa partisi sebagai cache contoh /cache1, cache2 dsb)

2. Seting IP untuk konek ke internet

3. Login sebagai root

4. Edit file source list:
   nano /etc/apt/source.list

5. Tambahkan repo terdekat untuk wilayahmu (sample menggunakan kambing.ui.ac.id):
   deb http://kambing.ui.ac.id/ubuntu/ precise main universe restricted multiverse
   deb-src http://kambing.ui.ac.id/ubuntu/ precise main universe restricted multiverse
   deb http://kambing.ui.ac.id/ubuntu/ precise-security universe main multiverse restricted
   deb-src http://kambing.ui.ac.id/ubuntu/ precise-security universe main multiverse restricted
   deb http://kambing.ui.ac.id/ubuntu/ precise-updates universe main multiverse restricted
   deb-src http://kambing.ui.ac.id/ubuntu/ precise-updates universe main multiverse restricted
   deb http://kambing.ui.ac.id/ubuntu/ precise-proposed universe main multiverse restricted
   deb-src http://kambing.ui.ac.id/ubuntu/ precise-proposed universe main multiverse restricted
   deb http://kambing.ui.ac.id/ubuntu/ precise-backports universe main multiverse restricted
   deb-src http://kambing.ui.ac.id/ubuntu/ precise-backports universe main multiverse restricted

6. Update Ubuntu:
   apt-get update -y

7. Edit file limit:
   nano /etc/security/limits.conf

8. Tambahkan dibagian akhir:
   proxy        -    nofile    1024000

9. Load modul yang dibutuhkan untuk ngebuat config dan install squid
   modprobe xt_TPROXY
   modprobe xt_socket
   modprobe nf_tproxy_core
   modprobe xt_mark
   modprobe nf_nat
   modprobe nf_conntrack_ipv4
   modprobe nf_conntrack
   modprobe nf_defrag_ipv4
   modprobe ipt_REDIRECT
   modprobe iptable_nat

10. Download source squid (sample menggunakan squid stable versi 3.1.20):
   wget http://www.squid-cache.org/Versions/v3/3.1/squid-3.1.20.tar.gz

11. Install software pendukung untuk compile package:
   apt-get install iproute kernel-package libncurses5-dev fakeroot wget bzip2 build-essential debhelper linuxdoc-tools libselinux1-dev bridge-utils ebtables libssl-dev libcap2 libcap-dev

12. Extract squid:
   tar zxvf squid-3.1.20.tar.gz

13. Config squid sesuai tujuan awal:
   ./configure --prefix=/usr --exec_prefix=/usr --bindir=/usr/sbin --sbindir=/usr/sbin --libexecdir=/usr/lib/squid --sysconfdir=/etc/squid --localstatedir=/var/spool/squid --datadir=/usr/share/squid --enable-async-io --with-pthreads --enable-storeio=ufs,aufs,diskd --enable-linux-netfilter --enable-arp-acl --enable-epoll --enable-icap-client --enable-ssl --enable-snmp --enable-delay-pools --enable-htcp --enable-cache-digests --enable-underscores --enable-referer-log --enable-removal-policies=lru,heap --enable-useragent-log --enable-auth=basic,digest,ntlm --enable-carp --with-large-files

14. Compile squid:
   make && make install

15. Setting config squid
   nano /etc/squid/squid.conf

16. Silakan modify sesukamu tetapi harap diperhatikan adalah:
   a. acl localnet src <ip subnet local/netmask>
  b. acl localnet src <ip virtual subnet local/netmask> (tambahkan apabila jaringan lokal mempunyai banyak subnet)
   c. http_port 3128 transparent (port bisa diubah sesukamu)
  d. http_port 3129 tproxy (port bisa diubah sesukamu tetapi bedakan dengan port untuk transparent)
   e. cache_dir <type storeio> /<dir cache> <size dir cache> <d1> <d2>
   f. access_log /var/log/squid/access.log proxy
   g. pid_filename /var/run/squid.pid
   h. cache_effective_user proxy
   i. cache_effective_group proxy

17. Buat Directory untuk cache dan log sesuai config squid diatas:
  mkdir /<dir cache> /var/log/squid

18. Ubah owner directori yang dibutuhkan oleh squid:
  chown proxy.proxy -R /<dir cache>
  chown proxy.proxy -R /var/spool/squid
  chown proxy.proxy -R /var/log/squid

19. Buat structure folder cache:
  squid -z

20. Jalankan squid:
  squid -SY

21. Edit file rc.local:
  nano /etc/rc.local

22. Tambahkan baris berikut di atas exit 0:
  modprobe xt_TPROXY
  modprobe xt_socket
  modprobe nf_tproxy_core
  modprobe xt_mark
  modprobe nf_nat
  modprobe nf_conntrack_ipv4
  modprobe nf_conntrack
  modprobe nf_defrag_ipv4
  modprobe ipt_REDIRECT
  modprobe iptable_nat

  brctl addbr br0
  ifconfig eth0 0.0.0.0 promisc up
  ifconfig eth1 0.0.0.0 promisc up
  brctl addif br0 eth0
  brctl addif br0 eth1
  ip link set br0 up
  ip addr add 192.168.3.15/24 brd + dev br0

  brctl addbr br0:1
  ip link set br0:1 up
  ip addr add 192.168.4.15/24 brd + dev br0:1

  route add default gw 192.168.3.11 dev br0
  route add 192.168.4.0/24 gw 192.168.4.11 dev br0:1

  ip rule add fwmark 1 lookup 100
  ip route add local 0.0.0.0/0 dev lo table 100

  echo 1 > /proc/sys/net/ipv4/ip_forward
  echo 2 > /proc/sys/net/ipv4/conf/default/rp_filter
  echo 2 > /proc/sys/net/ipv4/conf/all/rp_filter
  echo 0 > /proc/sys/net/ipv4/conf/lo/rp_filter

  iptables -t mangle -N DIVERT
  iptables -t mangle -A DIVERT -j MARK --set-mark 1
  iptables -t mangle -A DIVERT -j ACCEPT
  iptables -t mangle -A INPUT -j ACCEPT
  iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
 iptables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-port <port tproxy>

 #local: ganti eth-local sesuai topologi (contoh: eth0 atau eth1)
 ebtables -t broute -A BROUTING -i <eth local> -p ipv4 --ip-proto tcp --ip-dport 80 -j redirect --redirect-target ACCEPT
 #public: ganti eth-public sesuai topologi (contoh: eth0 atau eth1)
 ebtables -t broute -A BROUTING -i <eth public> -p ipv4 --ip-proto tcp --ip-sport 80 -j redirect --redirect-target ACCEPT

   cd /proc/sys/net/bridge/
   for i in *
   do
      echo 0 > $i
   done
   unset i

   squid -SY

25. Restart server dan cek hasilnya...
Semoga tidak ada kendala... dan selamat mencoba...

1 komentar:

aiwan mengatakan...

Mungkin bisa dijelaskan lebih rinci mas untuk seperti saya sebagai pemula