Searching...
10/5/11

Triển khai Web proxy cache với Squid

21:05
Squid là một gói phần mềm nguồn mở thường được sử dụng làm Web proxy cache. Nó nhận các request truy cập internet từ user rồi gửi các request này đến các web server đích, khi các response từ các web server đích trả lời nó gửi trả kết quả cho các user đồng thời lưu một bản copy vào cache của nó. Nếu các request tiếp theo của user yêu cầu tài nguyên mà có sẵn ở trên cache nó sẽ gửi trả resquest đó luôn mà không cần phải kết nối với web server đích nữa.

proxy - Upanh.com

Với web proxy cache bạn có thể tăng tốc độ truy cập internet đáng kể với những nơi có mật độ truy cập tài nguyên internet trùng nhau lớn. Ngoài ra nó còn cung cấp cho người quản trị khả năng quản lý user vô cùng mềm dẻo và linh hoạt.

Sau đây là một sô ý niệm cơ bản giúp bạn dễ dàng nắm bắt được hoạt động của Squid .

Để cài đặt bạn có thể download Squid dạng source code hoặc dạng rpm về cài đặt như bình thường hoặc với Centos bạn có thể cài đặt Squid đơn giản bằng câu lệnh
yum install Squid 

Sau khi cài đặt mọi hoạt động của Squid được cấu hình thông qua file /etc/ Squid / Squid .conf. 
Start, Stop, restart ... được thông qua script /etc/init.d/Squid . Sau đây là các cấu hình đặt trong file /etc/Squid/Squid.conf.

Visible host name
Squid sẽ không chạy được nếu bạn không đặt hostname cho server. Bạn thực hiện điều này thông qua tham số visible_hostname. Ví dụ bạn đặt tham số này trung với tên máy như sau.
visible_hostname webcache

Access control list
bạn có thể hạn chế khả năng truy cập internet của người dùng thông qua ACL. Mỗi dòng ACL sẽ định nghĩa một số thuộc tính mô tả hoạt động truy cập internet như thời gian truy cập, mạng nguồn ...sau đó chúng được kết hợp với khai báo http_access để xác lập cho Squid loại bỏ hay chấp nhận những gói tin thoả mãn những ACL này.
Squid so sánh những request truy cập web với danh sách những khai báo http_access từ trên xuống dưới, nếu thoả mãn điều kiện mô tả nó sẽ thực hiện hoạt động loại bỏ hoặc chấp nhận của khai báo đó và không tiếp tục xử lý request đó nữa. Thông thường những khai báo loại bỏ mọi request được đặt dưới cùng trong danh sách và bạn chỉ việc đặt những khai báo của mình lên trên nó.
Sau đây là một số vị dụ về ACL để bạn làm quen.
sử dụng các tham số thời gian để tạo ACL quản lý truy cập internet theo thời gian.

acl home_network src 192.168.1.0/24
acl business_hours time M T W H F 9:00-17:00
acl RestrictedHost src 192.168.1.23
http_access deny RestrictedHost
http_access allow home_network business_hours

khai báo mạng 192.168.1.0/24 là home_network, khai báo thời gian lam việc từ 9h00 đến 17h00 là business_hours, khai báo máy có địa chỉ ip 192.168.1.23 là máy RestrictedHost.
Không cho phép máy RestrictedHost truy cập internet, chỉ cho phép mạng home_network truy cập internet trong giờ business_hours.

acl mornings time 08:00-12:00
http_access allow mornings
cho phép mọi máy tính truy cập internet vào buổi sáng (8:00 đến 12:00)

Giới hạn truy cập theo địa chỉ Web site
bạn có thể khai báo những địa chỉ web site vào file text để sử dụng trong ACL
tạo một file /usr/local/allowed-sites. Squid chứa địa chỉ các web site được phép truy cập.
www.openfree.org
centos.org

tạo một file /usr/local/restricted-sites. Squid chứa địa chỉ các web site không được phép truy cập.
www.porn.com
illegal.com

kết hợp với những khai báo ở phần trên như sau
acl home_network src 192.168.1.0/24
acl business_hours time M T W H F 9:00-17:00
acl GoodSites dstdomain "/usr/local/etc/allowed-sites. Squid "
acl BadSites dstdomain "/usr/local/etc/restricted-sites. Squid "
http_access deny BadSites
http_access allow home_network business_hours GoodSites

khi đó mạng home_network chỉ được truy cập những địa chỉ liệt kê trong file /usr/local/allowed-sites. Squid trong thời gian business_hours

Giới hạn truy cập internet theo địa chỉ ip
acl home_network src 192.168.1.0/255.255.255.0
http_access allow home_network

Xác thực người dùng với NCSA
Squid có tích hợp chương trình ncsa_au có khả năng đọc các file password mã hoá cho phép bạn config Squid để nó bắt người dùng phải được xác thực thông qua username và password.
Bạn có thể sử dụng chương trình htpasswd (đi kèm với Apache ) để tạo file password /etc/ Squid / Squid _passwd (tên và vị trí file là bắt buộc).
bạn phải đảm bảo rằng file này là file có thể đọc được

touch /etc/ Squid / Squid _passwd
chmod o+r /etc/ Squid / Squid _passwd

bạn dùng chương trình htpasswd để tạo user trong file password như sau

htpasswd /etc/ Squid / Squid _passwd user1
New password:
Re-type new password:
Adding password for user user1

bạn có thể thêm user vào bất kỳ thời điểm nào mà không cần phải khởi động lại Squid 
Sửa file Squid .conf để cấu hình Squid sử dụng chương trình ncsa_auth xác thực user truy cập internet.

auth_param basic program /usr/lib/ Squid /ncsa_auth etc/ Squid / Squid _passwd
acl ncsa_users proxy_auth REQUIRED
http_access allow ncsa_users

đầu tiên là khai báo chương trình dùng để xác thực user và file password của user với tham số auth_param. Tiếp đến là tạo một ACL có tên là ncsa_users bắt Squid sử dụng phương thức xác thực auth_param đã khai báo ở trên với từ khoá REQUIRED. cuối cung là tạo một http_access chấp nhận các gói tin thỏa mãn ACL ncsa_users.
Sử dụng với cấu hình ở trên bạn có thể chỉ cho những user trong mạng bạn quản lý có password hợp lệ truy cập internet trong giờ làm việc (9:00-17:00)


auth_param basic program /usr/lib/ Squid /ncsa_auth /etc/ Squid / Squid _passwd
acl ncsa_users proxy_auth REQUIRED
acl business_hours time M T W H F 9:00-17:00
acl home_network src 192.168.1.0/255.255.255.0
http_access allow home_network ncsa_users business_hours

Sau mỗi thay đổi về cấu hình hoạt động cho Squid bạn phải reload hoặc restart lại Squid 
/etc/init.d/ Squid reload|restart

Để Squid là trong suốt đối với user (user không phải thay đổi những cài đặt trong trình duyệt web của mình) bạn cần đặt Squid chạy ở mode transparent thông qua khai báo http_port như sau

http_port 3128 transparent

với 3128 là port mà Squid nhận những request.
Bước cuối cùng, bạn cần cấu hình iptables để nó redỉect các request vào port 80 (http) về port 3128 ( Squid )

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 \
-j REDIRECT --to-port 3128
iptables -A INPUT -j ACCEPT -m state \
--state NEW,ESTABLISHED,RELATED -i eth1 -p tcp \
--dport 3128
iptables -A OUTPUT -j ACCEPT -m state \
--state NEW,ESTABLISHED,RELATED -o eth0 -p tcp \
--dport 80
iptables -A INPUT -j ACCEPT -m state \
--state ESTABLISHED,RELATED -i eth0 -p tcp \
--sport 80
iptables -A OUTPUT -j ACCEPT -m state \
--state ESTABLISHED,RELATED -o eth1 -p tcp \
--sport 80

Lưu ý: Ở đây Squid và iptables chạy trên cùng một server, eth1 là card nối với mạng nội bộ, eth0 là card mạng nối ra ngoài internet.
Nếu không muốn cấu hình iptables bạn có thể đặt trình duyệt web của user sử dụng trực tiếp Squid porxy web ở port 3128.
Với IE: vào mục Tool - > Internet Options -> Connections -> Lan Setting để khai báo địa chỉ và port của Squid (3128).
Với FF: vào mục Edit -> Preferences -> Advanced -> Proxies để khai báo địa chỉ và port của Squid (3128).
Squid sử dụng thư mục /var/spool/Squid để chứa các file cache. Do đó nếu Squid được dung đẻ quản lý một sô lượng user lớn có tần xuất truy cập internet cao thi bạn cần phải dành một partition có dung lượng lớn cho thư mục /var.
Squid lưu lại tất cả các thông tin và thông báo lỗi vào thư mục /var/log/Squid , việc thường xuyên xem xét nội dung các file trong thư mục này sẽ giúp ích cho bạn rất nhiều trong việc sử dụng Squid để quản lý user.

(Sưu tầm)

0 comments:

Đăng nhận xét