Anda di halaman 1dari 22

Menyimpan Video Youtube Pakai Squid3 dan Nginx

http://www.walecha.net/content/menyimpan-video-youtube-pakai-squid3-dan-nginx

Submitted by walecha Assalamu'alaikum warahmatullahi wabarakatuh, Selamat malam semuanya. Bagaimana malam minggunya? Semoga semuanya dapat merasakan bahagia bersama orang-orang yang kita sayangi, aamiin. Malam ini saya akan membagikan sebuah resep utamanya untuk para proxier yang selalu dikeluhkesahi oleh pengguna-pengguna proxy-nya tentang kecepatan buffering video dari YouTube. Sudah menjadi fakta bahwa YouTube merupakan penyedia materi multimedia yang paling sering diakses saat ini. Kekuatan jaringan data Google memang sangat membantu meningkatkan kepopuleran YouTube. Meskipun demikian, kepopuleran YouTube ini berimbas pula pada ketersediaan jalur data atau bandwidth. Di banyak negara berkembang permintaan akan akses materi multimedia YouTube umumnya kurang terakomodasi oleh kekuatan jalur data yang ada. Jika anda sedang berada di Jepang atau Korea mungkin anda tidak akan merasakan lambatnya proses pengunduhan video dari YouTube. Akan tetapi minimnya infrastruktur jaringan tersebut bukanlah alasan untuk penggemar video online dan akhirnya muncullah Lusca.

LUSCA
Lusca adalah sebuah tambahan pada Squid 2.x untuk membuat squid proxy menyimpan dan mengubah alamat seluruh berkas video yang sedang disaksikan oleh pengguna proxy sehingga jika video tersebut dibuka kembali di lain waktu, squid tidak perlu mengambilnya kembali dari internet. Teknik ini mengimplementasikan sebuah algortima untuk menterjemahkan alamat video hasil penyandian YouTube sehingga jika berkas video tersebut dibuka kembali, meskipun akan berasal dari squid, pengguna akan melihat bahwa video yang dilihatnya berasal dari YouTube. Sayangnya Lusca belum tersedia untuk squid3. Pilihannya hanya gunakan squid2 atau tidak pakai lusca. Tetapi pengguna squid3 janganlah terlalu gusar dengan keputusan pengembang lusca yang masih belum menyediakan plugin ini untuk squid3. Toh squid3 juga masih tergolong baru. Masih ada kesempatan lain. Dan satu hal lagi, masih ada cara yang lain kok. Sesuai judul artikel ini, ternyata kita bisa memanfaatkan NGINX untuk melakukan hal yang mirip dengan lusca.

Simpan dengan Nginx


Sejatinya Nginx adalah sebuah program web server ringan yang menurut saya dapat menyaingi kualitas Apache HTTPD. Dalam kasus ini, kenapa kita pilih nginx? Ya karena ukurannya yang lebih kecil jika dibandingkan dengan Apache2. Di slackware saya, Apache2 berukuran 10MB sedangkan Nginx cuma 1MB. Toh yang kita butuhkan saat ini hanyalah

fitur proxy dari nginx. Lagipula sumber daya sistem yang digunakan oleh nginx lebih kecil daripada Apache2. Jadi sepertinya sepertinya terlalu berlebihan jika menggunakan Apache2 hanya untuk menyediakan alamat palsu YouTube. Baik kita mulai saja. Hal pertama yang harus kita lakukan adalah menginstal nginx. Pengguna slackware dapat menggunakan skrip SlackBuild dari SlackBuilds.org atau menggunakan skrip SlackBuild punya saya. Setelah instalasi kita harus mengganti konfigurasi nginx.conf menggunakan konfigurasi berikut:
# This config file is not written by me, # My Email address is inserted Just for tracking purposes # For more info, visit http://code.google.com/p/youtube-cache/ # Syed Jahanzaib / aacable [at] hotmail.com # Modified for Slackware by Widya Walesa <walecha99_[at]_gmail_dot_com user nobody; worker_processes 8; pid /var/run/nginx/nginx.pid; events { worker_connections 768; } http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; gzip on; gzip_static on; gzip_comp_level 6; gzip_disable .msie6.; gzip_vary on; gzip_types text/plain text/css text/xml text/javascript application/json application/x-javascript application/xml application/xml+rss; gzip_proxied expired no-cache no-store private auth; gzip_buffers 16 8k; gzip_http_version 1.1; #include /etc/nginx/conf.d/*.conf; # starting youtube section server { listen 127.0.0.1:8081; location / { root /var/www/nginx/files; #try_files "/id=$arg_id.itag=$arg_itag" @proxy_youtube; # Old one #try_files "$uri" "/id=$arg_id.itag=$arg_itag.flv" "/id=$arg_idrange=$arg_range.itag=$arg_itag.flv" @proxy_youtube; #old2 try_files "/id=$arg_id.itag=$arg_itag.range=$arg_range.algo=$arg_algorithm" @proxy_youtube; } location @proxy_youtube { resolver IP.DARI.DNS.ANDA; proxy_pass http://$host$request_uri; proxy_temp_path "/var/www/nginx/tmp"; #proxy_store "/usr/local/www/nginx_cache/files/id=$arg_id.itag=$arg_itag"; # Old 1

proxy_store "/var/www/nginx/files/id=$arg_id.itag=$arg_itag.range=$arg_range.algo=$arg_ algorithm"; proxy_ignore_client_abort off; proxy_method GET; proxy_set_header X-YouTube-Cache "nama.anda@domain.siapa"; proxy_set_header Accept "video/*"; proxy_set_header User-Agent "YouTube Cacher (nginx)"; proxy_set_header Accept-Encoding ""; proxy_set_header Accept-Language ""; proxy_set_header Accept-Charset ""; proxy_set_header Cache-Control ""; } } }

Setelah itu kita perlu menyiapkan direktori-direktori yang diperlukan oleh proxy nginx ini:
$ mkdir -p /var/www/nginx/files /var/www/nginx/tmp $ chmod 777 /var/www/nginx/files /var/www/nginx/tmp

Kemudian jalankan nginx dan cek apakah nginx sudah berjalan atau belum:
$ /etc/rc.d/rc.nginx start $ netstat -nlp -t tcp | grep nginx

Jika sudah siap, kita dapat menyiapkan skrip ruby yang digunakan sebagai program penulis ulang alamat oleh squid:
$ mkdir -p /etc/squid/nginx.rb $ nano /etc/squid/nginx.rb

Isikan skrip ruby berikut ke file tersebut dan simpan


#!/usr/bin/env ruby # This script is not written by me, # My Email address is inserted Just for tracking purposes # For more info, visit http://code.google.com/p/youtube-cache/ # Syed Jahanzaib / aacable [at] hotmail.com # Modified for Slackware by Widya Walesa <walecha99_[at]_gmail_dot_com # url_rewrite_program <path>/nginx.rb # url_rewrite_host_header off require "syslog" require "base64" class SquidRequest attr_accessor :url, :user attr_reader :client_ip, :method def method=(s) @method = s.downcase end def client_ip=(s) @client_ip = s.split('/').first end end def read_requests # URL <SP> client_ip "/" fqdn <SP> user <SP> method [<SP> kvpairs]<NL>

STDIN.each_line do |ln| r = SquidRequest.new r.url, r.client_ip, r.user, r.method, *dummy = ln.rstrip.split(' ') (STDOUT << "#{yield r}\n").flush end end def log(msg) Syslog.log(Syslog::LOG_ERR, "%s", msg) end def main Syslog.open('nginx.rb', Syslog::LOG_PID) log("Started") read_requests do |r| if r.method == 'get' && r.url !~ /[?&]begin=/ && r.url =~ %r{\Ahttp:// [^/]+\.youtube\.com/(videoplayback\?.*)\z} log("YouTube Video [#{r.url}].") "http://127.0.0.1:8081/#{$1}" else r.url end end end main

Lalu ubah mode aksesnya agar dapat dieksekusi


$ chmod +x /etc/squid/nginx.rb

Sekarang masuk ke konfigurasi squid. Mudah saja. Kita hanya perlu menambahkan baris yang menyatakan bahwa berkas skrip ruby /etc/nginx.nginx.rb adalah program pengubah alamat untuk permintaan klien berkas video YouTube:
# acl berikut yang menyatakan permintaan video YouTube # harus diganti ke server lokal acl apache rep_header Server ^Apache # Jangan sampai lupa acl ini. 'Server YouTube' # kita berjalan di localhost acl localhost src 127.0.0.1/32 acl to_localhost dst 127.0.0.0/8 # Ijinkan localhost mengakses squid http_access allow localhost # Bagian inilah yang akan mengubah alamat video YouTube url_rewrite_program /etc/nginx/nginx.rb url_rewrite_host_header off acl youtube_videos url_regex -i ^http://[^/]+\.youtube\.com/videoplayback\? acl range_request req_header Range . acl begin_param url_regex -i [?&]begin= acl id_param url_regex -i [?&]id= acl itag_param url_regex -i [?&]itag= acl sver3_param url_regex -i [?&]sver=3 # Baris berikut ini menyatakan bahwa squid kita akan berkawan # dengan server nginx lokal dan menjadikannya sebagai salah satu

# sumber pertama untuk permintaan video YouTube sebelum YouTube.com cache_peer 127.0.0.1 parent 8081 0 proxy-only no-query connect-timeout=10 cache_peer_access 127.0.0.1 allow youtube_videos id_param itag_param sver3_param !begin_param !range_request cache_peer_access 127.0.0.1 deny all

Kemudian kita coba me-reload squid:


$ /etc/rc.d/rc.squid reload atau $ squid -k reconfigure

Supaya mudah untuk mengetahui apakah proses pengubahan alamat dan penyimpanan video YouTube sudah benar, serta untuk mengetahui ada atau tidak permasalahan pada squid dan nginx, kita dapat mengaktifkan log squid dan nginx:
# FILE: /etc/squid/squid.conf cache_access_log /var/log/squid/access.log cache_log /var/log/squid/cache.log # Supaya log-nya mirip dengan log apache/nginx emulate_httpd_log on logformat squid %tl %6tr %>a %Ss/%03Hs %<st %rm %ru %un %Sh/%<A %mt

Apabila mekanisme pengubahan sudah berjalan dengan lancar kita bisa memeriksa apakah video-video yang diminta sudah disimpan di dalam harddisk lokal kita:
root@proxy:~# ls -lh /var/www/nginx/files/ | more total 2.4G -rw------- 1 nobody nobody 1.7M Jan 7 2010 id\=00eb20bff5ff715f.itag\=34.range\=10690560-12472319.algo\=throttlefactor -rw------- 1 nobody nobody 1.7M Jan 7 2010 id\=00eb20bff5ff715f.itag\=34.range\=12472320-14254079.algo\=throttlefactor -rw------- 1 nobody nobody 1.7M Jan 7 2010 id\=00eb20bff5ff715f.itag\=34.range\=13-1781759.algo\=throttle-factor

Kita juga dapat melihat di log squid dan nginx proses permintaan yang sudah diubah:
FILE: /var/log/squid/squid.log 1348290565.359 7566 10.10.30.11 TCP_MISS/200 1782196 GET http://o-o--preferred---sn-i3b7sn76---v16---lscache2.c.youtube.com/videoplayback? DIRECT/127.0.0.1 video/x-flv

atau dalam bentuk emulasi log httpd


10.10.30.11 - - [22/Sep/2012:12:36:49 +0700] "GET http://o-o---preferred--sn-i3b7sn7k---v9---lscache6.c.youtube.com/videoplayback? HTTP/1.1" 200 819307 TCP_MISS:FIRST_UP_PARENT

Dari log tersebut dapat kita lihat bahwa meskipun squid melaporkan permintaan tersebut MISS, tetapi perhatikan lokasi servernya, 127.0.0.1 atau localhost atau server nginx kita tadi (FIRST_UP_PARENT). Jika tidak ada masalah apa-apa lagi, kita dapat menonaktifkan log squid. Lumayan untuk menghemat ruang harddisk:
# FILE: /etc/squid/squid.conf

cache_access_log /dev/null cache_log /dev/null cache_store_log /dev/null

Tulisan ini diadaptasi dengan beberapa modifikasi dari artikel penulis aslinya. Silakan kunjungi artikel aslinya jika menginginkan informasi lebih lanjut: http://aacable.wordpress.com/2012/08/13/youtube-caching-with-squid-nginx/

INSTALASI & KONFIGURASI SQUID3 DI UBUNTU SERVER http://ecaknyo.blogspot.com/2012/11/instalasi-konfigurasisquid3-di-ubuntu.html

Tutorial yang membahas squid3 sudah banyak sekali di internet dan mudah sekali diketemukan, tetapi ada beberapa tutorial yang malah membingungkan bagi para pemula yang masih mencoba mengunakannya.

Disini akan saya paparkan secara sederhana agar lebih mudah dipahami yaitu tentang bagaimana instalasi dan konfigurasi squid3. Dari pengalaman saya konfigurasinya tidak begitu jauh berbeda dari versi squid dibawahnya misal squid 2.7 Stable7.

Persiapan : 1. Putty Diperlukan untuk me-reconfigure konfigurasi squid melalui terminal via remote. 2. WinSCP Memudahkan dalam mengakses, mem-backup & mengedit squid3.conf. File konfigurasi squid3 berada dalam folder /etc/squid3

Langkah-langkahnya sebagai berikut : 1. Backup-lah terlebih dahulu konfigurasi atau folder squid lama dengan winSCP, simpanlah di komputer lain, misalnya laptopmu. 2. Login sebagai root di ubuntu server lewat putty , lalu instal squid3 dengan

cara ketik di terminal : # apt-get install squid3 bagi yang telah memakai squid versi lama misalnya squid 2.7, tenang saja karena folder squid yang lama tidak akan hilang atau tertimpa. Nanti akan ada dua folder : squid dan squid3, untuk amannya di backup dulu seperti langkah 1. Tunggu prosesnya hingga selesai, untuk sementara koneksi internet di jaringan akan terputus. 3. Jika instalasi sudah selesai, akseslah folder squid3 lewat winSCP kemudian copy paste file konfigurasi squid3 yang asli dan pada file copy tersebut berikan nama default dibelakangnya contoh : squid.conf.default. Di dalam folder /etc/squid3/ squid.conf -> copy paste |_ squid.conf copy -> di ubah menjadi squid3.conf.default

4. Buka file squid.conf dengan winSCP, lalu konfigurasi seperti dibawah ini : Carilah tag-tag berikut dengan dengan Ctrl+F : # TAG: acl Tambahkan jaringan lokal. Misal : acl manager proto cache_object acl localhost src 127.0.0.1/32 acl s3a50net src 10.5.50.0/24 lokal="lokal">

<-- b="b" jaringan="jaringan"

# TAG: http_access Bolehkan akses untuk jaringan lokal diatas. Misal : #Recommended minimum configuration: http_access allow manager localhost http_access deny manager http_access allow purge localhost http_access allow SSL_ports http_access deny purge http_access deny !Safe_ports

http_access deny CONNECT !SSL_ports http_access allow localnet http_access allow localhost http_access allow s3a50net <-- b="b" disini="disini" tambahkan="tambahkan"> http_access allow CONNECT !webmin_ports http_access allow CONNECT !ssh_ports http_access deny all

# TAG: http_port Lalu hapus tanda pagar dan tambahkan dibelakangnya transparent. 3128 adalah port default service squid, ini bisa diubah bila di inginkan. transparent adalah untuk membuat squid otomatis dapat diakses oleh user tanpa harus mengarahkan ( men-setting ) browser user ke squid. Contoh : # Squid normally listens to port 3128 http_port 3128 transparent <-- b="b" ini="ini" seperti="seperti">

# TAG: cache_mem cache_mem 8 MB

(bytes)#Default:

# TAG: maximum_object_size_in_memory maximum_object_size_in_memory 8 KB

(bytes)#Default:

# TAG: memory_replacement_policy#Default: #memory_replacement_policy lru memory_replacement_policy heap GDSF # TAG: cache_replacement_policy#cache_replacement_policy lru cache_replacement_policy heap LFUDA # TAG: cache_dir# Uncomment and adjust the following to add a disk cache directory. cache_dir ufs /var/spool/squid3 6000 16 256 <--- besaran="besaran" cache="cache" nbsp="nbsp" p="p" squid.="squid." ukuran="ukuran"> Ket : - Kalkulasinya ukuran cache ini harus tepat disesuaikan dengan spesifikasi server ubuntu, semakin besar cache-nya belum tentu bagus malahan akan membuat pencarian file yang tersimpan menjadi lebih lama. - Letak direktorinya di /var/spool/squid3 ,berbeda lokasi dengan direktori

konfigurasi squid. # TAG: minimum_object_size minimum_object_size 0 KB (bytes)#Default:

Ket : - Besaran minimum file yang akan tersimpan di squid

# TAG: maximum_object_size maximum_object_size 4096 KB Ket :

(bytes)#Default:

- Besaran maksimum file yang akan tersimpan di squid # TAG: cache_swap_low cache_swap_low 90 # TAG: cache_swap_high cache_swap_high 95 (percent, 0-100)#Default:

(percent, 0-100)#Default:

# TAG: logfile_rotate#Default: logfile_rotate 1 Ket : - Akan berguna jika sudah menginstal Sarg & calamaris

Untuk Tuning Cache squid # TAG: refresh_pattern Tambahkan refresh_pattern berikut sesudah refresh_pattern default refresh_pattern -i .(class|css|js|gif|jpg)$ 10080 100% 43200 ignore-no-cache ignore-no-store reload-into-ims override-expire refresh_pattern -i .(jpe|jpeg|png|bmp|tif)$ 10080 100% 43200 ignore-no-cache ignore-no-store reload-into-ims override-expire refresh_pattern -i .(tiff|mov|avi|qt|mpeg)$ 10080 100% 43200 ignore-no-cache ignore-no-store reload-into-ims override-expire refresh_pattern -i .(mp3|3gp|mpg|mpe|wav|au|mid)$ 10080 100% 43200 ignoreno-cache ignore-no-store reload-into-ims override-expire refresh_pattern -i .(exe|iso|tar|rar|zip|gz|arj|lha|lzh)$ 10080 100% 43200 ignore-

no-cache ignore-no-store reload-into-ims override-expire refresh_pattern -i .(rar|tgz|tar|exe|bin|vpx)$ 10080 100% 43200 ignore-no-cache ignore-no-store reload-into-ims override-expire refresh_pattern -i .(hqx|pdf|rtf|doc|swf)$ 10080 100% 43200 ignore-no-cache ignore-no-store reload-into-ims override-expire refresh_pattern -i .(inc|cab|ad|txt|dll)$ 10080 100% 43200 ignore-no-cache ignore-no-store reload-into-ims override-expire # TAG: quick_abort_min quick_abort_min 16 KB # TAG: quick_abort_max quick_abort_max 16 KB # TAG: quick_abort_pct quick_abort_pct 95 # TAG: read_ahead_gap read_ahead_gap 16 KB # TAG: positive_dns_ttl # positive_dns_ttl 6 hours positive_dns_ttl 1 hour (KB)#Default:

(KB)#Default:

(percent)#Default:

buffer-size#Default:

time-units#Default:

# TAG: negative_dns_ttl time-units#Default: # negative_dns_ttl 1 minutes negative_dns_ttl 1 minute # TAG: store_avg_object_size #Default: store_avg_object_size 13 KB (kbytes)

# TAG: dns_nameserversdns_nameservers 203.130.193.74 203.130.208.18 202.134.0.155 202.134.1.5 8.8.4.4 8.8.8.8

Ket : - Di atas mengunakan dns telkom speedy & google. - Gantilah dns server sesuai dengan yang diberikan oleh ISP anda. # TAG: ipcache_size #ipcache_size 1024 ipcache_size 4096 # TAG: ipcache_low ipcache_low 90 (number of entries)#Default:

(percent)#Default:

# TAG: ipcache_high the IP cache. #Default: ipcache_high 95 # TAG: fqdncache_size FQDN cache entries. #Default: #fqdncache_size 1024 fqdncache_size 4096

(percent)#

The size, low-, and high-water marks for

(number of entries)#

Maximum number of

# TAG: reload_into_ims selective approach. #Default: reload_into_ims on

on|off#

see also refresh_pattern for a more

SIMPAN..jika konfigurasi sudah selesai.

5. Buatlah swap squid3, matikan dahulu service squid melalui terminal putty dengan : # /etc/init.d/squid3 stop - Lalu lanjutkan dengan # squid3 -z - Tunggulah sampai prosesnya selesai.

6. Jika pembuatan swap squid sudah berhasil, hidupkan kembali service squid dengan : # squid3 start

7. Terakhir, untuk memastikan telah berjalan dengan sukses atau belum, monitorlah lalu lintas squid3 dengan : # tail -f /var/log/squid3/access.log

Install & Konfigurasi Squid3 di Ubuntu Server 12.04


oke agan2 sekalian akhirnya kita jumpa lagi ya pada pertemuan kali ini, kali ini saya akan membahas tentang bagaimana cara melakukan konfigurasi squid 3 di ubuntu server 12.04. oke gan langsung saja ya kita mulai Pertama Instal terlebih dahulu squid 3 pada ubuntu server agan2 sekalian, dengan menggunakan perintah : Sudo apt-get install squid3 Kedua Setelah proses instalasi selesai masuk ke dalam direktori squid3 dengan menggunakan perintah : cd /etc/squid3 kemudian lanjutkan dengan perintah mengcopy squid.conf.origin dan ganti namanya dengan squid.conf, adapun perintah yang digunakan yaitu : cp squid.conf.origin squid.conf Ketiga Setelah proses pengcopyan file selesai selanjutnya lakukan konfigurasi di dalam squid.conf tersebut, dengan menggunakan perintah : sudo nano /etc/squid3/squid.conf kemudian cari http port 3128, http_access allow localhost, dan acl localnet src 192.168.0.0/16 hilangkan tanda # didepannya, jika semuanya telah dihilangkan save dan keluar dari jendela konfigurasi. Keempat Jika konfigurasi squid3 telah selesai restart squid3 dengan perintah : sudo /etc/init.d/squid3 restart Keelima Selanjutnya hubungkan komputer clien dengan komputer server dengan menggunakan kartu jaringan 1 buah lagi setting ip pada kedua komputer tersebut dalam 1 kelas ip yang sama. Keenam

Jika telah selesai tes dengan perintah ping. Pastikan kedua komputer telah terhubung dengan mendapatkan balasan reply. jika telah terhubung ketikkan perintah berikut di komputer server sudo tail -f /var/log/squid3/access.log Jika selesai setting proxy pada komputer clien dengan ip yang terdapat pada komputer server dan dengan port 3128 yang di konfigurasi pada squid3 tadi. Jika selesai, lakukan browser pada alamat tertentu pada komputer clien jika konfigurasi benar maka akan alamat tersebut akan tampil pada komputer server. oke agan2 sekalian mungkin cukup sampai disini saja pertemuan kita kali ini semoga semua ini dapat berguna bagi kita semua. ^_^

Setting Mikrotik dan Squid Proxy External Full Versi


Written By Agustinus Sriyanto on Jumat, 30 Maret 2012 | 11.11
Settingan ini cocok untuk warnet atau penyedia hotspot menurut saya, tau menurut sobatmah ahahhaha. Settingan ini yang saya pake sekarang, Sudah siap untuk melihat dan menelitinya? Ok Lanjuuuuuuuut.......!!! Alat Yang di Gunakan : - Modem Speedy - RB750 ROS 4.6 atau Mikrotik v5.xx - Squid proxy yang berjalan transparant pada port 3128 + zph Topologi : - Speedy 2M down dan 512 up - 1M untuk jatah download semua client dengan batasan maksimal 256kbps/client - Akses tanpa dibatasi limit untuk beberapa IP tertentu (dalam hal ini IP 192.168.2.16 dan 192.168.2.17) - Browsing tidak dibatasi - Aplikasi QOS pada outbound/paket yang keluar dari modem speedy Manifest IP address yang digunakan : [MODEM] Public IP Address = 192.168.1.2/24 [CLIENTS] Client IP Address = 192.168.2.2-192.168.2.17 (ip selain itu tidak konek internet) [SQUID BOX] Proxy Ip Address = 192.168.3.2 squid.conf dengan zph

http_port 3128 transparent zph_mode tos zph_local 0x30 zph_parent 0 zph_option 136 ================Basic Configuration================ /interface ethernet set 0 comment="Public Interface" name=Public set 1 comment="Local Interface" name=Local set 2 comment="Proxy Interface" name=Proxy /ip address add address=192.168.2.1/24 broadcast=192.168.2.2 comment="" disabled=no \ interface=Local network=192.168.2.0 add address=192.168.3.1/24 broadcast=192.168.3.2 comment="" disabled=no \ interface=Proxy network=192.168.3.0 add address=192.168.1.2/24 broadcast=192.168.1.3 comment="" disabled=no \ interface=Public network=192.168.1.0 /ip dns set allow-remote-requests=yes cache-max-ttl=1w cache-size=4096KiB \ max-udp-packet-size=512 servers="125.160.4.82,203.130.196.155" (sesuaikan dengan DNS ISP sobat) /ip route add gateway=192.168.1.1 comment="" disabled=no /ip service set telnet address=0.0.0.0/0 disabled=yes port=23 set ftp address=0.0.0.0/0 disabled=yes port=21 set www address=0.0.0.0/0 disabled=no port=80 set ssh address=0.0.0.0/0 disabled=yes port=22 set www-ssl address=0.0.0.0/0 certificate=none disabled=yes port=443 set api address=0.0.0.0/0 disabled=yes port=8728 set winbox address=0.0.0.0/0 disabled=no port=8291 /system ntp client set enabled=yes mode=unicast primary-ntp=152.118.24.8 secondary-ntp=\ 202.169.224.16 /ip firewall address-list add address=192.168.3.1/24 comment="" disabled=no list=ProxyNET add address=192.168.2.2-192.168.2.17 comment="" disabled=no list=localNet (saya hanya menjalankan client konek internet 2-17 client) =================end of basic configuration================= Untuk firewall filternya saya terapkan yang terpentingnya saja. /ip firewall filter add action=drop chain=input comment="Drop Invalid connections" \ connection-state=invalid disabled=no add action=add-src-to-address-list address-list="port scanners" \ address-list-timeout=2w chain=input comment="Port scanners to list " \

disabled=no protocol=tcp psd=21,3s,3,1 add action=add-src-to-address-list address-list="port scanners" \ address-list-timeout=2w chain=input comment="NMAP FIN Stealth scan" \ disabled=no protocol=tcp tcp-flags=fin,!syn,!rst,!psh,!ack,!urg add action=add-src-to-address-list address-list="port scanners" \ address-list-timeout=2w chain=input comment="SYN/FIN scan" disabled=no \ protocol=tcp tcp-flags=fin,syn add action=add-src-to-address-list address-list="port scanners" \ address-list-timeout=2w chain=input comment="SYN/RST scan" disabled=no \ protocol=tcp tcp-flags=syn,rst add action=add-src-to-address-list address-list="port scanners" \ address-list-timeout=2w chain=input comment="FIN/PSH/URG scan" disabled=\ no protocol=tcp tcp-flags=fin,psh,urg,!syn,!rst,!ack add action=add-src-to-address-list address-list="port scanners" \ address-list-timeout=2w chain=input comment="ALL/ALL scan" disabled=no \ protocol=tcp tcp-flags=fin,syn,rst,psh,ack,urg add action=add-src-to-address-list address-list="port scanners" \ address-list-timeout=2w chain=input comment="NMAP NULL scan" disabled=no \ protocol=tcp tcp-flags=!fin,!syn,!rst,!psh,!ack,!urg add action=drop chain=input comment="Dropping port scanners" disabled=no \ src-address-list="port scanners" add action=accept chain=input comment="Allow Established connections" \ connection-state=established disabled=no add action=accept chain=input comment="Allow Related connections" \ connection-state=related disabled=no add action=accept chain=input comment="Allow ICMP from LOCAL Network" \ disabled=no protocol=icmp src-address-list=localNet add action=accept chain=input comment="Allow ICMP from PROXY Network" \ disabled=no protocol=icmp src-address-list=ProxyNET add action=accept chain=input comment="Allow Input from LOCAL Network" \ disabled=no src-address-list=localNet add action=accept chain=input comment="Allow Input from PROXY Network" \ disabled=no src-address-list=ProxyNET add action=drop chain=input comment="Drop everything else" disabled=no add action=drop chain=forward comment="Drop Invalid connections" \ connection-state=invalid disabled=no add action=jump chain=forward comment="Bad packets filtering" disabled=no \ jump-target=tcp protocol=tcp add action=jump chain=forward comment="" disabled=no jump-target=udp \ protocol=udp add action=jump chain=forward comment="" disabled=no jump-target=icmp \ protocol=icmp add action=drop chain=tcp comment="deny SMTP" disabled=no dst-port=25 \ protocol=tcp add action=drop chain=tcp comment="deny TFTP" disabled=no dst-port=69 \ protocol=tcp add action=drop chain=tcp comment="deny RPC portmapper" disabled=no dst-port=\ 111 protocol=tcp add action=drop chain=tcp comment="deny RPC portmapper" disabled=no dst-port=\ 135 protocol=tcp

add action=drop chain=tcp comment="deny NBT" disabled=no dst-port=137-139 \ protocol=tcp add action=drop chain=tcp comment="deny cifs" disabled=no dst-port=445 \ protocol=tcp add action=drop chain=tcp comment="deny NFS" disabled=no dst-port=2049 \ protocol=tcp add action=drop chain=tcp comment="deny NetBus" disabled=no dst-port=\ 12345-12346 protocol=tcp add action=drop chain=tcp comment="deny NetBus" disabled=no dst-port=20034 \ protocol=tcp add action=drop chain=tcp comment="deny BackOriffice" disabled=no dst-port=\ 3133 protocol=tcp add action=drop chain=tcp comment="deny DHCP" disabled=no dst-port=67-68 \ protocol=tcp add action=drop chain=tcp comment="deny P2P" disabled=no p2p=all-p2p add action=drop chain=udp comment="deny TFTP" disabled=no dst-port=69 \ protocol=udp add action=drop chain=udp comment="deny PRC portmapper" disabled=no dst-port=\ 111 protocol=udp add action=drop chain=udp comment="deny PRC portmapper" disabled=no dst-port=\ 135 protocol=udp add action=drop chain=udp comment="deny NBT" disabled=no dst-port=137-139 \ protocol=udp add action=drop chain=udp comment="deny NFS" disabled=no dst-port=2049 \ protocol=udp add action=drop chain=udp comment="deny BackOriffice" disabled=no dst-port=\ 3133 protocol=udp add action=accept chain=icmp comment="limit packets 5/secs" disabled=no \ icmp-options=0:0-255 limit=5,5 protocol=icmp add action=accept chain=icmp comment="limit packets 5/secs" disabled=no \ icmp-options=3:0 protocol=icmp add action=accept chain=icmp comment="limit packets 5/secs" disabled=no \ icmp-options=3:3 limit=5,5 protocol=icmp add action=accept chain=icmp comment="limit packets 5/secs" disabled=no \ icmp-options=3:4 limit=5,5 protocol=icmp add action=accept chain=icmp comment="limit packets 5/secs" disabled=no \ icmp-options=8:0-255 limit=5,5 protocol=icmp add action=accept chain=icmp comment="limit packets 5/secs" disabled=no \ icmp-options=11:0-255 limit=5,5 protocol=icmp add action=drop chain=icmp comment="Drop other icmp packets" disabled=no add action=accept chain=forward comment="Allow Established connections" \ connection-state=established disabled=no add action=accept chain=forward comment="Allow Forward from LOCAL Network" \ disabled=no src-address-list=localNet add action=accept chain=forward comment="Allow Forward from PROXY Network" \ disabled=no src-address-list=ProxyNET add action=drop chain=forward comment="Drop everything else" disabled=no Untuk NAT nya sebagai berikut :

/ip firewall nat add action=masquerade src-address-list=localNet chain=srcnat comment="NAT-LOCAL" disabled=no \ out-interface=Public add action=masquerade src-address-list=ProxyNet chain=srcnat comment="NAT-PROXY" disabled=no \ out-interface=Public add action=dst-nat chain=dstnat comment="TRANSPARENT PROXY" disabled=no \ dst-address-list=!ProxyNET dst-port=80,8080,3128 in-interface=Local \ protocol=tcp to-addresses=192.168.3.2 to-ports=3128 (atau yang saya punya redirect proxy seperti ini :) add action=dst-nat chain=dstnat comment="TRANSPARENT PROXY" disabled=no \ src-address=192.168.2.2-192.168.2.17 dst-port=80,8080,3128 in-interface=Local \ protocol=tcp to-addresses=192.168.3.2 to-ports=3128 add action=dst-nat chain=dstnat comment="TRANSPARENT DNS" disabled=no \ dst-port=53 in-interface=Local protocol=udp to-ports=53 add action=dst-nat chain=dstnat comment="" disabled=no dst-port=53 \ in-interface=Local protocol=tcp to-ports=53 add action=dst-nat chain=dstnat comment="" disabled=no dst-port=53 \ in-interface=Proxy protocol=udp to-ports=53 add action=dst-nat chain=dstnat comment="" disabled=no dst-port=53 \ in-interface=Proxy protocol=tcp to-ports=53 Penjelasan : - Transparent DNS agar client tidak bisa menggunakan NS selain yang terpasang di mikrotik (bisa sobat gunakan atau tidak, tergantung keinginan) - Mengarahkan request dari client tujuan port 80,8080,3128 ke squid external saya beri contoh 2 untuk redirect terserah sobat mo pilih yang mana pastinya keduanya jalan jika ada interface lain misalkan hotspot sobat tingal tambahkan tanda ! pada src.address atau dst.address list Untuk manglenya biar saya jelaskan satu-persatu biar tidak bingung : /ip firewall mangle add action=mark-packet chain=forward comment="PROXY-HIT-DSCP 12" disabled=no \ dscp=12 new-packet-mark=proxy-hit passthrough=no

Menandai paket proxy-hit dari external proxy yang nantinya pada rule queue diberikan kebebasan tanpa proses limitasi

add action=change-dscp chain=postrouting comment=CRITICAL disabled=no \ new-dscp=1 protocol=icmp add action=change-dscp chain=postrouting comment="" disabled=no dst-port=53 \ new-dscp=1 protocol=udp add action=change-dscp chain=postrouting comment="" disabled=no dst-port=53 \ new-dscp=1 protocol=tcp add action=mark-connection chain=postrouting comment="" disabled=no dscp=1 \ new-connection-mark=critical_conn passthrough=yes add action=mark-packet chain=postrouting comment="" connection-mark=\ critical_conn disabled=no new-packet-mark=critical_pkt passthrough=no Menandai paket ICMP dan DNS request untuk diberikan prioritas tertinggi add action=mark-connection chain=prerouting comment=MARK-ALL-CONN disabled=no \ dst-address-list=!localNet in-interface=Local new-connection-mark=\ all.pre_conn passthrough=yes add action=mark-connection chain=forward comment="" disabled=no \ new-connection-mark=all.post_conn out-interface=Local passthrough=yes \ src-address-list=!localNet add action=mark-packet chain=prerouting comment="" connection-mark=\ all.pre_conn disabled=no new-packet-mark=all.pre_pkt passthrough=yes add action=mark-packet chain=forward comment="" connection-mark=all.post_conn \ disabled=no new-packet-mark=all.post_pkt passthrough=yes Menandai SEMUA paket keluar masuk dari Local interface SELAIN ke Local Address add action=mark-connection chain=prerouting comment=GAMES connection-mark=\ all.pre_conn disabled=no dst-port=9339,843 new-connection-mark=games_conn \ passthrough=yes protocol=tcp add action=mark-connection chain=prerouting comment="" connection-mark=\ all.pre_conn disabled=no dst-port=40000-40010 new-connection-mark=\ games_conn passthrough=yes protocol=udp add action=mark-packet chain=forward comment="" connection-mark=games_conn \ disabled=no new-packet-mark=games_pkt passthrough=no

Menandai Paket GAMES untuk diberikan prioritas KEDUA add action=mark-connection chain=prerouting comment=HTTP-CLIENT \ connection-mark=all.pre_conn disabled=no new-connection-mark=\ browsing_conn packet-size=0-64 passthrough=yes protocol=tcp tcp-flags=ack add action=mark-connection chain=prerouting comment="" connection-mark=\ all.pre_conn disabled=no dst-port=80,443 new-connection-mark=\ browsing_conn passthrough=yes protocol=tcp add action=mark-packet chain=forward comment="" connection-bytes=0-131072 \ connection-mark=browsing_conn disabled=no new-packet-mark=browsing_pkt \ passthrough=no protocol=tcp add action=mark-connection chain=prerouting comment=HTTP-PROXY disabled=no \ dst-address-list=!localNet dst-port=80,443 new-connection-mark=proxy_conn \

passthrough=yes protocol=tcp src-address-list=ProxyNET add action=mark-packet chain=forward comment="" connection-mark=proxy_conn \ disabled=no new-packet-mark=proxy_pkt passthrough=no

Menandai paket untuk browsing TERMASUK http req dari external proxy dengan connbyte=0-131072 serta paket-paket protocol tcp yang berukuran kecil (packet-size=0-64 tcpflags=ack) untuk diberikan prioritas KETIGA add action=mark-connection chain=prerouting comment=REALTIME connection-mark=\ all.pre_conn disabled=no dst-port=22,179,110,161,8291 \ new-connection-mark=realtime_conn passthrough=yes protocol=tcp add action=mark-connection chain=prerouting comment="" connection-mark=\ all.pre_conn disabled=no dst-port=123 new-connection-mark=realtime_conn \ passthrough=yes protocol=udp add action=mark-packet chain=forward comment="" connection-mark=realtime_conn \ disabled=no new-packet-mark=realtime_pkt passthrough=no

Menandai paket-paket REALTIME ACCESS untuk diberikan prioritas KEEMPAT add action=mark-connection chain=prerouting comment=FILETRANSER \ connection-mark=all.pre_conn disabled=no dst-port=20,21,23 \ new-connection-mark=communication_conn passthrough=yes protocol=tcp add action=mark-packet chain=forward comment="" connection-mark=\ communication_conn disabled=no new-packet-mark=communication_pkt \ passthrough=no Menandai paket-paket FILETRANSFER untuk diberikan prioritas KELIMA add action=mark-connection chain=prerouting comment=NORMAL connection-mark=\ all.pre_conn disabled=no dst-address-list=!ProxyNET new-connection-mark=\ normal_conn passthrough=yes add action=mark-packet chain=forward comment="" connection-mark=normal_conn \ disabled=no new-packet-mark=normal_pkt passthrough=no Menandai semua paket yang tersisa SELAIN tujuan Proxy untuk diberikan prioritas KEENAM add action=mark-packet chain=forward comment=DOWNLOAD connection-bytes=\ 131072-4294967295 connection-mark=all.post_conn disabled=no dst-address=\ 192.168.2.2 new-packet-mark=client1 passthrough=no protocol=tcp add action=mark-packet chain=forward comment="" connection-bytes=\ 131072-4294967295 connection-mark=all.post_conn disabled=no dst-address=\ 192.168.2.3 new-packet-mark=client2 passthrough=no protocol=tcp ..dst sampai jumlah client yang di perlukanterpenuhi

add action=mark-packet chain=forward comment=DOWNLOAD-NO-LIMIT connectionbytes=\ 131072-4294967295 connection-mark=all.post_conn disabled=no dst-address=\ 192.168.2.16 new-packet-mark=client16 passthrough=no protocol=tcp add action=mark-packet chain=forward comment="" connection-bytes=\ 131072-4294967295 connection-mark=all.post_conn disabled=no dst-address=\ 192.168.2.17 new-packet-mark=client17 passthrough=no protocol=tcp Menandai paket protocol tcp yang diteruskan ke client untuk memberikan batasan download pada masing-masing client dengan conn-byte=131072-4294967295 Setelah itu buat queue type nya /queue type add kind=pcq name=pcq_up pcq-classifier=src-address pcq-limit=200 pcq-rate=0 \ pcq-total-limit=8000 add kind=pcq name=pcq_down pcq-classifier=dst-address pcq-limit=200 pcq-rate=\ 0 pcq-total-limit=8000 add kind=pfifo name=pfifo-critical pfifo-limit=10 add kind=pcq name=pcq_critical.up pcq-classifier=src-address,src-port \ pcq-limit=20 pcq-rate=0 pcq-total-limit=500 add kind=pcq name=pcq_critical.down pcq-classifier=dst-address,dst-port \ pcq-limit=20 pcq-rate=0 pcq-total-limit=500 di lanjut menambahkan queue tree nya.. /queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \ max-limit=0 name="A. PROXY HIT" packet-mark=proxy-hit parent=Local \ priority=1 queue=default add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \ max-limit=0 name="B. CRITICAL" packet-mark=critical_pkt parent=Public \ priority=1 queue=pfifo-critical Tanpa limit dengan prioritas pertama untuk proxy hit dan critical add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \ max-limit=0 name="C. INBOUND" packet-mark=all.post_pkt parent=global-out \ priority=8 add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \ max-limit=0 name="D. OUTBOUND" packet-mark=all.pre_pkt parent=Public \ priority=8 Membuat parent untuk inbound (traffic masuk ke client) dan outbound (traffic keluar dari public) Untuk child INBOUND nya saya bagi menjadi beberapa prioritas seperti berikut : add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \ max-limit=0 name="A. GAMES" packet-mark=games_pkt parent="C. INBOUND" \

priority=2 queue=pcq_critical.down add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \ max-limit=0 name="B. HTTP" packet-mark=browsing_pkt parent="C. INBOUND" \ priority=3 queue=pcq_down add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=64k \ max-limit=128k name="C. REALTIME" packet-mark=realtime_pkt parent=\ "C. INBOUND" priority=4 queue=pcq_critical.down add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=64k \ max-limit=128k name="D. FILETRANS" packet-mark=communication_pkt parent=\ "C. INBOUND" priority=5 queue=pcq_down add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=64k \ max-limit=128k name="E. NORMAL" packet-mark=normal_pkt parent=\ "C. INBOUND" priority=6 queue=pcq_down selanjutnya parent untuk download per client nya : add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \ max-limit=1024k name="F. DOWN 1M" parent="C. INBOUND" priority=8 add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \ max-limit=0 name="G. DOWN 2M" parent="C. INBOUND" priority=8 membuat 2 parent untuk 1M dan 2M (atau tanpa limit) Setelah itu buat child nya, untuk memberikan batasan download per clientnya add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \ max-limit=256k name=Client1 packet-mark=client1 parent=\ "F. DOWN 1M" priority=8 queue=pcq_down add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \ max-limit=256k name=Client2 packet-mark=client2 parent=\ "F. DOWN 1M" priority=8 queue=pcq_down ..dst sampai semua paket ke client yang di perlukan terpenuhi Batasan download sebesar 1M untuk semua client dan maksimum 256k per client add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \ max-limit=0 name=Client16 packet-mark=client16 parent=\ "G. DOWN 2M" priority=8 queue=pcq_down add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \ max-limit=0 name=Client17 packet-mark=client17 parent=\ "G. DOWN 2M" priority=8 queue=pcq_down Tanpa batasan download untuk IP 192.168.2.16 dan 192.168.2.17 Kemudiam membuat limit untuk uploadnya add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \ max-limit=0 name="A. GAMES UP" packet-mark=games_pkt parent="D. OUTBOUND" \ priority=2 queue=pcq_critical.up

add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=64k \ max-limit=256k name="B. HTTP UP" packet-mark=proxy_pkt parent=\ "D. OUTBOUND" priority=3 queue=pcq_up add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=32k \ max-limit=64k name="C. REALTIME UP" packet-mark=realtime_pkt parent=\ "D. OUTBOUND" priority=4 queue=pcq_critical.up add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=64k \ max-limit=128k name="D. FILETRANS UP" packet-mark=communication_pkt \ parent="D. OUTBOUND" priority=5 queue=pcq_up add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=64k \ max-limit=128k name="E. NORMAL UP" packet-mark=normal_pkt parent=\ "D. OUTBOUND" priority=6 queue=pcq_up Catatan - Silahkan sobat sesuaikan Untuk IP ADDRESS, Nama Ethernet. dll - Tanda Hijau Biru dan Merah sengaja saya tandai agar sobat tidak tertukar jika sobat sudah memberi nama lain (maksudnya harus di sesuaikan) - Tanda Jingga da Ping harus sama dengan yang ada di address list (jika sobat mengganti dengan nama lain) - Silahkan sobat Kopi script yang saya buat dan pastekan dahulu di notepad (maksudnya di di hilangkan keterangan-keteranganya, buat satu block satu block biar tidak pusing eheheh) Diurutkan berdasarkan prioritas paket keluar, mulai dari games, http request, realtime connection, filetransfer dan normal request Hasil akhir yang saya capai, masing-masing client tidak terganggu oleh aktifitas download ketika mereka browsing atau main games, baik pada saat user sedang upload pun tidak mengganggu/memperbesar latency games. sependek pengetahuan saya soal mikrotik setelah beberapa kali uji coba, mungkin ini settingan terbaik yang pernah saya buat. Semoga bermanfaat dan selamat mereset Mikrotiknya, succes!!!!