Xác thực Basic là kiểu xác thực đơn giản nhất nhưng cũng là không an toàn nhất. Thông tin được truyền đi trong một định dạng chuỗi mã hóa base64, có thể
được giải mã rất dễ dàng để có được thông tin ban đầu. Bất kỳ một ai sử dụng sniff là có thể nhìn thấy tên người dùng, mật khẩu được truyền trên mạng và sử dụng thông tin đó để khai thác rất dễ dàng.
Hệ thống xác thực basic này có thể được sử dụng trong môi trường mạng nhỏ hoặc đòi hỏi cấu hình đơn giản của Squid.
Xác thực HTTP basic hỗ trợ tùy chọn auth_param sau: auth_param basic program COMMAND auth_param basic utf8 on|off
auth_param basic children NUMBER [startup=N] [idle=N][concurrency=N]
auth_param basic realm STRING
auth_param basic credentialsttl TIME_TO_LIVE auth_param basic casesensitive on|off
Theo mặc định tất cả các trợ giúp xác thực đều nằm ở ${prefix}/libexec/ với ${prefix} là các giá trị tùy chọn -prefix.
Tham số utf8 xác định xem các thông tin sẽ được dịch sang mã UTF-8 trước khi chúng được chuyển sang xác thực. Điều này là do HTTP sử dụng tiêu chuẩn mã ISO Latin-1.
Tham số children có các tùy chọn khác nhau giúp cho việc chứng thực. Thông thường, Squid sẽ chạy nhiều hơn một trường hợp, tùy theo số lượng yêu cầu nhận từ phía Client. Điều này sẽ gây ra sự chậm trễ do việc xác thực.
Tùy chọn startup và idle của children quy định cụ thể số lượng các quá trình mà cần phải bắt đầu khi squid khởi chạy hay cấu hình lại.
Tùy chọn concurrency quy định cụ thể số lượng yêu cầu xác thực cùng một lúc. Nếu có thể xử lý nhiều yêu cầu đồng thời, ta có thể thiết lập giá trị này cho phù hợp.
Tham số realm quy định rõ thông báo được trình bày cho người sử dụng Client HTTP.
Tham số credentialsttl thiết lập thời gian mà sau đó Squid sẽ hỏi xác thực xem thông tin được cung cấp bởi Client còn giá trị hoặc thời gian mà thông tin vẫn còn hợp lệ.
Tham số casesensitive thiết lập xem tên người dùng có thuộc trường hợp nhạy cảm hay không. Đa số trong cở sở dữ liệu lưu trữ thông tin người dùng là trường hợp bình thường và cho phép dùng trong mọi trường hợp.
Ví dụ một cấu hình :
auth_param basic program /opt/squid/libexec/basic_pam_auth
auth_param basic utf8 on
auth_param basic children 15 start=1 idle=1 auth_param basic realm Squid proxy Server at proxy.example.com
auth_param basic credentialsttl 4 hours auth_param basic casesensitive off
acl authenticated proxy_auth REQUIRED http_access allow authenticated
http_access deny all 2.7.2. Xác thực Digest
Xác thực HTTP Digest là sự cải tiến trong cơ chế xác thực HTTP cơ bản, cho phép người dùng đồng nhất được thiết lập một an toàn mà không cần phải gửi một mật khẩu qua mạng. Xác thực HTTP Digest là một ứng dụng của mã hóa MD5 với việc sử dụng các giá trị nonce để ngăn chặn việc giải mã.
Các tham số auth_param sau đây có sẵn cho cấu hình HTTP digest: auth_param digest program COMMAND
auth_param digest utf8 on|off
auth_param digest children NUMBER [startup=N] [idle=N][concurrency=N]
auth_param digest realm STRING
auth_param digest nonce_garbage_interval TIME auth_param digest nonce_max_duration TIME
auth_param digest nonce_max_count NUMBER auth_param digest nonce_strictness on|off auth_param digest check_nonce_count on|off auth_param digest post_workaround on|off
Các tham số program, utf8, children, realm có ý nghĩ giống trong chứng thực HTTP Basic.
nonce_garbage_interval: Tham số này được sử dụng để xác định khoảng thời gian sau đó khi nonces đã được phát hành, kiểm tra tính hợp lệ.
nonce_max_duration: Tham số này xác định thời gian mà một nonce đưa ra sẽ vẫn có hiệu lực.
nonce_max_count: Tham số này xác định số lần tối đa một nonce có thể được sử dụng.
nonce_strictness: Client có thể bỏ qua một vài giá trị trong khi tạo nonce như 3, 4, 5, 6, 8, 9,....Tham số nonce_strictness xác định xem Squid có nên cho phép trường hợp Client hay tác nhân người dùng bỏ một giá trị đếm. Giá trị mặc định là off và tác nhân người dùng được phép bỏ qua các giá trị.
check_nonce_count: Các tham số thực thi check_nonce_count bắt buộc squid kiểm tra tính nonce. Trong trường hợp lỗi, Client sẽ được gửi trạng thái HTTP 401. Điều này là hữu ích cho việc chống lại các cuộc tấn công repley.
post_workaround: Một số lỗi Client HTTP gửi không chính xác trong yêu cầu HTTP POST khi việc sử dụng nonce được yêu cầu trong HTTP GET trước đó. Tham số post_workaround là một giải pháp cho tình trạng này.
Ví dụ cấu hình:
auth_param digest program
/opt/squid/libexec/digest_file_auth auth_param digest utf8 on
auth_param digest children 20 startup=0 idle=1 auth_param digest realm Squid proxy server at proxy.example.com
auth_param digest nonce_garbage_interval 5 minutes auth_param digest nonce_max_duration 30 minutes
auth_param digest nonce_max_count 50 auth_param digest nonce_strictness on auth_param digest check_nonce_count on auth_param digest post_workaround on acl authenticated proxy_auth REQUIRED http_access allow authenticated
http_access deny all 2.7.3. Xác thực NTLM
NTLM (NT LAN Manager) là một giao thức kết nối xác thực được phát triển bởi Microsoft. các thông số auth_param sau đây:
auth_param ntlm program COMMAND
auth_param ntlm children NUMBER [startup=N][idle=N] [concurrency=N]
auth_param ntlm keep_alive on|off
Các tham số program, children cũng tương tự như trong xác thực HTTP basic và xác thực Digest. Nếu trong tham số keep_alive được thiết lập là off thì Squid sẽ chấm dứt kết nối sau khi những request ban đầu mà các trình duyệt yêu cầu trợ giúp. Tham số mặc định là on.
Ví dụ:
auth_param ntlm program
/opt/squid/libexec/ntlm_smb_lm_auth
auth_param ntlm children 20 startup=0 idle=1 auth_param ntlm keep_alive on
acl authenticated proxy_auth REQUIRED http_access allow authenticated
http_access deny all
Ta có thể sử dụng xác thực NTLM với sự giúp đỡ của chương trình ntlm_auth là một phần của Samba. Để cấu hình Squid sử dụng ntml_auth xác thực NTLM, cần thêm dòng sau vào tập tin cấu hình:
auth_param ntlm program
/absolute/path/to/ntlm_auth --helper-protocol=squid- 2.5-ntlmssp
Cấu hình này sẽ cho phép người dùng đăng nhập vào nếu họ là thành viên của một nhóm cụ thể.
2.7.4. Xác thực Negotiate
Giao thức này được sử dụng trong môi trường Microsoft Active Directory với các phiên bản Microsoft Internet Explorer, Mozilla Firefox, và Google Chrome browsers. Trong giao thức này, các thông tin được trao đổi với máy chủ Squid Proxy sử dụng cơ chế Kerberos. Dự án này xác nhận là an toàn và ưa thích hơn so với xác thực NTLM.
Đàm phán chứng thực Kerberos được cung cấp bởi các trợ giúp của xác thực negotiate_kerberos_auth. Cấu hình Squid để cho phép đàm phán xác thực :
- Trước hết, cần tạo ra một tập tin keytab sử dụng tiện ích ktpass trên Windows .Ví dụ như:
ktpass -princ HTTP/proxy.example.com@REALM -mapuser proxy.example.com -crypto rc4-hmac-nt pass s3cr3t -ptype KRB5_NT_SRV_HST -out squid.keytab
- Cần phải đảm bảo có một tài khoản trên máy tính Windows proxy.example.com trước khi tạo tập tin keytab. Khi tập tin keytab được tạo ra, di chuyển tập tin đến một vị trí thích hợp trên máy chủ squid. Ví dụ như /opt/quid/etc/squid.keyta. Cần đảm bảo rằng chỉ những người sử dụng Squid mới có quyền truy cập tới tập tin keytab trên hệ thống.
- Bây giờ cấu hình Kerberos trên máy chủ Squid Proxy. Ta phải thay đổi phần libdefaults trong tập tin cấu hình Kerberos mà thường nằm ở /etc/krb5.conf những điều sau: [libdefaults] default_realm = REALM dns_lookup_realm = true dns_lookup_kdc = true ticket_lifetime = 24h
renew_lifetime = 7d forwardable = true
- Sau khi thực hiện những thay đổi trong tập tin cấu hình Kerberos, thay đổi tập tin khởi động Squid. Thêm dòng sau vào trong tập tin khởi động của Squid:
export KRB5_KTNAME=/etc/squid/squid.keytab
- Cuối cùng, thêm các dòng sau vào tập tin cấu hình Squid: auth_param negotiate program
/opt/squid/libexec/negotiate_kerberos_auth auth_param negotiate children 15 auth_param negotiate keep_alive on
acl authenticated proxy_auth REQUIRED http_access allow authenticated
http_access deny all
Cấu hình này sẽ cho phép squid sử dụng chứng thực Negotiate sử dụng các trợ giúp xác thực negotiate_kerberos_auth
2.8. Kết hợp Squid với Firewall
Như các chương trước, Proxy được cấu hình cho phép các Client truy cập Internet nhanh hơn nhờ tính năng lưu trữ “cache” của Proxy, đồng thời cũng quản lý việc truy cập Internet của Client như việc quản lý thời gian truy cập, quản lý việc truy cập theo user, hạn chế những chức năng không cần thiết, cấm máy, người dùng truy cập… đó là những điểm mạnh và tính năng của Proxy mạng lại khi triển khai.
Còn với Firewall cũng có tính năng cho phép các Client hệ thống truy cập Internet, cơ chế NAT out và NAT input, cho phép hệ thống hạn chế được những gói tin, loại tin không được phép… nhưng đồng thời nó không có chức năng tăng tốc truy cập, không có tính năng cho phép tạo các rule để nhằm đạt được những yêu cầu của hệ thống. Đây cũng là những điểm yếu của firewall bị hạn chế so với Proxy.
Vì vậy người ta thường kết hợp giữa Firewall và Proxy tức là kết hợp về mặt an ninh của hệ thống và tăng tốc truy cập Internet, quản lý người dùng hệ thống.
Chương III: CÀI ĐẶT VÀ CẤU HÌNH DỊCH VỤ SQUID PROXY CHO HỆ THỐNG MẠNG NỘI BỘ
3.1. Mô hình ứng dụng
Với mô hình triển khai, trên máy Proxy Server sẽ có sự kết hợp giữa Squid Proxy với Firewall Iptables để tăng tính an ninh, tăng tốc độ truy cập web, tiết kiệm băng thông… các dịch vụ trên được cài đặt trên hệ điều hành CentOS. Squid Proxy sẽ được cấu hình một số những yêu cầu cơ bản nhất hay gặp trong hệ thống mạng vừa và nhỏ.
Hình 3.1: Mô hình triển khai Squid Proxy Server cho mạng nội bộ
3.2. Cài đặt Squid
Kiểm tra Squid đã cài đặt trên hệ thống hay chưa.
Hình 3.2: Kiểm tra Squid đã cài đặt hay chưa
Đưa đĩa cài đặt vào trong máy rồi tiến hành mount.
Hình 3.3: Mount ổ đĩa
Hình 3.4: Cài đặt Squid
3.3. Cấu hình Squid
Sau khi cài đặt xong vào thư mục /etc/squid để mở file squid.conf ra để xem thông tin cũng như chỉnh sửa một số thông số để cho dịch vụ có thể chạy được. Các tham số cơ bản cần quan tâm để Squid có thể chạy được là:
http_port cache_mem cache_dir
acl our_networks
Dùng lệnh: vi /etc/squid/squid.conf
Hình 3.5: File cấu hình squid.conf
Dùng lệnh: set nu để xem thông tin từng dòng. Dòng đầu tiên cần quan tâm là dòng http_port 3128.
http_port: cấu hình HTTP mà Squid lắng nghe những yêu cầu được gửi đến. Với Port 3128 là Port mặc định. Thay đổi thông số Port này lại là 8080.
Hình 3.6: Chỉnh sửa thông số Port
Tiếp theo chuyển xuống dòng cache_mem 8 MB. Đây là dòng chứa dung lượng cache mềm trong RAM và sẽ mất khi bị mất điện.
Hình 3.7: Chỉnh sửa thông số cache_mem
Tiếp theo chuyển xuống dòng cache_dir ufs /var/spool/squid 100 16 256. Đây là đường dẫn lưu trữ cache_dir. Mặc định cache_dir có dung lượng là 100 MB và trong đó nó tạo ra 16 thư mục cấp 1 và 256 thư mục cấp 2, cache_dir khi mất điện thì vẫn lưu bình thường vì cache_dir được lưu trong ổ cứng.
Hình 3.8: Chỉnh sửa thông số cache_dir
Tiếp theo xuống dòng visible_hostname. Đây là dòng đặt tên máy khai báo tên máy trong squid.conf.
Để kiểm tra tên máy làm như sau.
Hình 3.9: Kiểm tra tên máy
Hình 3.10: Chỉnh sửa thông số visible_hostname
Mặc định thì Squid cấm tất cả các truy cập ra Internet vì thế phải khai báo lớp mạng cần được ra Internet để thuận tiện cho việc quản lý.
Khai báo lớp mạng để đi ra Internet.
Hình 3.11: Khai báo thông số ra Internet
Khởi động lại các thông số vừa cấu hình.
Hình 3.12: Restart lại dịch vụ Squid
Tạo thư mục swap cho Squid.
Hình 3.13: Khởi tạo thư mục Swat
3.3. Cấu hình Client truy cập Internet thông qua Proxy Server
Hình 3.14: Cấu hình Client ra ngoài Internet
Thực hiện truy cập vào website thông qua Proxy Server được như sau:
Hình 3.15: Kết quả kiểm tra sau khi cấu hình Client ra Internet
3.4. Access List Control điều khiển truy cập Internet người dùng
3.4.1. Cấm các máy client truy cập một số trang website không cho phép
Để cấm các Client không được truy cập một danh sách các trang Web không được phép truy cập, thực hiện như sau:
Tạo một file lưu danh sách các trang web bằng lệnh vi /etc/squid/ deny_access.
Hình 3.16: Tạo danh sách trang web
Truy cập vào /etc/squid/squid.conf tạo acl và rule cho yêu cầu.
Hình 3.17: Khai báo thông số chặn truy cấp tới một số trang web
Hình 3.18: Kết quả kiểm tra sau khi thực hiện chặn một số trang web
3.4.2. Cho phép truy cập internet ngoài giờ hành chính
Giả sử giờ làm việc hành chình là 8:00-17:00, tiến hành vào file /etc/squid/squid.conf , tạo thêm một luật ACL.
Hình 3.19: Khai báo thông số cho phép truy cập vào giờ quy định
Khởi động lại dịch vụ và đặt lại ngày giờ trên máy Proxy Server.
3.5. Dùng NCSA kiểm định Password cho quá trình truy cập Internet
Là một chương trình chứng thực User được dùng trong Squid tức là hạn chế User truy cập website bằng quyền đã cho trước.
Tạo một User hệ thống dùng để test.
Hình 3.20: Tạo người dùng huyduc
Tạo file authen_user và sử dụng lệnh htpasswd tạo Password chứng thực Squid cho User huyduc.
Hình 3.21: Tạo người dùng bằng câu lệnh htpasswd
Vào trong squid.conf, tìm đến dòng auth_param basic program để chỉnh sửa cấu hình.
Hình 3.22: Khai báo thông số xác thực auth_param basic program
Thực hiện cấu hình ACL chứng thực trong /etc/squid/squid.conf
Hình 3.23: Khai báo thông số chứng thực
Khởi động lại dịch vụ squid để cập nhật các cấu hình thay đổi.
Kiểm tra truy cập bằng cách từ máy Client truy cập ra Internet thì hệ thống Proxy sẽ yêu cầu User và Passwd để chứng thực. Login bằng User huyduc và pass.
3.6. Giới hạn nội dung Download
Giả sử giới hạn một số file khi người dùng tải về.Ta tạo file /etc/squid/block_file chứa các file hạn chế khi người dùng download về.
Hình 3.25: Tạo giới hạn các file
Cấu hình file /etc/squid/squid.conf với ACL.
Hình 3.26: Khai báo thông số giới hạn nội dung download
Khởi động lại Squid để cập nhật lại cấu hình đã thay đổi. Từ Client truy cập ra Internet có kết quả như sau:
Hình 3.27: Kết quả kiểm tra sau khi giới hạn nội dung download
Nhận thấy website không có các hình ảnh và một số tính năng, do đã cấu hình hạn chế download một số nội dung.
3.7. Một số giới hạn cấu hình trên Squid Proxy
3.7.1. Giới hạn truy cập theo IP
Vào file /etc/squid/squid.conf cấu hình các thông tin.
Hình 3.28: Khai báo thống số giới hạn theo IP
Khởi động lại dịch vụ Squid và sử dụng máy Client có địa chỉ 172.16.1.100. 3.7.2. Giới hạn truy cập theo giao thức
Giả sử cấu hình người dùng hệ thống không được truy cập ra Internet với giao thức FTP HTTP.
Hình 3.29: Khai báo thống số giới hạn theo giao thức
3.7.3. Giới hạn truy cập theo cổng
Hình 3.30: Khai báo thống số giới hạn theo Port
3.8. Dùng Sarg theo dõi log
Trước khi cài đặt Sarg, cần phải cài đặt gói gd-devel. Đây là phần mềm cần thiết khi chạy Sarg.
Hình 3.31: Cài đặt gói gd-devel
Tiếp đến cài đặt Sarg.
Hình 3.32: Cài đặt gói Sarg
Cuối cùng cài đặt webmin. Phần mềm này dùng để quản lý Sarg bằng giao diện đồ họa.
Hình 3.33: Cài đặt gói webmin
Sau khi cài đặt xong toàn bộ các gói cần thiết. Đăng nhập vào webmin bằng địa chỉ IP hoặc tên máy cài đặt webmin với cổng 10000. Username là root còn Password sẽ là pass của root.
Hình 3.34: Đăng nhập vào webmin
Giao diện chính sau khi đăng nhập thành công của webmin.
Hình 3.35: Giao diện chính của webmin
Chọn tab Un-used Modules > Squid Report Generator . Đây là nơi quản lý log squid bằng Sarg. Giao diện khi kích vào.
Hình 3.36: Giao diện quản lý log squid bằng Sarg khi chưa cấu hình
Trên màn hình sẽ xuật hiện một thông báo lỗi. Cần phải chỉnh lại thông số cấu hình thì Sarg mới hoạt động được. Kích vào module configuration và chỉnh.
Hình 3.37: Cấu hình log squid