Saturday, October 18, 2014

Install Squid-3.4.8 ( Intercept Mode ) di FreeBSD 10 64 bit dengan ZFS file system

Bismillahirrohmanirrohiim .
Bahan - bahan :
1. CPU dgn processor 64 bit  ( AMD atau Intel ).
2. RAM 4 GB
3. Harddisk 300 GB
4. Flashdisk Minimal 1 GB
5. Win32 Disk Imager , dapat didownload disini : http://sourceforge.net/projects/win32diskimager/
6. Image Freebsd 10 , download disini : http://mfsbsd.vx.sk/files/images/10/amd64/mfsbsd-se-10.0-RELEASE-amd64.img
7. Rokok , Capucino dan obat sakit kepala :p .

Langkah - langkah :
1. Install Win32 Disk Imager di pc windows dan write image freebsd 10 dengan Win32 Disk Imager ke dalam flashdisk.
2. Colokkan flashdisk yang udah di write tersebut ke cpu FreeBSD , set first boot ke Flashdisk di BIOS.
3. CPU akan boot ke flashdisk , tunggu sampai ada perintah untuk login. Loginnya adalah root dan passwordnya adalah mfsroot.
4. Cek dulu nama harddisk , nama flashdisk dan nama Ethernet ( lan ) .
5. Jika Harddisk yang digunakan SATA biasanya nama dimulai dengan nama "ada" . Maka kita cek dengan perintah : ls /dev/ada*. Hasilnya akan keluar seperti ini : /dev/ada0.
Jika ada partisi di Harddisk sebelumnya, dihancurkan dulu  dengan perintah :
gpart destroy -F /dev/ada0
6. Cek nama Flashdisk , perintahnya : ls /dev/da* . Hasilnya akan keluar seperti ini :
 /dev/da0 /dev/da0a
Letak file Install Freebsd ada di /dev/da0a. Sedangkan /dev/da0 adalah tempat booting freebsd diflashdisk.

7. Cek nama ethernet , perintahnya : ifconfig . Hasilnya akan keluar seperti ini :

"re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=8209b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_MAGIC,LINKSTATE>
ether d4:3d:7e:xx:xx:xx"

re0 adalah nama ethernet.
8. Kita mount flashdisk agar bisa digunakan. Perintahnya : mount /dev/da0a /cdrom

9. Install freebsd , perintahnya :
zfsinstall -p HDD1 -d /dev/ada0  -u  /cdrom/10.0-RELEASE-amd64 -s 4G -V 28
Keterangan :
* -p HDD1 - merename nama pool yang kita buat menjadi HDD1 , karna nama defaultnya adalah tank.
* Ketika sampai di "-u /cdrom/" tekan tombol TAB maka akan keluar  10.0-RELEASE-amd64.
* -s 4G adalah besarnya partisi swap. Rekomendasinya adalah 2 kali besar RAM.
*-V 28 adalah versi zfs pool yang akan kita pakai.
 dan ENTER, tunggu sampai instalasi selesai.
Cara cek versi zfs pool : zpool get version
10.  Ganti dir root : chroot /mnt
11. Ubah Password root : passwd root . Masukkan password baru 2 kali.
12. Configurasi ssh agar bisa melakukan remote via putty dan winscp :

ee /etc/ssh/sshd_config
Hilangkan tanda # pada baris berikut dan ganti no menjadi yes :
Port 22
PermissionRootLogin yes

( tekan tombol ESC  nanti akan keluar box . Pilih leave editor lalu save ).

13. Set Ip address dan config jaringan lainnya untuk FreeBSD :

echo 'defaultrouter="192.168.1.1"' >> /etc/rc.conf    --> gateway untuk freebsd
echo 'hostname="evoproxy"' >> /etc/rc.conf
echo 'ifconfig_re0="inet 192.168.1.100 netmask 255.255.255.0"' >> /etc/rc.conf   --> ip address freebsd
echo 'sshd_enable="YES"' >> /etc/rc.conf
echo 'gateway_enable="YES"' >> /etc/rc.conf

14. Setelah selesai reboot dengan perintah : reboot  . Cabut flashdisk dan kembalikan first boot ke Harddisk.
15. Setelah selesai reboot. Login dengan nama root dan password yang sudah diubah tadi.
16, Selanjutnya membuat partisi cache.
zfs create HDD1/cache
zfs set mountpoint=/cache HDD1/cache
zfs set atime=off HDD1/cache
zfs set quota=200G HDD1/cache

Set kuota HDD1/root
zfs set quota=80G HDD1/root
Lihat hasilnya : zfs list .

17. Edit /etc/rc.conf dengan menggunakan winscp untuk mengaktifkan unbound dan IPFW :

zfs_enable="YES"
defaultrouter="192.168.1.1"
hostname="evoproxy"
ifconfig_re0="inet 192.168.1.100 netmask 255.255.255.0"
sshd_enable="YES"
local_unbound_enable="YES"
firewall_enable="YES"

firewall_type="open"
firewall_script="/etc/ipfw.rules"
squid_enable="YES"

sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"

18. Buat file /etc/ipfw.rules :
touch /etc/ipfw.rules

Dan masukkan line berikut :

# Interface where client requests are coming from
IFACE=re0

# The IP Squid is listening on for requests. localhost is safest.
SQUIDIP=127.0.0.1

# Path to ipfw command
IPFW=/sbin/ipfw

${IPFW} -f flush
${IPFW} add 60000 permit ip from any to any
${IPFW} add 100 fwd ${SQUIDIP},3128 tcp from any to any 80 recv ${IFACE}
${IPFW} add 100 fwd ${SQUIDIP},3129 tcp from any to any 443 recv ${IFACE}


19.  Edit /etc/sysctl.conf untuk mengaktifkan ip forwarding dan tune up freebsd .

net.inet.ip.forwarding=1
kern.ipc.somaxconn=8192
net.inet.tcp.delayed_ack=0
net.inet.tcp.sendspace=65536
net.inet.udp.recvspace=65536
net.inet.udp.maxdgram=57344
net.local.stream.recvspace=65536
net.local.stream.sendspace=65536
net.inet.icmp.icmplim=300
net.inet.icmp.icmplim_output=0
net.inet.tcp.delayed_ack=0
kern.maxfilesperproc=65536
kern.maxfiles=65536
net.inet.ip.portrange.last=65536
net.inet.ip.portrange.first=10000
kern.maxvnodes=250000

Tune up di /boot/loader.conf :
vfs.zfs.write_limit_override=134217728

Nilai 134217728 = 128 MB Untuk RAM 2 GB , 
Untuk 1 GB = 64 MB (67108864) ,  Selanjutnya anda kalikan saja sesuai dengan RAM yang anda pakai ,misal jika 4 GB berarti 256 MB ( 268435456 ).

20. Start Unbound : service local_unbound start
Lalu : fetch ftp://FTP.INTERNIC.NET/domain/named.cache -o /var/unbound/root.hints
Edit /var/unbound/unbound.conf  :

# Generated by local-unbound-setup
server:
        username: unbound
        directory: /var/unbound
        chroot: /var/unbound
        pidfile: /var/run/local_unbound.pid
        root-hints: /var/unbound/root.hints
#       auto-trust-anchor-file: /var/unbound/root.key
include: /var/unbound/forward.conf

21. Buat file resolv.conf : touch /etc/resolv.conf
Edit /etc/resolv.conf :

search evo.net
nameserver 127.0.0.1
options edns0

Jalankan perintah : resolvconf -u

22. Edit  /var/unbound/forward.conf  :

# Generated by resolvconf
forward-zone:
          name: "evo.net"
           forward-addr: 203.130.193.74
           forward-addr: 202.134.0.155
           forward-addr: 8.8.8.8
           forward-addr: 8.8.4.4
           forward-addr: 203.130.196.155
           forward-addr: 208.67.220.220
           forward-addr: 208.67.222.222
           forward-addr: 203.34.118.10
forward-zone:
         name: "."
          forward-addr: 203.130.193.74
          forward-addr: 202.134.0.155
          forward-addr: 8.8.8.8
          forward-addr: 8.8.4.4
          forward-addr: 203.130.196.155
          forward-addr: 208.67.220.220
          forward-addr: 208.67.222.222
          forward-addr: 203.34.118.10

Lalu reboot.
Setelah restart cek apakah unbound sudah jalan :
sockstat -4 | grep unbound

23. Set timezone ke WIB :
tzsetup 
lalu set tanggal : date yymmddHHMM contoh : date 201410230116 hasilnya akan seperti ini :
Thu Oct 23 01:16:00 WIB 2014

24. Update ports dan extract :
portsnap fetch
portsnap extract

update database locate agar memudahkan pencarian :
/usr/libexec/locate.updatedb

25. Install pkg :
cd /usr/ports/ports-mgmt/pkg
make
make install clean

26. Install package yang diperlukan untuk squid :

pkg install openssl
pkg install fakeroot
pkg install ccze
pkg install libxml2-2.9.1_1
pkg install gmake-3.82_2 ( atau pkg install automake )
pkg install libltdl-2.4.2.418
pkg install perl5-5.16.3_11

27. Download squid
fetch http://www.squid-cache.org/Versions/v3/3.4/squid-3.4.8.tar.gz

28. Extract : tar xzvf squid-3.4.8.tar.gz

29. Masuk kedalam direktori squid-3.4.8 : cd squid-3.4.8

30. Edit file squid-3.4.8/src/ssl/gadgets.cc, cari line ini :NID_key_usage ubah menjadi //NID_key_usage
Atau anda bisa mempatch nya dengan file ssl.patch seperti dibawah ini.
31. Download patch - patch untuk squid disini : squid-patch.rar
Letakkan file - file tersebut di direktori /root .

32. Patch squid :

patch -p0 < /root/anti-forgery.patch
patch -p0 < /root/302_v2_memleak.patch
patch -p0 < /root/patch-compat_Makefile.in
patch -p0 < /root/patch-compat_strlen
patch -p0 < /root/patch-configure
patch -p0 < /root/patch-src_tools.cc
patch -p0 < /root/patch-src-cf.data.pre
patch -p0 < /root/ssl.patch

anti-forgery.patch adalah patch untuk webpage yang menggunakan ip yang berbeda untuk domainnya. Tanpa patch ini webpage yang menggunakan ip yang berbeda-beda untuk domainnya , akan dianggap miss oleh squid, walaupun linknya sama.

Patch lainnya dapat didapatkan dari /usr/ports/www/squid/files

33. Cek cpu freebsd :
sysctl -a | egrep -i 'hw.machine|hw.model|hw.ncpu'

34. Cari Safe Flags nya di sini Safe Flags

35. Compile Squid :

./configure --prefix=/usr \
--bindir=/usr/bin \
--sbindir=/usr/sbin \
--libexecdir=/usr/lib/squid \
--sysconfdir=/etc/squid \
--localstatedir=/var \
--libdir=/usr/lib \
--includedir=/usr/include \
--datadir=/usr/share/squid \
--enable-default-err-language=English \
--infodir=/usr/share/info \
--mandir=/usr/share/man \
--disable-dependency-tracking \
--enable-storeio=ufs,aufs,diskd \
--enable-removal-policies=lru,heap \
--disable-linux-netfilter \
--disable-linux-tproxy \
--enable-http-violations \
--enable-pf-transparent \
--enable-ipfw-transparent \
--disable-wccp \
--enable-esi \
--disable-wccpv2 \
--disable-select \
--enable-icap-client \
--enable-kill-parent-hack \
--enable-cache-digests \
--enable-icmp \
--enable-follow-x-forwarded-for \
--enable-x-accelerator-vary \
--enable-zph-qos \
--enable-async-io=32 \
--with-aufs-threads=32 \
--with-swapdir=/var/spool/squid \
--with-default-user=proxy \
--with-logdir=/var/log/squid \
--with-pidfile=/var/run/squid/squid.pid \
--with-large-files \
--with-aio \
--with-dl \
--disable-ident-lookups \
--enable-large-cache-files \
--enable-err-languages=English \
--enable-ltdl-convenience \
--with-filedescriptors=65536 \
--with-openssl \
--enable-ssl \
--enable-ssl-crtd \
--disable-auth \
--disable-ipv6 \
--disable-translation \
--with-pthreads

Jika anda ingin mengetahui opsi apa aja yang bisa ditambahkan kedalam squid ketika compile gunakan perintah ini dalam folder instalasi squid :
#cd squid-3.4.8
#./configure --help | less

Kemudian :
make all
make install
make install-pinger

36. Buat Dir /var/log/squid/yt dan buat file /tmp/storeid.log:
mkdir /var/log/squid/yt
touch /tmp/storeid.log
chown -R proxy:proxy /tmp/storeid.log

37. Ubah Owner Folder - folder berikut :
chown -R proxy:proxy /var/log/squid
chmod 777 /var/log/squid
chown -R proxy:proxy /cache
chmod 777 /cache

chown -R proxy:proxy /var/spool/squid
chmod 777 /var/spool/squid
chown -R proxy:proxy /var/run/squid
chmod 777 /var/run/squid

38. Download file ini : freebsd conf .rar

Copy  copy squid.conf dan store-id.pl ke /etc/squid/
Ubah owner file tersebut ke proxy:proxy

chown -R proxy:proxy /etc/squid 
chmod 777 /etc/squid/*

copy squid ke /etc/rc.d/ dan set agar bisa dieksekusi :
chmod +x /etc/rc.d/squid

39.Kemudian buat certificate yang akan digunakan nantinya :

cd /etc/squid
mkdir ssl_cert
cd ssl_cert
openssl genrsa -out evo.net.private 2048
openssl req -new -key evo.net.private -out evo.net.csr ( nanti akan diminta untuk input data , dapat di isi terserah yang anda inginkan).
openssl x509 -req -days 3652 -in evo.net.csr -signkey evo.net.private -out evo.net.cert

40. Buat folder database ssl :
cd
mkdir /var/squid
cd /var/squid
mkdir ssl_db
chown -R nobody /var/squid/ssl_db
/usr/lib/squid/ssl_crtd -c -s /var/squid/ssl_db/certs
chown -R proxy:proxy /var/squid/ssl_db

41.  Edit file /etc/squid/conf :
Edit line cache_mem dan maximum_object_size_in_memory sesuai dengan besar RAM . Direkomendasikan jangan terlalu besar seperti ini :
cache_mem 64 MB
maximum_object_size_in_memory 32 KB

defaultnya seperti dibawah ini  :
cache_mem 256 MB
maximum_object_size_in_memory 512 KB

Edit line : cache_dir aufs /cache 200000 470 256 , cari nilai 470 dengan squid calculator jika besar cache anda berbeda dgn ini.

Edit line : coredump_dir /cache , agar squid ketika dijalankan chdir ke direktori pertama cache . Defaultnya adalah coredump_dir /var/spool/squid

42.  Cek Configurasi squid : squid -k parse . Cek apakah ada yang error .

43. Buat file cache : squid -z

44. Debug squid untuk melihat error : squid -Nd1. Jika tidak ada error tekan CTRL + C . lalu jalankan :
/etc/rc.d/squid start

Import file /etc/squid/ssl_cert/evo.net.cert ke browser yang anda gunakan.
Ceklist show hidden files di winscp : option - preferences - panel. Agar dapat melihat file hidden di freebsd
Untuk memudahkan cek access.log pada squid , edit file /root/.cshrc:
Tambahkan ini  :

alias ceklog "tail -f /var/log/squid/access.log | ccze"

dibawah line berikut  :
alias h        history 25
alias j        jobs -l
alias la    ls -aF
alias lf    ls -FA
alias ll    ls -lAF

45. Cek apakah squid sudah jalan : ps -ax | grep squid  , atau dengan ini sockstat -4 | grep squid
setelah itu reboot.

46. Jika ingin menghapus squid :
cd /root/squid-3.4.8
make uninstall
rm -rf /etc/squid/*
rm -rf /etc/squid

47. Jika ingin menghapus file  yang tercache :
squidclient -m PURGE url , contoh :
squidclient -m PURGE http://steampowered.squid.internal/.steampowered.com

48. Jika digabungkan dgn Mikrotik :
Mode Intercept sample script mikrotik
Asumsi IP proxy re0= 192.168.1.100 dan IP Local Client = 192.168.1.0/24
# = Mangle mikrotik =
# Taruh di baris paling awal (sebelum mangle qos)
# /ip fi mangle
# add action=mark-routing chain=prerouting dst-address=!192.168.0.0/16 dst-port=80 new-routing-mark=intercept  src-address=192.168.1.0/24
# add action=mark-routing chain=prerouting dst-address=!192.168.0.0/16 dst-port=443 new-routing-mark=intercept  src-address=192.168.1.0/24
# /ip firewall nat
# add chain=srcnat out-interface=wan action=masquerade disabled=no to-addresses=0.0.0.0
# = Routing Mikrotik =
# /ip route
# add  distance=1 dst-address=0.0.0.0/0 gateway=192.168.1.100 routing-mark=intercept

49. Agar file log squid bisa dirotate automatis , edit file /etc/newsyslog.conf dan tambahkan line berikut paling bawah :
/var/log/squid/access.log proxy:proxy   777  7     500  *     ZB  /var/run/squid/squid.pid  30
/var/log/squid/cache.log  proxy:proxy   777  7     500  *     ZB  /var/run/squid/squid.pid  30
/tmp/storeid.log              proxy:proxy   777  7     500  *     ZB  /var/run/squid/squid.pid  30


50. Untuk Mode Tproxy :
==================
1. Edit /etc/squid/squid.conf :
http_port 3127
http_port 3128 tproxy
https_port 3129 tproxy ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB key=/etc/squid/ssl_cert/evo.net.private cert=/etc/squid/ssl_cert/evo.net.cert

2. Edit /etc/ipfw.rules :
ipfw -f flush
ipfw add 60000 permit ip from any to any
ipfw add 100 fwd 127.0.0.1,3128 tcp from 192.168.1.0/24 to any 80 in via re0
ipfw add 100 fwd 127.0.0.1,3129 tcp from 192.168.1.0/24 to any 443 in via re0
ipfw add 100 fwd 127.0.0.1 tcp from any 80 to 192.168.1.0/24 in via re0
ipfw add 100 fwd 127.0.0.1 tcp from any 443 to 192.168.1.0/24 in via re0

3. Restart Pc proxy. Setelah restart cek apakah rule firewall sudah diload :
ipfw list

4. Rule di Mikrotik :
# / ip firewall mangle
# add action=mark-routing chain=prerouting comment="TPROXY ROUTING" disabled=no dst-port=80,443 in-interface=ether3-local-slave new-routing-mark=tproxy_rm passthrough=no protocol=tcp
# add action=mark-connection chain=prerouting disabled=no dst-port=80,443 in-interface=ether5-local-slave new-connection-mark=tproxy_cm passthrough=yes protocol=tcp src-address=!192.168.1.100
# add action=mark-routing chain=prerouting connection-mark=tproxy_cm disabled=no in-interface=wan new-routing-mark=tproxy_rm passthrough=no
# add action=mark-packet chain=postrouting comment="proxy hit" disabled=yes dscp=12 new-packet-mark=proxy-hit passthrough=no
# /ip firewall nat
# add chain=srcnat out-interface=wan action=masquerade disabled=no to-addresses=0.0.0.0
# = Routing Mikrotik =
# /ip route
# add  distance=1 dst-address=0.0.0.0/0 gateway=192.168.1.100 routing-mark=tproxy_rm

Note :
ether3-local-slave = interface ke client
192.168.1.100 = ip proxy
ether5-local-slave = interface ke proxy
wan = interface ke internet

51. Set resolusi youtube dan block iklan youtube
=================================
Tambahkan line berikut ke squid.conf :

acl gaHack url_regex -i google-analytics\.com\/ga\.js
acl gaHack url_regex -i google-analytics\.com\/analytics\.js
acl ytHack url_regex -i \/pagead\/js\/lidar\.js
acl ytHack url_regex -i google\.com\/js\/bg\/.*\.js
deny_info http://arbinet.wc.lt/script/gahack.js? gaHack
deny_info http://arbinet.wc.lt/script/yt.js? ytHack
http_access deny gaHack
http_access deny ytHack

52. Tambahan untuk xshot dan garena IM :
acl partial_content url_regex -i ^http:\/\/.*(\.garenanow\.com|\.starhub\.com)\/.*\.(exe)$
acl partial_content url_regex -i ^http:\/\/.*\.winnerinter\.co\.id\/.*\.(exe)$

58. Jika Ingin melakukan instalasi mfsBSD secara remote cukup aktifkan DHCP dimodem atau Mikrotik, range ip jangan terlalu banyak, misal : 192.168.1.100-192.168.1.101. Lalu boot melalui flashdisk yang sudah ada image mfsBSD, otomatis ip tersebut akan masuk ke pc yang akan diinstall mfsBSD. Selanjutnya tinggal anda remote via putty.

Credit and Thanks to :
Allah Subhaana Wata'alaa
Source storeid.pl  : https://www.fazar.net
Grup Facebook Mikrotik squid Indonesia .
Master MikroTiker N SquidLover
Source Gahack.js dan yt.js : www.comstuff.net
Dan lain lainnya.

Alhamdulillah. Selesai, silahkan menikmati squid di FreeBSD 10.
Tutorial ini bisa didownload dalam versi notepad disini : Tutorial Freebsd 10
 

3 comments:

  1. Mas tolong buatin tutorial proxy squid dengan ubuntu cache https dengan procesor 32bit

    ReplyDelete
  2. sudah dicoba, ada beberap step yg ga ditampilkan dan akhir nya gagal..

    ReplyDelete
  3. Ingin tanya, saya sudah install FreeBSD 10 di VMWare dan menggunakan squid versi 3.3 bawaan FreeBSD. Akan tetapi jika ingin transparent proxy masih gagal di versi tersebut. Saya menggunakan 1 NIC saja. Mohon solusinya. Terim kasih

    ReplyDelete