Monday 8 June 2015

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

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 metric 0 mtu 1500 options=8209b
      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
   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)$

   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

http://learningbytutz.blogspot.com/2014/10/install-squid-348-intercept-mode-di.html