1. Tổng quan về Domain Name System.
DNS viết tắt của Domain Name System. Mỗi khi người dùng truy cập một trang web, người dùng phải điền vào URL một địa chỉ trang web. Trước khi client giao tiếp với máy chủ web, thì nó cần đến DNS để lấy địa chỉ IP của web server, cũng tương tự như việc dùng danh bạ điện thoại để tìm kiếm một số điện thoại. Lợi thế của tên miền là giúp dễ nhớ hơn là phải nhớ một địa chỉ IP.
Phân giải DNS sử dụng port 53 UDP và TCP. Hệ thống DNS là hệ thống phân giải tên phân phối phân cấp để định vị các host và các máy chủ dịch vụ.
DNS là hệ thống phân phối vì việc thông tin lưu trữ không chỉ tìm thấy trên một máy chỉ đơn lẻ. Thay vào đó, thông tin được phân phối trên nhiều DNS server, tất cả chúng được liên kết thành một cấu trúc có phân cấp.
DNS là hệ thống phân cấp bao gồm một cây tên miền. Trên cùng của cây là vùng root (.) sau đó cây sẽ được phân chia thành zone trên mỗi server DNS. Mỗi zone có thể chứa một domain hoặc nhiều domain.
Mỗi nút hoặc lá trên cây được gọi là resource record (RR) – bản ghi tài nguyên – chúng giữ các thông tin của tên miền. dạng RR phổ biến nhât là địa chỉ host A và AAA trong đó liệt kê tên máy và địa chỉ IP.
Một tên miền bao gồm một hoặc nhiều nhãn. Mỗi nhãn có thể chứa 63 ký tự, một tên miền đầy có độ dài không qua 253 ký tự.
Top-level domain là nhãn ngoài cùng bên phải. Ví dụ như google.com chứa hai nhãn. Trong đo com là top-level domain. Hệ thống phân cấp được tính từ phải qua trái. Nhãn phía trái là subdomain của nhãn bên phải. Vậy google là subdomain của com.
Second-level domain được đăng ký bởi các cá nhân hoặc tổ chức. Các second-level DNS doamain có thể chứa nhiều subdomain, và mỗi subdomain có thể chưa nhiều host. Ví dụ maychu.google.com, trong đó maychu là tên máy tính, google là subdomain (second-level), com là top-level domain.
2. Cơ chế phân giải DNS.
Mỗi khi người dùng truy cập tài nguyên mạng bằng tên miền và cái tên truy cập đó sẽ được phân giải thành địa chỉ IP, tên và địa chỉ IP này được cache lại nên máy tính người dùng không cần thiết phải liên hệ với máy DNS server liên tục để phân giải tên. Nếu tên này chưa có trong cache (bộ nhớ đệm), client sẽ liên hệ với DNS server đã được cấu hình ở phần khai báo IP của hệ thống. Nếu server này ở trạng thái sẵn sàng và nó không thể xác định được địa chỉ, client sẽ không hỏi thêm một server nào khác. Tuy nhiên, bởi vì DNS là hệ thống phân phối phân cấp, DNS server cục bộ sẽ cần liên hệ với những DNS server khác để có thể phân giải IP mà client yêu cầu.
DNS client được hiểu như là người có nhu cầu cần phân giải DNS. Bởi vì một một client hay một server đều cần sự phân giải địa chỉ IP của DNS server và xác định được dịch vụ mạng, các client và các server đều có thể là DNS client.
Khi một DNS client truy vấn một DNS server, nó thực hiện một truy vấn đệ quy (recursive query), trong khi có các yêu từ các host, DNS server có thể trả các yêu cầu dữ liệu này hoặc trả lời tên miền không tồn tại. DNS server cũng có thể thực hiện các truy vấn đệ quy đến các máy chủ DNS khác nếu nó được cấu hình chuyển tiếp yêu cấu đến DNS server khác bởi vì nó không có câu trả lời.
Khi DNS server nhận được yêu cầu, trước tiên nó sẽ kiểm tra có cache của mình. Sau đó nó kiểm tra để xem nó có thẩm quyền hay không đối với yêu cầu domain. Nếu có biết câu trả lời, nó sẽ hồi đáp với câu trả lời.
Nếu DNS server không biết câu trả lời (lúc này nó sẽ đóng vai trò là client DNS server, thay client thực hiện truy vấn) và nó không được cấu hình chuyển tiếp yêu cầu đến một DNS server khác, client DNS server sẽ sử dụng cơ chế phân cấp của DNS để tìm câu trả lời chính xác. Thay vì thực hiện truy vấn đệ quy, client DNS server sẽ thực hiện truy vấn lập đi lập lại (iterative query), với truy vấn này sẽ trả lại một câu trả lời tốt nhất hiện nay nếu client DNS server không biết câu trả lời tốt nhất.
Khi user gõ www.google.com vào trình duyệt, nếu DNS server không có câu trả lời, DNS server sẽ đóng vai trò là client DNS Server liên hệ với một root DNS server để biết được địa chỉ của máy chủ tên miền com. Client DNS server sau đó liên hệ với máy chủ tên miền com để lấy máy chủ tên của contoso.com. Client DNS server tiếp tục liên hệ với máy chủ tên miền của google.com để lấy địa chỉ IP của www.google.com. Client DNS server trả lời cho client với địa chỉ IP đã phân giải. Ngoài ra, nó cũng thêm địa chỉ này vào cache của nó cho các truy vấn sau này không mất thời gian để tìm lại.
Trong một vài trường hợp, client DNS server không biết câu trả lời và nó không thể tìm thấy câu trả lời, nên client DNS server trả lời cho client rằng nó không thể tìm thấy hoặc là truy vấn domain không tồn tại.
II. CƠ CHẾ CHỨNG THỰC KERBEROS.
Kerberos không xây dựng các giao thức chứng thực phức tạp cho mỗi máy chủ mà hoạt động dựa trên một máy chủ chứng thực tập trung KDC (Key Distribution Centre). KDC cung cấp vé cho việc chứng thực người dùng và bảo mật truyền thông bởi khoá phiên trong vé gồm 3 giai đoạn và 6 bước trao đổi
– Client chứng thực AS (Authentication Server – biết khoá mật của tất cả người dùng được lưu giữ trên một cơ sở dữ liệu tập trung )
+ AS_REQ là yêu cầu người dùng xác thực ban đầu (khởi tạo dich vụ) yêu cầu này được chuyển trực tiếp tới các thành phần được gọi là KDC Authentication Server (AS).
+ AS_REP là trả lời của máy chủ xác thực để yêu cầu trước đó. Về cơ bản nó chứa TGT (mã hóa bằng cách sử dụng khóa TGS bí mật) và khóa phiên (được mã hóa bằng khóa bí mật của người dùng yêu cầu)
– Client xác thực TGS (Ticket Granting Server – cung cấp vé dịch vụ cho phép người dùng truy nhập vào các máy chủ trên mạng)
+ TGS_REQ là yêu cầu từ khách hàng đến Cấp vé máy chủ (TGS) cho một vé thông hành. Về cơ bản nó chứa TGT (mã hóa bằng cách sử dụng khóa TGS bí mật) và khóa phiên (được mã hóa bằng khóa bí mật của người dùng yêu cầu)
+ TGS_REP là trả lời của Cấp vé máy chủ để yêu cầu trước đó.Nằm bên trong là vé dịch vụ theo yêu cầu (được mã hóa với khóa bí mật của dịch vụ) và phiên dịch vụ một khóa tạo ra bởi TGS và được mã hóa bằng khóa phiên trước đó được tạo ra bởi AS.
– Khách hàng truy cập và được cấp phép sử dung dịch vụ
+ AP_REQ là yêu cầu khách hàng gửi tới một máy chủ ứng dụng để truy cập vào một dịch vụ. Các thành phần là các dịch vụ bán vé thu được từ TGS với thư trả lời trước và nhận thực một lần nữa được tạo ra bởi khách hàng, nhưng lần này được mã hóa bằng khóa phiên dịch (tạo ra bởi TGS);
+ AP_REP là trả lời rằng các máy chủ ứng dụng cung cấp cho khách hàng để chứng minh nó thực sự là máy chủ của khách hàng là mong muốn. Gói này không phải lúc nào cũng được yêu cầu. Các khách hàng yêu cầu máy chủ cho nó chỉ khi xác thực lẫn nhau là cần thiết.
Lưu ý tất cả các trao đổi giữa các máy đều dược đóng dấu thời gian Timestamp
Hình 1 hoạt động của giao thức kerberos
* Trong kịch bản này, người dùng C đăng nhập vào máy trạm client và yêu cầu truy nhập tới máy chủ V.
Kết nối với AS để lấy về vé xin truy nhập TGS, ticket-granting-ticket (TGT)
Truyền thông với AS thường là giai đoạn khởi đầu của phiên đăng nhập, nhằm lấy về dữ liệu chứng thực (TGT) cho TGS, để sau đó lấy về chứng thực cho các máy chủ khác mà không phải nhập lại khoá bí mật của client. Khoá bí mật của client được sử dụng cho cả việc mã hoá và giải mã.
Người sử dụng nhập tên và mật khẩu tại máy tính của mình (máy khách).
Phần mềm máy khách thực hiện hàm băm một chiều trên mật khẩu nhận. được. Kết quả sẽ được dùng làm khóa bí mật của người sử dụng.
Phần mềm máy khách gửi một gói tin (không mật mã hóa) tới máy chủ dịch vụ AS để yêu cầu dịch vụ. Nội dung của gói tin là: “người dùng U muốn sử dụng dịch vụ”. Cần chú ý là cả khóa bí mật lẫn mật khẩu đều không được gửi tới AS.
AS kiểm tra nhận dạng của người yêu cầu có nằm trong cơ sở dữ liệu của mình không. Nếu có thì AS gửi 2 gói tin sau tới người sử dụng:
– Gói tin A: “Khóa phiên TGS/Client” được mật mã hóa với khóa bí mật của người sử dụng.
– Gói tin B: “Vé chấp thuận” (bao gồm chỉ danh người sử dụng (ID), địa chỉ mạng của người sử dụng, thời hạn của vé và “Khóa phiên TGS/Client”) được mật mã hóa với khóa bí mật của TGS.
Hình 2: Ngừơi dùng truy cập vào AS
2. Giai đoạn thứ hai.
Trao đổi với máy chủ cấp vé dịch vụ TGS, lấy về service ticket truy nhập máy chủ V:
Khi nhận được 2 gói tin A và B, phần mềm máy khách giải mã gói tin A để có khóa phiên với TGS. (Người sử dụng không thể giải mã được gói tin B vì nó được mã hóa với khóa bí mật của TGS). Tại thời điểm này, người dùng có thể nhận thực mình với TGS.
Khi yêu cầu dịch vụ, người sử dụng gửi 2 gói tin sau tới TGS:
– Gói tin C: Bao gồm “Vé chấp thuận” từ gói tin B và chỉ danh (ID) của yêu cầu dịch vụ.
– Gói tin D: Phần nhận thực (bao gồm chỉ danh người sử dụng và thời điểm yêu cầu), mật mã hóa với “Khóa phiên TGS/Client “.
Khi nhận được 2 gói tin C và D, TGS giải mã C, D rồi gửi 2 gói tin sau tới người sử dụng:
– Gói tin E: “Vé” (bao gồm chỉ danh người sử dụng, địa chỉ mạng người sử dụng, thời hạn sử dụng và “Khóa phiên máy chủ/máy khách”) mật mã hóa với khóa bí mật của máy chủ cung cấp dịch vụ.
– Gói tin F: “Khóa phiên máy Server/Client” mật mã hóa với “Khóa phiên TGS/Client “.
Hình 3 : Trao đổi giữa người dùng và TGS
3. Giai đoạn thứ 3.
Khi nhận được 2 gói tin E và F, người sử dụng đã có đủ thông tin để nhận thực với máy chủ cung cấp dịch vụ S. Client gửi tới S hai gói tin:
– Gói tin E thu được từ bước trước (trong đó có “Khóa phiên máy Server/máy Client” mật mã hóa với khóa bí mật của S).
– Gói tin G: phần nhận thực mới, bao gồm chỉ danh người sử dụng, thời điểm yêu cầu và được mật mã hóa với “Khóa phiên máy Server/Client”.
– Sever giải mã “Vé” bằng khóa bí mật của mình và gửi gói tin sau tới người sử dụng để xác nhận định danh của mình và khẳng định sự đồng ý cung cấp dịch vụ:
– Gói tin H: Thời điểm trong gói tin yêu cầu dịch vụ cộng thêm 1, mật mã hóa với “Khóa phiên Server/Client “.
– Máy khách giải mã gói tin xác nhận và kiểm tra thời gian có được cập nhật chính xác. Nếu đúng thì người sử dụng có thể tin tưởng vào máy chủ S và bắt đầu gửi yêu cầu sử dụng dịch vụ.
– Máy chủ cung cấp dịch vụ cho người sử dụng
Hình 4: Người dùng chứng thực với server dịch vụ
III. DOMAIN CONTROLLER TRONG LINUX.
Với một máy tính chạy Windows có thể Join Domain vào máy tính chạy hệ điều hành Linux. Cách làm như sau:
1. Nâng cấp Domain Controller trên Centos 6.
Mô hình gồm 2 hệ điều hành và thông số như bảng dưới:
HỆ ĐIỀU HÀNH | THÔNG SỐ |
Centos 6 (Domain Controller) | IP Add: 192.168.0.78 D5NS1=192.168.0.78 DNS2=8.8.8.8 Gateway: 192.168.0.1 Netmask: 255.255.255.0 |
Windows XP (Join Domain vào máy Centos) | IP Add: 192.168.0.79 DNS1=192.168.0.78 DNS2=8.8.8.8 Gateway: 192.168.0.1 Netmask: 255.255.255.0 |
Tắt tường lửa để dùng Putty SSH vào Centos thuận tiện cho việc cấu hình
service iptables stop
Đặt IP cho máy Centos theo thông số như dưới.
cat > /etc/sysconfig/network-scripts/ifcfg-eth2 << OEF
DEFROUTE=yes
DEVICE=eth2
BOOTPROTO=static
DEFROUTE=yes
BROADCAST=192.168.0.255
IPADDR=192.168.0.78
NETMASK=255.255.255.0
NETWORK=192.168.0.0
GATEWAY=192.168.0.1
DNS1=192.168.0.78
DNS2=8.8.8.8
ONBOOT=yes
PERFIX=24
TYPE=Ethernet
OEF
Khởi động lại card mạng để cập nhật lại địa chỉ IP.
service network restart
Kiểm tra lại địa chỉ IP của máy Centos 6
ifconfig eth2
Kiểm tra kết nối internet để tải các gói cần thiết.
ping 8.8.8.8
Dùng Putty kết nối vào Centos bằng SSH
Nhập địa chỉ IP của máy Centos. Bấm Connect.
Nhập mật khẩu Root của Centos vào, bấm OK.
Kết nối thành công tới Centos.
Lần lượt cài đặt các gói tin cần thiết như sau:
yum install glibc glibc-devel gcc python* libacl-devel krb5-workstation krb5-libs pam_krb5
Lệnh kiểm tra xem samba đã cài đặt thành công hay chưa.
rpm -qa | grep samba
yum remove samba-clients samba-common samba-windbind-clients samba-windbind
yum install libgnutls-dev gnutls-devel
yum install openldap-devel
yum install system-config-firewall
yum install git-core
git clone git://git.samba.org/samba.git samba-matster
Di chuyển vào samba-matster vừa tải về ở Desktop
cd samba-matster/
Chạy lần lượt các lệnh sau:
./configure --enable-debug --enable-selftest
make
make install
Chỉnh lại HostName như dưới sau đó khởi động lại hệ thống tại file /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=server.hadanghoang.com
GATEWAY=192.168.0.1
Sau khi khởi động xong gõ lệnh như dưới để kiểm tra lại HostName.
hostname
Tạo tên Domain Controller và mật khẩu cho DC.
/usr/local/samba/bin/samba-tool domain provision
Sau khi tạo thành công ta khởi động lại máy bằng lệnh init 6 hoặc reboot.
Tiếp tục thực hiện các lệnh sau.
/usr/local/samba/sbin/samba
echo /usr/local/samba/sbin/samba >> /etc/rc.d/rc.local
cat /etc/rc.d/rc.local
/usr/local/samba/sbin/samba -V
/usr/local/samba/bin/smbclient -V
/usr/local/samba/bin/smbclient -L localhost -U%
cat /usr/local/samba/etc/smb.conf
Thêm vào nameserver 192.168.0.78
cat >> vi /etc/resolv.conf << OEF
nameserver 192.168.0.78
OEF
host -t SRV _ldap._tcp.linuxclient.home
host -t SRV _kerberos._udp.linuxclear.home
host -t A Serenity.linuxclear.home
Enabled Firewall lên bằng lệnh /usr/bin/system-config-firewall-tui tích vào Enabled và bấm OK để thoát ra ngoài.
/usr/bin/system-config-firewall-tui
Chép krb5.conf vào thư mục etc
cp /usr/local/samba/share/setup/krb5.conf /etc/krb5.conf
Tại default_realm trong file /etc/krb5.conf thêm tên Domain vào.
[libdefaults]
default_realm = hadanghoang.com
dns_lookup_realm = false
dns_lookup_kdc = true
Tạo User Administrator để đăng nhập khi Join Domain.
kinit administrator@HADANGHOANG.COM
Kiểm tra danh sách các User đã được tạo bằng lệnh klist
klist
Cài đặt và đồng bộ hóa thời gian bằng NTP
yum install ntp
service ntpd start
chkconfig ntpd on
chkconfig ntpd --list
2. Join Domain từ Windows XP vào Centos 6.
Đặt IP Add cho Windows XP như thông số bảng trên.
Kiểm tra kết nối tới máy DC.
Tiến hành Join Domain.
Đăng nhập vào User Administrator và mật khẩu tương ứng đã tạo trên DC máy Centos.
Join Domain thành công. Tiến hành khởi động lại máy tính.
Sau khi khởi động xong ta Log On vào DC.
Kiểm tra lại đã Join Domain thành công
Ping kiểm tra kết nối tới DC.
Kiểm tra lại bằng lệnh ipconfig /all