12/08/2018, 17:42

Squid proxy + Bonding interface ubuntu

Squid là một phần mềm Proxy Server dùng cho việc lưu trữ cache và lọc nội dung web. Squid hỗ trợ các giao thức HTTP, HTTPS, FTP,… giúp bạn tiết kiệm băng thông và tăng tốc độ truy cập web cho nhóm người dùng trong công ty. Nguyên tắc hoạt động của Squid là khi người dùng truy vấn đến 1 ...

Squid là một phần mềm Proxy Server dùng cho việc lưu trữ cache và lọc nội dung web. Squid hỗ trợ các giao thức HTTP, HTTPS, FTP,… giúp bạn tiết kiệm băng thông và tăng tốc độ truy cập web cho nhóm người dùng trong công ty.

Nguyên tắc hoạt động của Squid là khi người dùng truy vấn đến 1 website thông qua Squid thì Squid sẽ kiểm tra xem nội dung trang web đó có được lưu trữ và có thay đổi không? Nếu đã có lưu trữ và không thay đổi thì Squid sẽ trả luôn nội dung đó cho người dùng mà không cần phải truy vấn đến địa chỉ website kia nữa. Điều này giúp quá trình duyệt web nhanh hơn rất nhiều.

  • Không mất phí bản quyền ( =)) ) vì là mã nguồn mở
  • Khả năng cân bằng tải cao
  • Quản lí giới hạn download, hạn chế băng thông từng IP, giới hạn phiên kết nối đồng thời...
  • Khả năng caching thông tin tốt
  • Trong vd này mình sẽ build squid trên ubuntu 14.04 từ soure..:

    • Manual install :
  • Update và upgrade server
apt-get update && apt-get upgrade -y
        
- Install depedencies     
        
root@Ubuntu:/home/lucifer# apt-get install devscripts build-essential openssl libssl-dev fakeroot libcppunit-dev libsasl2-dev cdbs ccze libfile-readbackwards-perl libcap2 libcap-dev libcap2-dev libtool sysv-rc-conf
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Note, selecting 'libcap-dev' instead of 'libcap2-dev'
libcap2 is already the newest version.
openssl is already the newest version.
The following extra packages will be installed:
  • Download squid 3.5.20
root@Ubuntu:/home/lucifer#     wget http://ftp.riken.jp/net/squid/archive/3.5/squid-3.5.20.tar.bz2
100%[=====================================================================================================================================================>] 3,129,141    441KB/s   in 7.4s   

Sau khi download chúng ta giải nén file squid vừa tải:

root@Ubuntu:/home/lucifer# tar -xjf squid-3.5.20.tar.bz2
  • Tạo file patch trong thư mục squid vừa giải nén:
root@Ubuntu:/home/lucifer# cd squid-3.5.20/src/
root@Ubuntu:/home/lucifer/squid-3.5.20/src# vim squid-3.5.20-ssl-forgery.patch

        
# squid-3.5.20-ssl-forgery.patch :
diff -ur squid-3.5.20-orig/src/client_side_request.cc squid-3.5.20/src/client_side_request.cc
--- squid-3.5.20-orig/src/client_side_request.cc        2016-07-01 13:37:50.000000000 +0200
+++ squid-3.5.20/src/client_side_request.cc     2017-03-10 16:48:08.920084072 +0100
@@ -530,6 +530,10 @@
 }
 debugs(85, 3, HERE << "validate IP " << clientConn->local << " non-match from Host: IP " << ia->in_addrs[i]);
 }
+       // disable fogery check. See https://code.nethesis.it/Nethesis/dev/issues/5088
+        http->request->flags.hostVerified = true;
+        http->doCallouts();
+        return;
}
ebugs(85, 3, HERE << "FAIL: validate IP " << clientConn->local << " possible from Host:");
hostHeaderVerifyFailed("local IP", "any domain IP");
  • Gán quyền và chạy file patch

    root@Ubuntu:/home/lucifer/squid-3.5.20/src# chmod +x squid-3.5.20-ssl-forgery.patch 
    root@Ubuntu:/home/lucifer/squid-3.5.20/src# patch < squid-3.5.20-ssl-forgery.patch
    patching file client_side_request.cc
    
  • Dưới đây là một số cấu hình mặc định cho squid chúng ta cần cài thêm :

    ./configure --prefix=/usr --includedir=/usr/include --infodir=/usr/share/info --sysconfdir=/etc --localstatedir=/var --libexecdir=/usr/lib/squid --srcdir=. --datadir=/usr/share/squid --sysconfdir=/etc/squid --mandir=/usr/share/man --enable-inline --enable-async-io=24 --enable-storeio=ufs,aufs,diskd,rock --enable-removal-policies=lru,heap --enable-gnuregex --enable-delay-pools --enable-cache-digests --enable-underscores --enable-icap-client --enable-follow-x-forwarded-for --enable-eui --enable-esi --enable-icmp --enable-zph-qos --enable-http-violations --enable-ssl-crtd --enable-linux-netfilter --enable-ltdl-install --enable-ltdl-convenience --enable-x-accelerator-vary --disable-maintainer-mode --disable-dependency-tracking --disable-silent-rules --disable-translation --disable-ipv6 --disable-ident-lookups --with-swapdir=/var/spool/squid --with-logdir=/var/log/squid --with-pidfile=/var/run/squid.pid --with-aufs-threads=24 --with-filedescriptors=65536 --with-large-files --with-maxfd=65536 --with-openssl --with-default-user=proxy --with-included-ltdl
    
  • Sau khi xong chúng ta có thể cài đặt :

     make
     make install
    
  • Cấu hình iptables cho squid ( ở đây mình sẽ add vào rc.local để tự động turnon khi restart, turnon server )

     root@Ubuntu:~# vim /etc/rc.local
     #file rc.local 
     #0
     iptables -A POSTROUTING -t nat -j MASQUERADE -o eth0
     #1
     iptables -t mangle -F
     iptables -t mangle -X
     #2
     echo 0 > /proc/sys/net/ipv4/conf/lo/rp_filter
     echo 1 > /proc/sys/net/ipv4/ip_forward
     #3
     ip rule add fwmark 1 lookup 100
     ip route add local 0.0.0.0/0 dev lo table 100
     #4
     iptables -t mangle -N DIVERT
     iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
     #5
     iptables -t mangle -A DIVERT -j MARK --set-mark 1
     iptables -t mangle -A DIVERT -j ACCEPT
     #6
     iptables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 3129
     iptables -t mangle -A PREROUTING -p tcp --dport 443 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 3130
     #7 
     squid start 
     exit 0
    
  • Chỉnh sửa file /squid.conf

    Các cấu hình chung :

    http_port 3128
    

    Đây là port default trên squid tiếp nhận request từ client ( 8080 )

    cache_access_log /var/log/squid/access.log, cache_log /var/log/squid/cache.log, cache_store_log /var/log/squid/store.log
    

    Đây là nhưng nơi mà squid sẽ lưu trữ lại log trong quá trình sử dụng. Nếu bạn muốn kiểm tra hay tìm kiếm nhưng thông tin gì về squid hay quá trình sử dụng hãy check mấy ông này             </div>
            
            <div class=

0