Qua đó, có thể xây dựng, quản lý tốt một hệ thống với nhiều Squid proxy server như việc quản lý truy cập của client, quản lý log, quản lý cache, xây dựng nhiều Squid proxy server với khả
Trang 1LỜI MỞ ĐẦU
Công nghệ thông tin ngày nay hầu như đã đi vào tất cả các lĩnh vực trong xã hội: kinh tế, giáo dục, giải trí và nó đã mang lại những thành quả rất đáng kể Đối với các doanh nghiệp, các tổ chức xã hội và các công ty thì công nghệ thông tin đóng một vai trò hết sức quan trọng trong việc phát triển và mở rộng việc sản xuất, kinh doanh và điều hành , tạo sự thuận lợi trong việc kinh doanh cũng như trong vấn đề quản lý và điều hành Vì thế việc chia sẻ internet cho hệ thống mạng nội bộ, cho nhân viên là cần thiết cho từng doanh nghiệp Nhưng với sự chia sẻ toàn cục sẽ dẫn đến nhiều vấn đề liên quan đến sự an toàn, bảo mật cũng như chính sách của hệ thống Hệ thống mạng
có thể bị tấn công từ bên ngoài, không thể quản lý được những truy cập của nhân viên, Để giải quyết vấn đề này, giải pháp được đưa ra là xây dựng một trạm kiểm soát trên cửa ngõ ra vào của hệ thống với môi trường bên ngoài Trạm kiểm soát được xây dựng thường là các Firewall server như ISA, TMG, pfSense,…hay các Proxy server như Socks, Squid,…Các giải pháp mã nguồn mở luôn là lựa chọn của các nhà quản trị bởi tính tiện dụng, cũng như vấn đề bản quyền Trong đó, Squid proxy server là ưu tiên hàng đầu bởi các tính năng mạnh mẽ của nó
Nhóm chúng em xin gửi lời cám ơn đến cô Nguyễn Thị Thanh Vân Với sự giúp
đỡ và hướng dẫn tận tình của cô Vân, nhóm chúng em đã hoàn thành nội dung tiểu luận về Squid proxy server và quản lý log bằng Sarg Chúng em đã nắm rõ được nhiều tính năng và hoạt động của Squid proxy Qua đó, có thể xây dựng, quản lý tốt một hệ thống với nhiều Squid proxy server như việc quản lý truy cập của client, quản lý log, quản lý cache, xây dựng nhiều Squid proxy server với khả năng High Availability và Load balancing
MỤC LỤC
Trang 2CHƯƠNG 1 TỔNG QUAN VỀ PROXY
Trang 31.1 Khái niệm Proxy và Proxy server
Proxy là một dịch vụ làm nhiệm vụ chuyển tiếp thông tin và kiểm soát tạo sự an toàn cho việc truy cập Internet của các client Proxy hoạt động ở tầng ứng dụng, chen ngang vào một loại lưu thông giữa client với server Proxy chen ngang vào loại lưu thông nào thì sẽ được đặt tên theo loại lưu thông đó Ví dụ DNS proxy, POP3 proxy, FTP proxy, Web proxy, v.v Vì hoạt động ở tầng ứng dụng, Proxy luôn hiểu thấu nội dung của lưu thông và có nhiều tác dụng hỗ trợ lưu thông: kiểm soát truy nhập, giám sát lưu thông, cơ chế cache nhằm tiết kiệm băng thông
Proxy cho phép client truy cập mạng thông qua một máy tính khác với một tài khoản duy nhất, máy tính này gọi là proxy server.Những yêu cầu của client sẽ phải qua proxy server vì thế máy tính này có thể kiểm soát được mọi giao tiếp từ trong internal
ra external và ngược lại Proxy server xác định những yêu cầu từ client và quyết định cho phép thực hiện hay là chặn yêu cầu Nếu yêu cầu được chấp nhận, Proxy server sẽ kết nối với server thật thay cho client và thực hiện chuyển tiếp những yêu cầu từ client đến server, cũng như chuyển trả lời từ server đến client
1.2 Khả năng và lợi ích của Proxy server
Hoạt động như cửa ngõ Internet, Proxy server làm cho mạng an toàn hơn Giúp nhiều máy tính truy cập Internet thông qua tài khoản truy cập nhất định Nhờ vậy, khi một công ty hoặc tổ chức có hệ thống mạng nội bộ gồm nhiều máy trạm nhưng chỉ có
1 kết nối Internet duy nhất (1 IP public), họ có thể sử dụng proxy server để cung cấp truy cập internet cho hệ thống mạng nội bộ của họ
Một Proxy server thường nằm bên trong Firewall, giữa client và server Mọi yêu cầu, truy cập của client phải qua Proxy server, nên việc bảo mật được thực hiện tốt hơn Lọc và ngăn cấm truy cập không được phép
Proxy server mang cơ chế cache, cơ chế này cho phép lưu trữ cục bộ nội dung của những website đã được client truy cập, điều này giúp cho tốc độ duyệt web nhanh
Trang 4hơn và giảm cước phí Yêu cầu của client sẽ được đáp ứng tại bộ nhớ cache mà không phải lấy thông tin trực tiếp từ internet
Proxy server bảo vệ hệ thống mạng nội bộ khỏi sự xác định từ bên ngoài bằng cách mang lại cho hệ thống hai định danh: một cho nội bộ, một cho bên ngoài Điều này tạo ra một “bí danh” đối với thế giới bên ngoài và gây khó khăn với các hacker muốn xâm nhập trực tiếp hệ thống mạng nội bộ
Ngoài ra, đối với các nhà cung cấp dịch vụ internet, do internet có nhiều lượng thông tin mà theo quan điểm của từng quốc gia, từng chủng tộc hay địa phương thì không phù hợp Vì thế các nhà cung cấp dịch vụ internet khu vực đó sẽ thực hiện phối hợp giữa proxy và firewall để tạo ra bộ lọc, nhằm ngăn chặn các thông tin độc hại hoặc trái thuần phong mỹ tục đối với quốc gia, chủng tộc hay địa phương đó Địa chỉ các website mà client yêu cầu truy cập sẽ được lọc tại bộ lọc này, nếu địa chỉ không bị cấm thì yêu cầu của client tiếp tục được gửi đi, tới các DNS server của các nhà cung cấp dịch vụ Firewall Proxy sẽ lọc tất cả các thông tin từ internet gửi vào máy của client và ngược lại
1.3 Cơ chế hoạt động của Proxy server
1.3.1 Forward Proxy
Forward proxy là một proxy đứng giữa một client và tất cả các server mà client
đó muốn truy cập Forward proxy chỉ thực hiện nhiệm vụ tiếp nhận yêu cầu từ client
Trang 5internet cho các client Nhưng bên cạnh đó hệ thống mạng sẽ không an toàn, không bảo mật và dễ bị tấn công từ bên ngoài.
1.3.2 Reverse Proxy
Tương tự Forward proxy, Reverse proxy cũng mang chức năng chuyển tiếp, chia sẻ internet cho hệ thống mạng bên trong, nhưng cơ chế hoạt động của Reverse proxy lại hoàn toàn khác với Forward proxy Reverse proxy trung chuyển yêu cầu của client thông qua các chính sách của hệ thống dựa vào các rule được thiết lập trên proxy server Nếu yêu cầu của client thỏa chính sách của hệ thống thì sẽ được Reverse proxy server đáp ứng Ngược lại, yêu cầu của client sẽ không được đáp ứng, đồng nghĩa với kết nối của client sẽ bị chặn và hủy kết nối
Trang 6Không chỉ những kết nối của client được Reverse proxy kiểm soát, mà cả những trả lời của các server từ internet cũng được kiểm soát chặc chẽ Với việc kiểm soát các trả lời từ bên ngoài, Reverse proxy sẽ tăng khả năng tiết kiệm băng thông, độ
ổn định, cũng như sự an toàn và bảo mật cao cho hệ thống mạng nội bộ thông qua các chính sách được áp đặt trên proxy như: giới hạn dung lượng sử dụng của client, chặn upload/download theo định dạng file,…
1.4 Phân loại Proxy server
1.4.1 Theo chức năng
Trang 7Anonymous, Hight Anonymity, Transparent.
• Anonymous
_ Đôi khi còn được gọi là web proxy, giúp client ẩn danh (giấu IP), khi lướt Web
HTTP proxy server không gửi thông số cụ thể biến http_x_forwarded_for tới site đang truy cập, do vậy có thể che dấu IP của client
_ Tuy nhiên, điều đó không có nghĩa giúp ẩn dấu hoàn toàn, vì các website có thể sử dụng các script để thu thập thông tin về việc client đang truy cập site của họ thông qua một proxy nào đó đang phục vụ cho client
• High Anonymity
_ Mức độ che dấu tung tích cao hơn Anonymous High Anonymity hoàn toàn không
gửi đi bất kì thông số nào của các biến http_x_forwarded_for, http_via và http_proxy_connection Do vậy các site được truy cập không thể biết client đang dùng proxy , cũng như không xác định được IP của client
• Transparent
_ Còn được gọi là proxy trong suốt Khác với 2 loại trên, transparent là sự kết hợp một
proxy server và một gateway
_ Đây là phương thức thường được các network admin áp đặt cho client trong internal, client không nhận thức được mình đang truy cập internet thông qua một proxy (cổng giám sát)
_ Yêu cầu truy cập của client được chuyển đến qua địa chỉ gateway, sau đó chuyển sang proxy server xử lý Khi client dùng loại proxy này, thì họ không biết được rằng
họ đang dùng một proxy và bị kiểm soát Client chỉ cần thiết lập địa chỉ IP của gateway do admin cung cấp, mà không phải xác lập các thông số proxy trong trình duyệt cũng như internet applications khác
1.4.2.Theo khả năng hỗ trợ:
Chúng ta có thể phân Proxy thành 2 loại theo khả năng hỗ trợ là:
Trang 8HTTP/HTTPS proxy và Socks /Sockets
• HTTP/HTTPS Proxy(proxy thông thường):
_ Các proxy server sẵn sàng cho phép các dịch vụ thông thường trên internet
• SOCKS hay Sockets:
_ Là một Circuit-level proxy server cho các IP theo định nghĩa từ IETF (Internet Engineering Task Force - một cộng đồng các chuyên gia về mạng có nhiệm vụ nghiên cứu, thiết kế, xây dựng kiến trúc internet) Socks được viết bởi David và Michelle Koblas vào những năm đầu của thập niên 90
_ Socks đã nhanh chóng được dùng rộng rãi nhưng không được chứng nhận từ những
tổ chức chuyên cung cấp các tiêu chuẩn internet) Mặc dù Socks ra đời sớm và được dùng phổ biến, nhưng Socks được IETF thông qua lần đầu tiên là Socks5
_ Socks ban đầu là hệ thống proxy được sử dụng cho các lưu thông như FTP, Telnet, nhưng không dành cho HTTP Socks4 kiểm soát các TCP connection (chiếm phần lớn các application trên Internet) Socks5 còn hỗ trợ thêm UDP, ICMP, xác thực, DNS service
_ Socks buộc client phải được cấu hình để chuyển trực tiếp các yêu cầu đến Socks server, hoặc ngược lại Socks driver sẽ ngăn chặn các yêu cầu từ những client chưa được cấu hình Socks proxy
_ Nhiều Web browsers và các internet applications khác hiện nay đã hỗ trợ Socks, vì thế khá dễ dàng khi làm việc với các Socks server
Trang 9CHƯƠNG 2 SQUID PROXY SERVER
2.1 Tổng quan về Squid proxy
2.1.1 Giới thiệu
Squid proxy một là một giải pháp proxy phần mềm mã nguồn mở Squid làm nhiệm vụ chuyển tiếp các yêu cầu từ phía client và đồng thời đóng vai trò kiểm soát tạo sự an toàn cho việc truy cập internet của các client cũng như hệ thống nội bộ, tiết kiệm băng thông, cải tiến bảo mật, tăng tốc độ truy cập web cho client
Hiện nay, trên thị trường có rất nhiều chương trình proxy-server nhưng chúng lại mang hai nhược điểm Thứ nhất là phải trả tiền để sử dụng Thứ hai là hầu hết không hỗ trợ giao thức ICP (ICP là giao thức được sử dụng để cập nhật những thay đổi về nội dung của những URL sẵn có trong bộ nhớ cache – là nơi lưu trữ nội dung những trang web mà client đã từng truy cập) Nhưng không giống những người anh
em khác, Squid lại có đủ khả năng đáp ứng hai yêu cầu trên, sử dụng miễn phí và hỗ trợ giao thức ICP Chính vì lẽ đó Squid đã trở thành một trong những proxy phổ biến được nhiều người biết đến và được sử dụng nhiều nhất trong các giải pháp proxy của cộng đồng mạng Squid là sự lựa chọn tốt nhất cho một proxy-cache server
Squid đưa ra kỹ thuật lưu trữ ở cấp độ cao, đồng thời hỗ trợ các dịch vụ thông thường như FTP, Gopher và HTTP Squid lưu trữ thông tin mới nhất của các dịch vụ trên trong RAM, quản lý một cơ sở dữ liệu lớn các thông tin trên đĩa, hỗ trợ kỹ thuật điều khiển truy cập (SNMP), hỗ trợ giao thức SSL cho các kết nối bảo mật thông qua proxy Hơn nữa, Squid có thể liên kết với các cache của các proxy server khác nhằm sắp xếp lưu trữ các trang web một cách hợp lý thông qua hai mô hình cache ngang hàng và cache cha-con
Chúng ta có thể biết được nhiều thông tin và hỗ trợ về Squid proxy từ trang chủ của Squid: http://www.squid-cache.org
Trang 102.1.2 Tại sao chúng ta cần dùng Squid?
Squid Proxy mang đến nhiều lợi ích không tưởng cho hệ thống :
_ Khả năng cân bằng tải
_ Hỗ trợ xác thực client theo nhiều hệ thống database khác nhau: LDAP, MySQL,NCSA,…
_ Không mất chi phí bản quyền vì là phần mềm mã nguồn mở
_ Được dùng nhiều trong các doanh nghiệp lớn, các trường đại học lớn ở trong và ngoài nước
_ Quản lý các chính sách QoS rất tốt (giới hạn download phim/ảnh theo giờ, hạn chế băng thông từng địa chỉ IP, giới hạn số phiên kết nối đồng thời …)
_ Hỗ trợ rất tốt cho các dịch vụ đa phương tiện (video, audio)
_ Khả năng cache nội dung tốt, tốc độ cao
_ Cho phép thoải mái tùy biến và có khả năng tích hợp với các phần mềm hỗ trợ khác ( Shorewall,…)
_ Bảo mật bằng ứng dụng Iptables miễn phí tích hợp sẵn trên Linux nên rất gọn nhẹ, đối với các đơn vị không có khả năng tài chính thì không cần mua thêm các thiết bị hay phần mềm Firewall
Trang 112.1.3 Cơ chế hoạt động
Mô hình Squid Proxy Server xác thực user thông qua LDAP server
Công việc của một Squid proxy server là thực hiện tiếp nhận yêu cầu từ client, xác thực client (LDAP server) và quyết định đáp ứng hay không đáp ứng Nếu yêu cầu thỏa mãn các chính sách của hệ thống, Squid sẽ kết nối đến server bên ngoài thay cho client cũng như chuyển trả lời từ các server đó về cho client Vì thế, Squid proxy vừa đảm nhiệm vai trò như là cầu nối trung gian giữa server và client (Forward proxy), vừa như là trạm kiểm soát trên cây cầu do bản thân Squid tạo ra (Reverse proxy)
Bên cạnh việc chuyển tiếp các yêu cầu từ phía client, Squid cũng đồng thời lưu lại trên đĩa những dữ liệu được trả về tử server bên ngoài, khả năng này gọi là caching Những dữ liệu này thường thuộc các giao thức HTTP, HTTPS, FTP,… Nếu trong thời gian hiệu lực mà một hay nhiều client cùng yêu cầu một nội dung thì Squid proxy sẽ ngay lập tức đáp ứng lại những yêu cầu từ phía client từ những nội dung đã được lưu trữ tại bộ nhớ cache
Squid có thể cấu hình để trở thành 2 loại proxy server mang nhiệm vụ khác nhau là Forward proxy và Reverse proxy server Với Forward proxy thì Squid mang chức năng là cầu nối trung gian, trung chuyển, chia sẻ các kết nối internet cho hệ thống mạng nội bộ mà không có bất kì một chính sách nào lên hệ thống Nhưng với cấu hình là một Reverse proxy server, Squid mang lại nhiều khả năng vượt hẳn so với các loại proxy khác Tuy hoạt động về cơ bản cũng giống Forward proxy, nhưng Squid
sẽ được áp lên các chính sách cho hệ thống mạng nội bộ, ngăn chặn truy cập không
Trang 12được phép, điều khiển lưu lượng băng thông,…đem đến sự ổn định và bảo mật cho toàn bộ hệ thống mạng nội bộ Đây là điểm nổi bật của Squid proxy server.
• Cách 1:Cài đặt từ binary package
Bước 1:Kiểm tra xem Squid đã được cài đặt trên máy hay chưa:
# rpm -qa|grep squid
Bước 2:Nếu chưa có thì tiến hành cài như sau:
# rpm –ivh tên_gói_Squid
Hoặc có thể cài đặt từ kho phần mềm Linux
- Đối với Debian / Ubuntu:
# apt-get install squid
- Đối với Fedora / Centos:
# yum install squid
- Đối với FreeBSD:
# pkg_add -r squid
• Cách 2:Cài đặt từ source code
B1 Download gói Squid tại website www.squid-cache.org
Trang 13B4 Khởi tạo môi trường
Lưu ý: Tại bước khởi tạo môi trường, tùy vào nhu cầu sử dụng mà chúng ta có các tùy
chọn khác nhau Chúng ta có thể tìm thấy hướng dẫn cho các tùy chọn thông qua lệnh:
_ Cho phép hỗ trợ và chỉ định danh sách các loại I/O modules lưu trữ
# /configure enable-storeio = ufs, aufs, coss, diskd, null
_ Cho phép hỗ trợ chứng thực và module được dùng cho chứng thực
#./configure enable-auth=basic, digest, ntlm
enable-auth-basic
_ Cho phép hỗ trợ và chỉ định các chương trình chứng thực cơ bản
Trang 14#./configure enable-auth-basic=PAM, NCSA, LDAP
_ Với cài đặt bằng lệnh yum, sau khi cài đặt chúng ta có các thư mục cơ bản sau:
/etc/squid/ : chứa các file cấu hình
/var/log/squid : chứa các file ghi log
/var/spool/squid : thư mục chứa cache
_ Mọi hoạt động của Squid được cấu hình qua file squid.conf với đường dẫn
_ HTTP port là nơi mà Squid sẽ lắng nghe các yêu cầu kết nối từ client
_ Mặc định Squid sẽ lắng nghe trên port 3128
2.3.2.2 Thiết lập cho HTTP port
Có nhiều cách thiết lập khác nhau cho HTTP port trong file cấu hình của Squid squid.conf Việc lựa chọn cấu hình theo cách nào là tùy vào nhu cầu của hệ thống
Trang 15Ví dụ:
http_port 3128
Squid sẽ lắng nghe trên port 8080
_ Chúng ta cũng có thể chỉ định tổ hợp địa chỉ IP và port nơi chúng ta muốn Squid lắng nghe yêu cầu của client Thường thì chúng ta sử dụng phương pháp này khi server
có nhiều interface và chỉ muốn Squid lắng nghe tương ứng với mỗi interface là kết nối với một mạng LAN
_ Ở những phiên bản mới đây, chúng ta có thể chỉ định những mode hoạt động như intercept, tproxy,…
+ Intercept mode sẽ hỗ trợ đánh chặn những yêu cầu từ client mà không cần phải cấu hình ở máy client Nhược điểm là IPv6 không hỗ trợ cho Intercept mode
Trang 16Cần cân nhắc kĩ trong việc chỉ định http_port thuộc các port chuẩn như 3128 hoặc 8080 Việc chỉ định như vậy đặt ra yêu cầu phải đảm bảo bảo mật cao cho các port này Nếu chúng ta không muốn dành thời gian cho việc này, chúng ta có thể chỉ định bất kì port nào tùy thích có giá trị từ 10000 trở lên.
Trang 17CHƯƠNG 3 CẤU HÌNH RULE TRONG SQUID PROXY
3.1 Access Control List
3.1.1 Khái niệm
Access Control List ( ACL) là cấu trúc căn bản để xác định yêu cầu của client
và thường được kết hợp với các Access List Rules khác nhau như
http_access,http_reply_access, để điều khiển truy cập của client thông qua nhiều
giao thức khác nhau Sau khi tiếp nhận yêu cầu từ client, Squid sẽ thực hiện xác định yêu cầu từ Access Control Lists và sau đó sẽ quyết định xem có thực hiện yêu cầu này hay là không thông qua các Access List Rules
Mỗi Access Control Lists phải được xác định bởi tên và loại, chỉ định giá trị cho loại ACL cụ thể:
Cú pháp:
acl ACL_NAME ACL_TYPE value
acl ACL_NAME ACL_TYPE “ /path/to/filename ”
Giá trị cho ACL_NAME có thể được thiết lập phía sau ACL_TYPE hoặc Squid
có thể đọc nó từ 1 file riêng biệt Cần chú ý là các giá trị ACL_NAME và ACL_TYPE nằm trong file này cần được viết riêng lẻ theo từng dòng
3.1.2 ACL type
Squid có khoảng 25 ACL types Mỗi yêu cầu của client Squid nhận được thường mang các đặc tính sau: địa chỉ IP, domain name, địa chỉ MAC, HTTP header, Nhưng chúng ta có thể phân ra thành một số loại cơ bản sau:
Trang 18proxy server ACL src chỉ định địa chỉ IP của client Khi nhận 1 yêu cầu từ client,
Squid sẽ so sánh địa chỉ IP có trong src ACL với địa chỉ IP của client Sau đó sẽ quyết
định đáp ứng hay chặn yêu cầu
_ Yêu cầu đặt ra, công ty A trụ sở tại Building A có 4 tầng, mỗi tầng là 1 phòng ban
Sau khi quy hoạch địa chỉ IP cho các phòng ban, ta có danh sách địa chỉ IP sau:
Trang 19Hạn chế của dst ACL là server của website được chỉ định trong ACL có thể thay đổi
địa chỉ IP, điều này làm cho ACL trên không còn tác dụng
c ACL type: myip
Sử dụng ACL myip để chỉ định địa chỉ local IP mà Squid proxy server phục vụ
các yêu cầu Điều này chỉ hữu ích nếu server chạy Squid proxy có nhiều hơn 1 network interface
Ví dụ:
_ Squid proxy server A có 2 network interface Xây dựng 2 ACLs cho 2 phòng
Acounting và Engineer sử dụng ACL type myip với 2 subnet 172.16.2.0/24 và
172.16.3.0/24
acl Accounting myip 172.16.2.0/24 acl Engineer myip 172.16.3.0/24
d ACL type: arp
Chúng ta có thể xây dựng ACL bằng cách chỉ định địa chỉ MAC của client Địa chỉ MAC là địa chỉ vật lí hay còn được gọi là số nhận dạng của mỗi thiết bị do nhà sản
Trang 20xuất cung cấp Squid cung cấp một ACL đặc biệt là arp cho phép ta chỉ định địa chỉ
MAC của máy client muốn điều khiển truy cập
Ví dụ:
_ Chỉ định máy client có địa chỉ MAC 00:1D:3F:4D:5C:EE
acl mac_client arp 00:1D:3F:4D:5C:EE
Một số lưu ý:
_ arp ACL type chỉ thực hiện được khi trong quá trình cài đặt Squid ta lựa chọn
#./configure enable-arp-acl.
_ arp ACL type không hỗ trợ trên tất cả hệ điều hành Squid có thể chỉ xác định được
địa MAC của client trên cùng một miền broadcast domain
3.1.2.2 Tên Domain
ACL types: srcdomain, dstdomain, dstdom_regex
Thay vì chỉ định địa chỉ IP trong các ACL Chúng ta có thể xây dựng các ACL bằng việc chỉ định tên domain nội bộ hoặc tên domain bên ngoài Cách này có ưu điểm hơn so với sử dụng địa chỉ IP do địa chỉ IP server đích mà client yêu cầu có thể bị thay đổi, điều đó làm cho các ACL đã được xây dựng sẽ không có giá trị nếu không được cập nhật
a ACL type: srcdomain
Với srcdomain ACL, chúng ta có thể chỉ định tên domain trong nội bộ.
Ví dụ:
acl our_site srcdomain www.myweb.com
acl our_site srcdomain admin.myweb.com
b ACL type: dstdomain
Với dstdomain ACL, chúng ta có thể chỉ định tên domain của các server bên
ngoài
Ví dụ:
1 acl out_site dstdomain www.24h.com.vn
2 acl out_site dstdomain 24h.com.vn
Trang 21Ở ví dụ 1, với việc chỉ định địa chỉ đích là www.24h.com.vn thì Squid sẽ xác định được bất kì yêu cầu cho bất kì trang web nào thuộc domain www.24h.com.vn Vì thế, nếu client truy cập www.24h.com.vn hay www.24h.com.vn/thethao thì Squid đều có
thể hiểu được Nhưng điều này sẽ không đúng trong trường hợp, yêu cầu của client là
những site như 24h.com.vn hay chungkhoan.24h.com.vn trong khi những site này đều thuộc domain 24h.com.vn
Để giải quyết vấn đề trên, ta thêm trước domain name dấu “ ” như ví dụ 2
c ACL type: dstdom_regex
Với dstdom_regex, chúng ta có thể chỉ định được những từ khóa trong các site
mà client truy cập thông qua file dữ liệu bên ngoài
Ví dụ:
acl site_key dstdom_regex “/etc/squid/rule/denylistkey.txt”
Trong file denylistkey.txt, chúng ta chỉ định các từ khóa cần chỉ định:
ACL types: port, myportname
Chúng ta có thể sử dụng port mạng để xác định các yêu cầu của client sau đó sẽ thiết lập các access rule để điều khiển truy cập
a ACL type: port
Squid cung cấp port ACL để chỉ định port mạng dùng để kiểm soát các client
Loại ACL này thiết lập rất dễ dàng TCP port có 16 bit và do đó giá trị sẽ lớn hơn 0 và
nhỏ hơn 65.536 port ACL có thể nhận 1 giá trị hoặc 1 range port.
Ví dụ:
Trang 22acl allow_port port 80
acl allow_ports port 2000-6000
acl allow_multiports port 80 443 3000-8000
Thông thường, người quản trị sẽ cho phép một số port cần thiết cho dịch vụ của
hệ thống và sẽ cấm tất cả những port còn lại, ngăn chặn việc truy cập bất hợp pháp tại các port này nhằm đảm bảo an toàn cho hệ thống
Squid có nhiều port được xác định trước tại 2 ACL là SSL_ports và Safe_ports
và nằm tại file cấu hình mặc định squid.conf :
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 1025-65535 # unregistered ports
Trên đây là danh sách port cho nhiều giao thức phổ biến như HTTP, FTP, HTTPS,…Tùy vào hệ thống và nhu cầu của client mà người quản trị có thể thêm một số port khác vào SSL_ports và Safe_ports Nhưng cần phải cẩn trọng trong việc thêm port mới vào danh sách Safe_ports Nếu chưa thực sự hiểu rõ ý nghĩa của port muốn thêm vào thì điều này nhiều lúc sẽ làm ảnh hưởng đến sự an toàn của hệ thống
Ví dụ:
Nếu thêm mới port 25 (Simple Mail Transfer Protocol or SMTP) vào danh sách
Trang 23tương đồng giữa 2 protocols HTTP và SMTP Khi đó hệ thống sẽ đối mặt với vấn đề mail spam và chúng ta hoàn toàn không muốn Squid cache được sử dụng cho việc spam relay.
b ACL type: myportname
Squid cũng cung cấp 1 ACL type sử dụng port mạng là myportname nhưng nó
khác biệt với ACL type port ACL type myportname chỉ định port number trên Squid
proxy server nơi mà client kết nối tới Squid
Cũng tương tự như ACL type myip, myportname chỉ hữu ích khi chúng ta cấu hình
Squid proxy server lắng nghe trên nhiều port sử dụng http_port trong file cấu hình
squid.conf
Ví dụ:
_ Squid proxy server A có 2 network interface Xây dựng 2 ACL cho 2 phòng
Acounting và Engineer sử dụng ACL type myportname với 2 subnet 172.16.2.0/24 và
172.16.3.0/24, thiết lập Squid lắng nghe trên 2 port là 8080 và 3128 Ứng với mỗi port
Trang 24ACL type: method
Mỗi yêu cầu HTTP đều đi cùng với một phương thức HTTP Ví dụ, client gõ
http://website.com / vào trình duyệt web, khi đó client thực hiện yêu cầu bằng
phương thức GET đến website.com server Hoặc là, khi client tương tác với một online form bất kì, khi đó client thực hiện yêu cầu bằng phương thức POST đến server
Squid hỗ trợ các phương thức HTTP cơ bản sau: GET, POST, PUT, HEAD, CONNECT, TRACE, OPTIONS và DELETE GET là phương thức HTTP được sử dụng nhiều nhất, sau đó đến POST, PUT và các phương thức khác
Squid cung cấp ACL type method để xác định các yêu cầu dựa vào phương thức
HTTP cho từng yêu cầu cụ thể mà client sử dụng Hầu hết các phương thức HTTP mặc định được cho phép, ngoại trừ phương thức CONNECT Bởi phương thức CONNECT được sử dụng cho các yêu cầu turnneling thông qua HTTP proxy Chúng
ta cần phải đặc biệt cẩn trọng với phương thức HTTP này, bởi vì chúng ta sẽ không muốn Squid bị thông qua bởi các công cụ và dịch vụ remote Mặc định Squid cho phép sử dụng phương thức CONNECT trong file cấu hình:
acl CONNECT method CONNECT
acl SSL_ports port 443
http_access deny CONNECT !SSL_ports
Với cấu hình trên, Squid chỉ cho phép CONNECT method cho SSL trên port
443, đây là standard port cho HTTPS Còn những yêu cầu sử dụng CONNECT method khác đều bị cấm truy cập Tuy nhiên, tùy vào nhu cầu của hệ thống, người quản trị có thể tiến hành thêm port mới vào SSL_ports ACL nếu cần thiết Nhưng cần phải chắc chắn port thêm vào nằm trong danh sách safe ports
3.1.2.5 Protocol
ACL type: proto
Trang 25Squid cung cấp 1 loại ACL khác là proto Proto ACL có thể xác định giao thức
được sử dụng trong yêu cầu của client Ví dụ, khi client truy cập đến
http://myweb.com/ hay ftp://myftp.com / thì giao thức được sử dụng là HTTP và FTP
Một số giao thức khác cũng thường được sử dụng như HTTPS,SSH,…
Một số ví dụ sử dụng proto:
_ Deny tất cả yêu cầu FTP
acl ftp_requests proto FTP
http_access deny ftp_requests
_ Deny tất cả yêu cầu FTP từ một IP cụ thể
acl ftp_requests proto FTP
acl marketing src 172.16.2.8/24
http_access deny marketing ftp_requests
Ngoài những giao thức cơ bản đã đề cập, Squid còn hỗ trợ giao thức đặc biệt
cache_object Giao thức này được sử dụng cho interface quản lý cache Theo mặc
định, việc quản lý cache chỉ có thể truy cập từ Squid proxy server (localhost), điều này thể hiện qua file cấu hình mặc định ban đầu squid.conf :
acl manager proto cache_object
acl localhost src 127.0.0.1
http_access allow manager localhost
http_access deny manager
Với cấu hình trên, giao thức cache_object chỉ sử dụng được từ localhost Nếu Administrator muốn sử dụng giao thức cache_object từ một máy khác ( ví dụ từ máy
vi tính riêng của Administrator), họ có thể cấu hình sau:
acl manager proto cache_object
acl localhost src 127.0.0.1
acl admin src 192.168.10.80/32
Trang 26http_access allow manager localhost
http_access allow manager admin
http_access deny manager
Cấu hình trên đảm bảo chỉ có Administrator có thể sử dụng interface quản lý cache của Squid proxy server
3.1.2.6 Thời gian
ACL type : time
Điều khiển truy cập dựa vào thời gian là một trong những điểm đặc trưng thú vị
của Squid Sử dụng ACL type time cho phép chúng ta xác định thời gian của ngày, ngày của tuần và khoảng thời gian Cấu trúc cơ sở của time :
acl ACL_NAME time [ngày-viết tắt] [h1:m1- h2:m2]
Chỉ định ngày, khoảng thời gian là lựa chọn tùy ý và tùy theo nhu cầu của hệ thống Nhưng phải chỉ định ít nhất một loại thời gian Kiểu giờ mặc định nên để là 24h Sau đây là danh sách ngày viết tắt được sử dụng :
_ Xây dựng ACL xác định tất cả những requests vào Thứ 2-6-Chủ nhật
acl days time M F S
Trang 27_ Xây dựng ACLs quản lý truy cập cho công ty A có giờ làm việc từ thứ 2-7, ngày 8h, sáng từ 8h - 11h00, chiều từ 13h - 17h00, giờ nghỉ trưa từ 11h00 - 12h59
acl morning_time time M T W H F A 08:00 – 10:59
acl lunch_time time M T W H F A 11:00- 12:59
acl afternoon_time time M T W H F A 13:00 – 17:00
3.1.2.7 URL và URL path
ACL type: url_regex, urlpath_regex
a ACL type: url_regex
Squid cung cấp ACL type url_regex để chỉ định các biểu mẫu chính quy tương
ứng với các định dạng file có trong URL mà client yêu cầu Các URL thường có dạng sau: http://www.zing.vn/americanmusic/index.php?Somebody.mp3 ,
Biểu mẫu chính quy (regular expression) là 1 chuỗi kí tự có quy tắc, có chính quy, nhằm để mô tả những chuỗi kí tự khác
Ví dụ :
_ Xây dựng ACL chỉ định biểu mẫu chứa những file hình ảnh dạng mp3
acl web_mp3 url_regex mp3$
Mặc định, các biểu mẫu chính quy có phân biệt chữ hoa và chữ thường Với ví dụ trên,
ACL web_ mp3 sẽ không phù hợp nếu file nhạc MP3 Để tránh tình trạng này, chúng
ta có thể thêm tùy chọn –i trong ACL
acl web_mp3 url_regex -i mp3$
b ACL type: urlpath_regex
Với urlpath_regex cho phép thực hiện ACL url_regex thông qua file dữ liệu
nằm bên ngoài Trong file dữ liệu, chúng ta chỉ định các biểu mẫu tương ứng với các định dạng file có trong URL mà client yêu cầu
Ví dụ:
acl list_file_type urlpath_regex “/etc/squid/rule/denyfiletype.txt”
Trang 28Trong file denyfiletype.txt, chúng ta chỉ định các biểu mẫu:
ACL type: proxy_auth, proxy_auth_regex
a ACL type: proxy_auth
Cách tốt nhất để bảo vệ hệ thống khỏi những hacker từ bên ngoài là sử dụng proxy authentication Với proxy authentication, khi thực hiện một yêu cầu , client cần phải xác thực thông tin của mình Thường đó là username và password Sau khi đánh giá và kiểm tra thông tin xác thực của client, Squid mới bắt đầu thực hiện kiểm soát truy cập Điểm đáng chú ý là Squid không thể xác nhận tính hợp lệ của các thông tin xác thực từ client Công việc này được xử lý nhờ sự trợ giúp của các quá trình bên ngoài
Squid cung cấp ACL type proxy_auth để chỉ định danh sách username cần
chứng thực Tuy nhiên, Squid không thể tự kiểm tra tính hợp lệ của các thông tin này,
vì thế chúng ta cần chỉ định một chương trình chứng thực để xác thực username và password được gửi từ client Chương trình xác thực được thiết lập bởi dòng
auth_param tại file cấu hình squid.conf.
Hiện tại, Squid hỗ trợ một số dịch vụ xác thực như: HTTP Basic protocol, Digest authentication protocol, NTLM hay một số hệ thống cơ sở dữ liệu như : LDAP, MySQL,…
Trang 29_ Để thực thi proxy authentication Chúng ta thực hiện cấu hình sau:
acl authen proxy_auth REQUIRED
http_access allow authen
http_access deny all
Với cấu hình trên, chỉ những client được chứng thực mới có thể truy cập đến proxy server
_ Nếu chúng ta muốn chỉ định một số đặc quyền riêng cho một user nào đó Ví dụ chỉ
có administrator mới có thể truy cập đến site http://admin.myweb.com, các user khác
nếu được chứng thực thì vẫn truy cập bình thường ngoại trừ site của admin, chúng ta
có thể cấu hình như sau:
acl authen proxy_auth REQUIRED
acl admin proxy_auth administrator
acl admin_site dstdomain admin.myweb.com
http_access allow admin admin_site
http_access deny admin_site
http_access allow authen
http_access deny all
b ACL type: proxy_auth_regex
Squid hỗ trợ ACL type proxy_auth_regex để chỉ định những usernames cần
chứng thực sử dụng regular expression ACL này chỉ hữu ích khi username được đặt theo khuôn mẫu nhất định Ví dụ phòng ban_username
Ví dụ:
_ Những user thuộc phòng marketing chỉ được truy cập vào site
http://marketing.myweb.com chỉ khi đã được chứng thực
acl marketing_regex proxy_auth_regex ^marketing _
acl marketing_site dstdomain marketing.company.com
http_access allow marketing_regex marketing_site
Trang 30http_access deny all
3.1.2.9 User limit
ACL type: maxconn
Để đảm bảo hệ thống mạng hoạt động thông suốt, tiết kiệm băng thông, thường
chúng ta sẽ giới hạn lượng kết nối của các client Squid cung cấp ACL type maxconn,
cho phép chỉ định số lượng kết nối tối đa từ địa chỉ IP của client
Ví dụ:
acl accounting_ip src 172.16.2.0/24
acl engineer_ip src 172.16.3.0/24
acl accounting_max maxconn 10
acl engineer_max maxconn 20
http_access deny accounting_ip accounting_max
http_access deny engineer_ip engineer_max
Thiết lập trên cho phép, những client thuộc accounting có tối đa 10 kết nối và engineer có 20 kết nối tại một thời điểm Nếu vượt quá maxconn thì yêu cầu sau của client sẽ bị chặn
3.1.2.10 HTTP Header
ACL type: browser, req_mine_type, rep_mine_type, http_status
a ACL type : browser
Hầu hết các HTTP request đều mang User-agent trong header, đó là một chuỗi thể hiện tên và version của browser và hệ điều hành Ví dụ đối với Mozilla Firefox 3.6.6 trên hệ điều hành Linux-32bit có User-agent sau:
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.6) Gecko/201625Firefox/3.6 GTB7.1
Squid cung cấp ACL type browser, cho phép xác định yêu cầu của clien dựa
vào User-agent header và kết hợp với access rule để kiểm soát truy cập của client
Trang 31Ví dụ:
_ Chỉ cho phép những truy cập từ Firefox
acl firefox_clients browser -i firefox
http_access allow firefox_clients
http_access deny all
b ACL types: req_mine_type, rep_mine_type
Req_mine_type và rep_mine_type ACL type được sử dụng chỉ định các Content
– Type của các yêu cầu của client và trả lời từ server Hai ACL type này giúp chỉ định loại dữ liệu nào sẽ được hoặc không được upload hoặc download từ các servers
Với upload, chúng ta sử dụng req_mine_type ACL.
Ví dụ:
acl upload_video req_mine_type -i ^video/
http_access deny upload_video
Với download, chúng ta dùng rep_mine_type ACL Ví dụ, chúng ta muốn chặn mọi
download video từ các servers
Ví dụ:
acl down_video rep_mine_type -i ^video/
http_reply_access deny down_video
c ACL type: http_status
Khi Squid liên lạc tới remote server trên yêu cầu của client, nó sẽ nhận trả lời
cụ thể cho mỗi yêu cầu Tùy vào hiện trạng của remote server, mà Squid sẽ nhận những trạng thái (status) khác nhau Ví dụ như với status 200 là yêu cầu thành công,
404 là trang web không tìm thấy,
Squid có ACL http_status để chỉ định những status nhận được từ remote server
Trang 32Ví dụ:
_ Chặn truy cập tất cả những server bị lỗi ( status 5xx)
acl fail_server http_status 500-510 http_reply_access deny fail_server
3.1.3 Một số lưu ý khi xây dựng các ACL
Trong trường hợp danh sách giá trị muốn kiểm soát của chúng ta quá lớn, chúng
ta có thể tạo một file chứa danh sách đó, sau đó chỉ định Squid đọc danh sách từ file
Ví dụ:
acl list_sites dstdomain '/etc/squid/list_sites.txt'
Chúng ta sẽ tạo file list_sites.txt cùng thư mục với file cấu hình của Squid squid.conf Thông thường file list_sites.txt được thiết lập cho ví dụ trên như sau:
# Chỉ định một domain name trên mỗi dòng
Trang 333.1 Access List Rules
Để cấu hình cho Squid proxy server kiểm soát các yêu cầu truy cập từ client, ta cần xây dựng các Access Control List kết hợp với các Access List Rules ACL chỉ có thể sử dụng để xác định các yêu cầu và yêu cầu đó của client có được đáp ứng hay không thì còn tùy thuộc vào các Access List Rules
Squid cung cấp nhiều Access List Rules, http_access là một trong những Access
Rules được sử dụng phổ biến Chúng ta có thể thấy điều này ở các ví dụ thuộc phần Access Control List (ACL)
Khi chúng ta có nhiều Access Rule trong file cấu hình, Squid sẽ thực thi tuần tự
từ trên xuống dưới
Một số Access Control Rules cơ bản mà Squid proxy cung cấp:
3.1.1 HTTP protocol
a Cho các yêu cầu
Http_access là access rule quan trọng nhất trong Access List Rules Http_access sẽ chỉ định yêu cầu HTTP nào của client sẽ được đáp ứng hoặc ngược lại
Nếu thiết lập sai cho access rule này, hệ thống mạng sẽ dễ bị phá hoại và Squid cache
có thể sẽ bị lạm dụng bởi những client không được phép truy cập đến nó
Ví dụ:
_ Cho phép truy cập từ các client đã biết, chặn những client còn lại
acl known_user src 172.16.1.0/24
http_access allow known_user
http_access deny all
b Cho các trả lời
Ngoài cách sử dụng http_access cho các yêu cầu, Squid còn cung cấp access rule http_reply _access dùng quản lý các trả lời mà Squid proxy server nhận được từ
các servers