You are on page 1of 46

Domain Name Server

Nền tảng

Trong những năm cuối thập kỷ 60, Ban dự án nghiên cứu của bộ quốc phòng Mỹ, ARPA (DARPA
về sau), bắt đầu tài trợ một mạng máy tính thí nghiệm trên diện rộng, những tổ chức nghiên cứu
được nối cho quan trọng trong nước Mỹ , gọi Mạng quản lý đề án nghiên cứu ARPANET. Mục
tiêu nguyên thủy của đề án ARPANET là cho phép những người đấu thầu chính phủ chia sẻ những
chi phí hoặc khan hiếm tài nguyên.

Ngay từ lúc bắt đầu, những người dùng của mạng ARPANET sử dụng mạng cho sự cộng tác. Sự
hợp tác này bắt đầu từ những tập tin dùng chung, phần mềm và trao đổi thư tín điện tử - tới sự phát
triển và nghiên cứu chung sử dụng những máy tính từ xa dùng chung.

TCP/IP Bộ nghi thức phát triển vào đầu những năm 1980, và nhanh chóng trở thành là nghi thức
nối mạng chủ nhà chuẩn trên mạng ARPANET. Sự bao gồm protocol trong hệ điều hành BSD
UNIX ở trường đại học California dùng làm phương tiện trong việc dân chủ hóa sự truyền thông
trong mạng. BSD UNIX là hoàn toàn miễn phí đối với các trường đại học. Điều này có nghĩa là sự
truyền thông trong mạng - và kết nối ARPANET - trở nên rẻ và tổ chức hơn được kết nối vào
ARPANET.

Nhiều máy tính được nối tới ARPANET, cũng được nối tới những mạng cục bộ , và không lâu nữa
những máy tính khác trên những mạng cục bộ đều truyền thông qua ARPANET. Mạng ARPANET
nguyên bản trở thành là xương sống của một liên minh các mạng cục bộ và những mạng dùng
TCP/IP, gọi là Internet.

Vào năm 1988, DARPA quyết định sự thí nghiệm đã kết thúc. Bộ quốc phòng bắt đầu giải tán
mạng ARPANET. Một mạng khác, được tài trợ bởi hội Khoa học Cơ Bản Quốc gia và gọi là
NSFNET, thay thế mạng ARPANET như là xương sống của Internet.

Gần đây hơn , mùa xuân 1995, Internet đã làm một sự chuyển tiếp từ việc tài trợ công khai
NSFNET như một xương sống. Ngày nay, đã có hàng triệu kết nối Internet của nhiều máy tính trên
thế giới kết nối vào Internet. Thật ra, một tỉ lệ quan trọng những máy tính không-PC trên thế giới
được nối tới Internet.

Từ Internet , và "internets" nói chung, là theo thứ tự. Trong cách viết, sự khác nhau giữa chúng có
vẻ như rất ít: cái thứ nhất luôn được viết hoa, cái kia thì không . Sự khác biệt giữa chúng có ý
nghĩa riêng. Internet, với chữ I hoa để cập đến mạng mà cuộc sống của nó khởi nguồn từ ARPAnet
và tiếp tục đến ngày nay, nó là sự liên minh của các mạng TCP/IP kết nối trực tiếp hay gián tiếp
vào xương sống thương mại của Mỹ.

Xét kỹ hơn, nó thường chỉ gồm nhiều mạng khác nhau - commercial TCP/IP backbones, regional
TCP/IP networks, mạng TCP/IP của chính phủ Mỹ networks, và mạng TCP/IP của các quốc gia
khác trên thế giới kết nối với nhau thông qua mạch số tốc độ cao.

Từ internet viết thường, nói cách khác , chỉ đơn giản là bất cứ mạng nào được xây dựng lên từ
nhiều mạng nhỏ hơn sử dụng cùng một giao thức kết nối mạng. Từ internet (chữ "i" nhỏ) là không
cần thiết kết nối vào Internet (chữ "I" lớn), hay cũng không nhất thiết phải dùng giao thức TCP/IP
như là một chuẩn kết nối chung.
Thuật ngữ "intranet" chỉ là một thành ngữ tiếp thị cho những mạng internet (i nhỏ) dựa trên
TCP/IP , dùng để nhấn mạnh công dụng của công nghệ được phát triển và giới thiệu trên Internet
trong nội bộ các mạng hợp tác của các công ty. . Từ "extranet," nói cách khác, là internet có kết nối
đến các công ty thành viên hay các công ty con của nó, các nhà cung cấp và khách hàng.

Lịch sử của Domain Name System

Suốt những năm 70, mạng ARPAnet còn rất nhỏ , một cộng đồng thân thiện của vài trăm máy tính.
Với một file duy nhất HOSTS.TXT, chứa đựng tất cả các thông tin bạn cần biết về những máy
khác: nó chứa ánh xạ tên → địa chỉ cho tất cả các máy được kết nối vào ARPAnet. Tương tự như
tập tin host trên Unix , /etc/hosts, được biên dịch từ HOSTS.TXT .

HOSTS.TXT được bảo trì bởi tổ chức SRI (Network Information Center) và được phân phối từ một
máy đơn, SRI-NIC[1]. Các nhà quản trị ARPAnet thường gửi thư điện tử đến NIC, tuần tự ftp đến
SRI-NIC và gắn vào tập tin HOSTS.TXT hiện hành. Các sự thay đổi của chúng được biên dịch vào
file HOSTS.TXT mới một hoặc 2 lần trong tuần. Cùng với sự phát triển của ARPAnet, mô hình này
trở nên không thích hợp. Kích thước của file HOSTS.TXT tăng lên theo sự phát triển của các máy
kết nối vào ARPAnet . Hơn thế nữa , lưu lượng được sinh ra bởi quá trình cập nhật tăng lên nhanh
hơn: mỗi máy thêm vào không chỉ là một kết nối khác được thêm vào host mà còn là những xu
hướng cập nhật từ các máy khác từ SRI-NIC.

[1] SRI là Stanford Research Institute trong Menlo Park, California. SRI kết hợp nhiều lãnh vực
nghiên cứu khác nhau bao gồm cả mạng máy tính.

Và khi ARPAnet chuyển sang dùng TCP/IP protocols, dân số của mạng bùng nổ. Bây giờ
một vấn đề nảy sinh với tập tin HOSTS.TXT:

Lưu lượng và tải

SRI-NIC, thuật ngữ của lưu lượng và tải của bộ xử lý xoay quanh việc phân
phối file đã trở nên không thể chấp nhận được, was becoming unbearable.

Đụng độ tên

Không thể có 2 hosts trong tập tin HOSTS.TXT được phép có cùng tên. Tuy
nhiên , trong khi NIC có thể gán địa chỉ theo cách đảm bảo tính duy nhất, nó
không có quyền thông qua các tên hosts đó. Không có cách nào ngăn cản
một ai đó thêm vào một host với tên đụng độ và phá vỡ toàn bộ cơ chế. Một
ai đó thêm vào một host với tên trùng với server mail chính của hệ thống
chẳng hạn, có thể sẽ làm sụp đổ toàn bộ hệ thống mail của ARPAnet.

Tính toàn vẹn

Bảo trì tính toàn vẹn của tập tin trên mạng đang mở rộng trở nên ngày càng
khó khăn. Cùng lúc đó một tập tin HOSTS.TXT mới có thể trở nên lớn hơn
cùng với sự tăng trưởng của ARPAnet.

Các thành viên điều hành của ARPAnet mở cuộc nghiên cứu cho một hậu bối của file
HOSTS.TXT. Mục tiêu của họ là tạo ra một hệ thống có thể giải quyết các vấn đề kế thừa từ
một hệ thống bảng các tên host thống nhất . Hệ thống mới phải cho phép quản trị cục bộ dữ
liệu , và cho phép dữ liệu đó trở nên có hiệu lực trên toàn cục.
Sự giảm tập trung của việc quản trị sẽ giảm thiểu vấn đề cổ chai cho 1 máy đơn và giải
phóng vấn đề lưu lượng. Sự quản lý cục bộ sẽ làm cho tác vụ giữ cho dữ liệu luông được
cập nhật trở nên dễ hơn nhiều. Nó phải dùng không gian tên kế thừa cho các tên máy. Điều
này sẽ đảm bảo tính duy nhất của các tên.

Paul Mockapetris, khi đó dùng USC's Information Sciences Institute, chịu trách nhiệm cho
việc thiết kế kiến trúc của hệ thống mới. Năm 1984, ông công bố RFCs 882 và 883, mô tả
Domain Name System. Các RFCs được hoàn chỉnh bởi RFCs 1034 và 1035, mô tả chi tiết
hiện tại cho Domain Name System.[2] RFCs 1034 và 1035 có nhiều tranh cãi hiện nay bởi
nhiều RFCs khác về vấn đề an toàn bảo mật DNS, vấn đề hiện thực , vấn đề quản trị , cơ
chế cho việc cập nhật động các name servers và cho việc an toàn dữ liệu tên miền.

[2] RFCs có nghĩa là Request for Comments , là một phần của quá trình thông tin cho việc giới
thiệu một kỹ thuật mới trên Internet. RFCs là được phân phối miễn phí và chứa khá nhiều mô tả kỹ
thuật cho công nghệ mà nó giới thiệu do đó nó thường phục cho đối tượng là các nhà hiện thực

Domain Name Space

Cơ sở dữ liệu phân tán của DNS được chỉ mục bởi domain name, về bản chất mỗi domain name
chỉ là một phần trong một hệ thống cây nghịch đảo (domain name space), như hình vẽ bên dưới.
Cấu trúc cây có thứ tự đó tương tự như hệ thống file của UNIX. Cây có một điểm gốc root và có
thể rẻ nhánh ở những điểm giao nhau (node), chiều sâu của cây tối đa là 127 cấp.

Domain Names

Mỗi node trong cây có một nhãn (tối đa 63 ký tự). Tên domain name đầy đủ của một node trong
cây là một chuỗi các nhãn đi từ node đến root.

Trong DNS, những node ngang hàng với nhau có cùng một node cha phải có tên khác nhau.

Domains:

Domain chỉ là một nhánh con của domain name space.


Domain name của một domain tương tự như domain name của một node ở vị trí cao
nhất của domain đó, xem hình vẽ:

Figure 1.2 purdue.edu domain

Tương tự trong hệ thống filesystem, ở mức cao nhất trong thư mục /usr, ta có mốt node /usr.

Figure 1.3 The /usr directory

Một domain name có thể nằm trong nhiều nhánh, và cũng có thể trong nhiều domain, ví dụ,
domain name pa.ca.us là một phần của ca.us domain và cũng là một phần của domain us, Figure
1.4
Figure 1.4: A node in multiple domains

Internet Domain Name Space

* Top-Level Domains:

Internet domain name space được tổ chức thành 7 domain cơ bản:

com : Commercial organizations, such as Hewlett-Packard (hp.com), Sun Microsystems


(sun.com), and IBM (ibm.com)

edu :Educational organizations, such as U.C. Berkeley (berkeley.edu) and Purdue


University (purdue.edu)

gov :Government organizations, such as NASA (nasa.gov) and the National Science
Foundation (nsf.gov)

mil :Military organizations, such as the U.S. Army (army.mil) and Navy (navy.mil)

net : Networking organizations, such as NSFNET (nsf.net)

org : Noncommercial organizations, such as the Electronic Frontier Foundation (eff.org)

int : International organizations, such as NATO (nato.int)

Ngày nay có thêm một số khác như: firm, shop, wem và nom. đồng thời người ta cũng mở rộng
thêm dựa trên top-level domains đó như top_level domain của Việt Nam là vn, có những
subdomain như edu.vn và com.vn.

Name Servers and Zones

Name server là chương trình lưu những thông tin về domain name space. Name server có đầy đủ
các thông tin về những phần của domain name space (được gọi là một zone), những thông tin đó
được load từ file hoặc từ name server khác. Sau đó name server đó sẽ nói rằng nó được uỷ quyền
cho zone đó. Name server cũng có thể authoritative cho nhiều zone.
Figure 1.5: The edu domain broken into zones

Types of Name Servers:

Người ta chia làm 2 loại: primary master và secondary master.

Primary master name server của một zone lấy dữ liệu của zone từ một file trên
máy.

Secondary master name server (slave) của một zone lấy dữ liệu của zone từ name
server khác đã được ủy quyền cho nó.

Khi secondary được khởi động, nó sẽ tìm master name server của nó và lấy dữ liệu về máy, quá
trình này được gọi là zone transfer. Slave thường lưu dữ liệu này vào một file, về sau nếu slave
được khởi động lại thì nó sẽ đọc dữ liệu từ file này và kiểm tra xem dữ liệu đó có còn sử dụng
được nữa hay không, nếu không nó sẽ thực hiện động tác zone transfer nửa để lấy dữ liệu mới hơn.
Điều này tránh cho slave thực hiện việc zone transfer trong khi dữ liệu vẫn không thay đổi.

Resolvers

Resolver là những client truy xuất name server. Những chương trình trên máy cần những thông tin
về domain name đều dùng resolver.

Resolver đảm trách việc:

Hỏi name server (Querying a name server).

Phân giải kết quả (Interpreting responses).


Trả kết quả về cho chương trình đã yêu cầu.(Returning the information to the
programs that requested it).

Resolution (Phân giải)

Name server không những chỉ cung cấp cho ta những dữ liệu về những zones mà nó được ủy
quyền, nó còn có thể đi tìm thông qua domain name space mà không được ủy quyền để lấy dữ liệu,
quá trình này gọi là name resolution hoặc resolution.

Root Name Servers:

Root name servers có vai trò rất quan trọng trong việc phân giải. Quá trình phân giải được bắt đầu
từ những root name servers, điều này làm cho root name server quyết định quá trình hoạt động của
DNS, vì vậy nếu tất cả các Internet root name server đều bị hư thì quá trình phân giải trong
Internet sẽ bị đình trệ, do đó để tránh tình trạng này người ta thiết lập đến 13 root name server
phân bố trên những vùng khác nhau. 2 ở MILNET (the U.S. military's portion of the Internet), 1 ở
SPAN (NASA’s internet), 2 ở châu Âu, và 1 ở Nhật Bản.

Figure 1.6: Resolution of girigiri.gbrmpa.gov.au on the Internet

Local name server hỏi root name server về địa chỉ của girigiri.gbrmpa.gob.au và được chỉ đến au
name servers. Sau đó local name server đến hỏi au name server với cùng câu hỏi trên và được chỉ
đến gov.au name server, gov.au name server chỉ local name server đến gbrmpa.gov.au name
server. cuối cùng local name server hỏi gbrmpa.gov.au name server về địa chỉ trên và nhận được
câu trả lời.

Mapping Addresses to Names

Những nodes trong domain in-addr.arpa được gán sau những số ở dạng dotted-octet cũa địa chỉ IP
và có thể có tối đa 256 subdomain.

Theo hình dưới đây nếu địa chỉ IP của winnie.corp.hp.com là 15.16.192.152 thì subdomain in-
addr.arpa tương ứng là 152.192.16.15.in-addr.arpa.

Caching
Name server có thể lưu lại những kết quả đã hỏi trước đó để dùng khi được hỏi lần sau (caching),
giúp tăng tốc độ trả lời cho những lần truy vấn sau, hơn nửa caching cũng có thể giúp ta tránh việc
hỏi root name server lần nữa.

Figure 1.7: addr.arpa domain

Figure 1.8: Resolving baobab.cs.berkeley.edu

Time to Live:

Những dữ liệu được cache lại trong Name server không thể tồn tại vinh viễn, vì dữ liệu đó có thể
được thay đổi bởi name server phụ trách cho dữ liệu đó. Việc này được thực hiện bởi người quản
trị của zone đó trong việc khai báo Time to Live (TTL) cho dữ liệu đó, TTL là thời gian mà các
name server khác có thể cache dữ liệu trong bao lâu. Sau thời gian đó name server đó phải hủy tất
cả các cache đó và đi lấy dữ liệu mới.

Setup BIND

Setting up DNS Data:


Ta cấu hình nhiều file cơ sở dữ liệu (database files) trong đó một file ánh xạ tất cả host name vào
địa chỉ, và file khác ánh xạ từ địa chỉ vào host name (phân giải ngược). và file /etc/named.conf.

The database file:

Tất cả các entries trong database file được gọi là NDS resource records. Không phân biệt in
hoa.Ta có các loại resource records trong database sau:

SOA record :Indicates authority for this zone data

NS record :Lists a name server for this zone

Other records :Data about hosts in this zone

A :Name-to-address mapping

PTR :Address-to-name mapping

CNAME :Canonical name (for aliases)

SOA Records:

Entry đầu tiên trong file là SOA (start of authority) resource record. SOA record xác định name
server này là nguồi thông tin tốt nhất của zone này.

vnuhcm.edu.vn. IN SOA vnuserv.vnuhcm.edu.vn. root.vnuhcm.edu.vn. (

1 ; Serial

10800 ; Refresh after 3 hours

3600 ; Retry after 1 hour

604800 ; Expire after 1 week

86400 ) ; Minimum TTL of 1 day

Tên miền vnuhcm.edu.vn. phải ở vị trí cột đầu tiên và kết thúc bằng dấu chấm.

IN là Internet.

vnuserv.vnuhcm.edu.vn là tên của primary master name server của dữ liệu này.

root.vnuhcm.edu.vn là địa chỉ mail của người phụ trách dữ liệu này. Lưu ý là địa
chỉ mail thay thế dấu @ bằng dấu chấm sau root

Dấu ( ) cho phép ta mở rộng ra viết thành nhiều dòng. Tất cả các tham số trong dấu
( ) được dùng cho các slave name servers

Serial : Khi một slave name server kết nối với master server để lấy dữ liệu, trước
tiên nó sẽ kiểm tra số serial, nếu số serial của master lớn hơn tức là dữ liệu đã hết
hạn sử dụng và nó sẽ load lại dữ liệu mới. vì vậy khi ta cập nhật dữ liệu trên name
server ta nên tăng số serial.

refres : Khoảng Thời gian (giây) mà slave biết phải kiểm tra lại dữ liệu có còn sử
dụng được không.

retry : Nếu slave không thể kết nối với master name server sau một khoảng thời
gian refresh thì nó sẽ cố gắng kết nối lại sau retry giây.

expire: Nếu slave không thể kết nối với master server sau khoảng thời gian expire
giây, thì slave sẽ không trả lời cho vùng dữ liệu đó khi được truy vấn, vì nó cho
rằng dữ liệu này đã quá củ.

TTL : Time To Live, giá trị này được dùng cho tất cả các resource record trong file
cơ sở dữ liệu. giá trị này cho phép những server khác cache lại dữ liệu trong 1
khoảng thời gian xác đĩnh TTL.

NS Records:

Những entry tiếp theo là NS (name server) resource record.

vnuhcm.edu.vn.IN NSvnuserv.vnuhcm.edu.vn.

Record này xác định name server của zone vnuhcm.edu.vn

Address and Alias Records

Tiếp theo ta tạo ánh xạ name-to-address (từ tên vào địa chỉ).

; Host addresses

localhost.vnuhcm.edu.vn. IN A 127.0.0.1

vnuserv.vnuhcm.edu.vn. IN A 172.16.1.2

server.vnuhcm.edu.vn. IN A 172.16.1.4

wwwINCNAME vnuserv.vnuhcm.edu.vn.

Khi một name server tìm kiếm một tên và tìm thấy CNAME record thì nó sẽ thay thế tên đó bằng
canonical name và tiếp tục tìm với tên mới. ví dụ. khi name server tìm www.vnuhcm.edu.vn, nó
phát hiện một CNAME record trỏ đến vnuserv.vnuhcm.edu.vn, sau đó vnuserv.vnuhcm.edu.vn sẽ
được tìm và kết quả trả về là cả 2.

MX Records

Khai báo cho mail, tất cả các mail sẽ được chuyển đi dự vào MX record này.

vnuhcm.edu.vnINMX0vnuserv.vnuhcm.edu.vn
vnuhcm.edu.vnINMX5server.vnuhcm.edu.vn

Các giá trị 0, 5 xác định độ ưu tiên của mail server. Giá trị càng nhỏ độ ưu tiên càng cao. 2 dòng
trên có nghĩ sau: mail của miền vnuhcm.edu.vn sẽ được nhận bởi máy vnuserv.vnuhcm.edu.vn và
server.vnuhcm.edu.vn trong đó máy vnuserv.vnuhcm.edu.vn sẽ có độ ưu tiên hơn. Có nghĩa là
mail sẽ được đưa về máy vnuserv.vnuhcm.edu.vn, chỉ đưa về máy server.vnuhcm.edu.vn khi
vnuserv.vnuhcm.edu.vn quá bận hay bị down.

PTR Records

Tiếp theo ta tạo ánh xạ address-to-name (từ địa chỉ vào tên) trong tập tin db.172.16.1

2.1.16.172.in-addr.arpa.INPTRvnuserv.vnuhcm.edu.vn.

4.1.16.172.in-addr.arpa.INPTRserver.vnuhcm.edu.vn.

Loopback Address

Name server cũng cần một cơ sở dữ liệu khác để lấy thông tin bên trong máy, như sau:

0.0.127.in-addr.arpa. IN SOA vnuserv.vnuhcm.edu.vn. root.vnuhcm.edu.vn. (

1 ; Serial

10800 ; Refresh after 3 hours

3600 ; Retry after 1 hour

604800 ; Expire after 1 week

86400 ) ; Minimum TTL of 1 day

0.0.127.in-addr.arpa.INNS vnuserv.vnuhcm.edu.vn.

1.0.0.127.in-addr.arpa.INPTRlocalhost.

The Root Cache Data:

Bên cạnh những thông tin cục bộ, name server cũng cần biết vị trí của các root domain name
server. Ta có file named.root như sau:

; formerly NS.INTERNIC.NET

. 3600000 IN NS A.ROOT-SERVERS.NET.

A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4

; formerly NS1.ISI.EDU
;

. 3600000 NS B.ROOT-SERVERS.NET.

B.ROOT-SERVERS.NET. 3600000 A 128.9.0.107

; formerly C.PSI.NET

. 3600000 NS C.ROOT-SERVERS.NET.

C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12

; formerly TERP.UMD.EDU

. 3600000 NS D.ROOT-SERVERS.NET.

D.ROOT-SERVERS.NET. 3600000 A 128.8.10.90

; formerly NS.NASA.GOV

. 3600000 NS E.ROOT-SERVERS.NET.

E.ROOT-SERVERS.NET. 3600000 A 192.203.230.10

; formerly NS.ISC.ORG

. 3600000 NS F.ROOT-SERVERS.NET.

F.ROOT-SERVERS.NET. 3600000 A 192.5.5.241

; formerly NS.NIC.DDN.MIL

. 3600000 NS G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET. 3600000 A 192.112.36.4

; formerly AOS.ARL.ARMY.MIL

. 3600000 NS H.ROOT-SERVERS.NET.

H.ROOT-SERVERS.NET. 3600000 A 128.63.2.53

; formerly NIC.NORDU.NET

. 3600000 NS I.ROOT-SERVERS.NET.

I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17

; temporarily housed at NSI (InterNIC)

. 3600000 NS J.ROOT-SERVERS.NET.

J.ROOT-SERVERS.NET. 3600000 A 198.41.0.10

; housed in LINX, operated by RIPE NCC

. 3600000 NS K.ROOT-SERVERS.NET.

K.ROOT-SERVERS.NET. 3600000 A 193.0.14.129

; temporarily housed at ISI (IANA)

. 3600000 NS L.ROOT-SERVERS.NET.

L.ROOT-SERVERS.NET. 3600000 A 198.32.64.12

;
; housed in Japan, operated by WIDE

. 3600000 NS M.ROOT-SERVERS.NET.

M.ROOT-SERVERS.NET. 3600000 A 202.12.27.33

; End of File

Setting Up a BIND Configuration File

Sau khi tạo xong file cơ sở dữ liệu, name server cần phải được hướng dẫn để đọc file dữ liệu đó
bằng cách cấu hình file /etc/named.conf như sau:

options {

directory "/var/named";

// Place additional options here.

forwarders {

172.16.1.2;

};

};

directory "/var/named" : Khai báo vị trí lưu các file cơ sở dữ liệu.

forwarders 172.16.1.2 : Local name server sẽ đi hỏi name server có IP


address là 172.16.1.2 khi Local name server không giải được.

zone "vnuhcm.edu.vn" in {

type master;

file "db.vnuhcm.edu.vn";

};

type : loại name server

otype masternếu là primary name server.

otype slavenếu là secondary name server.

file "db.vnuhcm.edu.vn" : tên file cơ sở dữ liệu.


zone "." in {

type hint;

file "db.cache";

};

Dòng cấu hình để name server dùng cache.

Như vậy cấu hình hoàn chỉ của file /etc/named.conf là:

options {

directory "/var/named";

// Place additional options here.

forwarders {

172.16.1.2;

};

};

zone "." in {

type hint;

file "db.cache";

};

zone "vnuhcm.edu.vn" in {

type master;

file "db.vnuhcm.edu.vn";

};

zone "0.0.127.in-addr.arpa" in {

type master;

file "db.127.0.0";

};

zone "1.16.172.in-addr.arpa" in {

type master;

file "db.172.16.1";
};

zone "hcmut.edu.vn" in {

type slave;

file "db.hcmut.edu.vn";

masters {

172.28.2.2;

};

};

zone "28.172.in-addr.arpa" in {

type slave;

file "db.172.16.1";

masters {

172.28.2.2;

};

};

Một số quy ước:

Field thứ 2 trong khai báo zone của file /etc/named (zone "vnuhcm.edu.vn" và zone "1.16.172.in-
addr.arpa")có thể giúp ta một số khai báo nhanh chóng trong file cơ sở dữ liệu sau:

vnuserv.vnuhcm.edu.vn. INA172.16.1.2

có thể viết:

vnuservINA172.16.1.2

2.1.16.172.in-addr.arpa.IN PTR vnuserv.vnuhcm.edu.vn.

có thể viết

2INPTRvnuserv.vnuhcm.edu.vn.

@ IN SOA terminator.movie.edu. al.robocop.movie.edu. (

1 ; Serial

10800 ; Refresh after 3 hours

3600 ; Retry after 1 hour


604800 ; Expire after 1 week

86400 ) ; Minimum TTL of 1 day

tương đương với:

vnuhcm.edu.vn. IN SOA terminator.movie.edu. al.robocop.movie.edu. (

1 ; Serial

10800 ; Refresh after 3 hours

3600 ; Retry after 1 hour

604800 ; Expire after 1 week

86400 ) ; Minimum TTL of 1 day

Nếu field đầu của một entry trong file cơ sở dữ liệu là các khoảng trắng hay spacebar thì nó sẽ lấy
resource record ngay dòng trên của nó. Ví dụ:

server1INA172.16.1.4

INA172.16.1.5

Tương đương với:

server1INA172.16.1.4

server1INA172.16.1.5

Khởi động primary name server:

Ta dùng script khởi động:

Trong linux 6.2: /etc/rc.d/init.d/named start

Trong linux 7.1: /etc/init.d/named start

Chương trình nslookup:

Trong linux để khai báo dùng name server, ta cấu hình trong file /etc/resolv.conf.

Ta thêm các dòng sau vào file /etc/resolv.conf:

Nameserver 172.16.1.2

Để dùng chương trình nslookup ta gỏ lệnh nslookup tại dấu nhắc lệnh:

bash-2.03# nslookup
Default Server: vnuserv.vnuhcm.edu.vn

Address: 172.16.1.2

> www.vnuhcm.edu.vn

Server: vnuserv.vnuhcm.edu.vn

Address: 172.16.1.2

Name: server.vnuhcm.edu.vn

Address: 172.16.1.4

Aliases: www.vnuhcm.edu.vn

Để kiểm tra domain mail ta dùng lệnh: set type=mx

Ví dụ:

> set type=mx

> vnuhcm.edu.vn

Server: vnuserv.vnuhcm.edu.vn

Address: 172.16.1.2

vnuhcm.edu.vn preference = 0, mail exchanger =


vnuserv.vnuhcm.edu.vn

vnuhcm.edu.vn nameserver = vnuserv.vnuhcm.edu.vn

vnuserv.vnuhcm.edu.vn internet address = 172.16.1.2

Apache Web Server

Apache là một HTTP-server được sử dụng rộng rãi nhất trên thế giới hiện nay. Nó còn là một web
server phổ biến nhất cho các hệ thống Linux. Một web server như Apache có các chức năng đơn
giản, đồng thời hiển thị các yêu cầu về HTML từ các client yêu cầu. Đây là một dịch vụ vô cùng
mạnh mẽ cho các browser client có thể yêu cầu các kết nối HTTP. Có thể hiểu một Apache server
hoạt động như hình minh hoạ sau :
Cấu hình sử dụng Apache Server

Việc hiệu chỉnh tập tin cấu hình của dịch vụ Apache cung cấp cho nhà quản trị nhiều lựa chọn tùy
thuộc vào yêu cầu của hệ thống và người dùng trên hệ thống đó. Có hệ thống chỉ cần cài đặt
Apache cho mục đích là phục vụ cho nhu cầu hiển thị thông tin hệ thống một cách tĩnh, một số hệ
thống khác thì mong muốn cài đặt với mục đích là thương mại điện tử.

+ tập tin cấu hình chính "/etc/httpd/conf/httpd.conf" : đây là một tập tin cấu hình hết sức quan
trọng cho Apache server. Nó cho phép nhà quản trị có thể cấu hình nhiều tùy chọn khác nhau,
đồng thời nó cho phép nhà quản trị có thể cấu hình các bảo mật trên hệ thống đối với các dịch vụ
này. Để hiểu rõ thêm tập tin này thì nên đọc thêm phần hướng dẫn kèm theo của Apache
Document.

Bảo vệ Apache

+thay đổi một số quyền hạn đối với các thư mục của Webserver : khi mà cài đặt Apache vào hệ
thống thì nó sẽ mặc định thiết lập một số quyền hạn trong việc truy cập các thư mục của Apache,
tuy nhiên cũng nên thay đổi các quyền hạn này cho phù hợp với hệ thống của nhà quản trị.

chmod 511 /usr/sbin/httpd

chmod 750 /etc/httpd/conf/

chmod 750 /var/log/httpd/

+ tự động chỉ mục : nếu như nhà quản trị bật chức năng tự động chỉ mục các thư mục trong các tập
tin cấu hình Apache. Tuy nhiên đôi lúc có thể nhà quản trị chỉ muốn mọi người nhìn thấy tập tin
mà họ link tới, để tắt chức năng này cần thiết phải xóa bỏ quyền đọc từ thư mục Document Root

cd /home/httpd/
chmod 311 ona

ls –la

+ tạo tập tin mật khẩu .dbmpasswd cho các chứng thực người dùng : bước này cần thiết cho một số
hệ thống website mà nhà quản trị chỉ cho phép các người dùng có chứng thực mới được phép truy
cập vào.

bước 1 : chương trình dbmmanage có thể được sử dụng để tạo và cập nhật người dùng và mật
khẩu cho những người sử dụng HTTP. Phương thức này sử dụng tập tin theo định dạng DBM giúp
cho hệ thống hoạt động nhanh hơn khi mà hệ thống có tới hàng ngàn người sử dụng.

thay đổi quyền sử dụng chương trình dbmmanage

chmod 750 /usr/bin/dbmmanage

tạo người dùng và mật khẩu cho họ

/usr/bin/dbmmanage /etc/httpd/.dbmpasswd adduser username

bước 2 : nếu như sử dụng chương trình dbmmanage với Apache webserver thì nên hiệu chỉnh
thêm tập tin /etc/httpd/conf/httpd.conf bằng cách thêm vào những dòng sau trong tập tin

<Directory "/home/httpd/ona/private">

Options None

AllowOverride AuthConfig

AuthName "restricted stuff"

AuthType Basic

AuthDBUserFile /etc/httpd/.dbmpasswd

require valid-user

</Directory>

khởi động lại dịch vụ Apache để thay đổi, kiểm tra xem thư mục riêng tư có được bảo vệ như
mong muốn không.

+ miễn nhiễm tập tin cấu hình "httpd.conf" : sử dụng dòng lệnh sau để thiết lập tính chất trên cho
các tập tin cấu hình của dịch vụ

chattr +i /etc/httpd/conf/httpd.conf

Apache /Mod Perl


Trong file cấu hình của Apache /etc/httpd/conf/httpd.conf

Kiểm tra xem có các khai báo sau đây:

<IfDefine HAVE_PERL>

LoadModule perl_module modules/libperl.so

</IfDefine>

<IfDefine HAVE_PERL>

AddModule mod_perl.c

</IfDefine>

Apache /Mod PHP


<IfDefine HAVE_PHP>

LoadModule php_module modules/mod_php.so

</IfDefine>

<IfDefine HAVE_PHP3>

LoadModule php3_module modules/libphp3.so

</IfDefine>

<IfDefine HAVE_PHP4>

LoadModule php4_module modules/libphp4.so

</IfDefine>

Cấu hình Web ảo :

<VirtualHost _default_:443>

DocumentRoot "/var/www/html"

<Directory "/var/www/cgi-bin">

SSLOptions +StdEnvVars

</Directory>
</VirtualHost>

</IfDefine>

# Virtual hosts

# Virtual host Default Virtual Host

<VirtualHost _default_:*>

&#ServerName _default_

DirectoryIndex index.php index.html index.htm index.shtml index.phtml

&#ServerSignature email

&#LogLevel warn

&#HostNameLookups off

</VirtualHost>

# Directories...

<Directory "/">

&#Options FollowSymLinks

&#AllowOverride None

</Directory>

<Directory "/var/www/html">

&#Options Indexes Includes FollowSymLinks

&#AllowOverride None

&#Allow from from all

Order Deny,Allow

</Directory>

<Directory "/var/www/icons">

&#Options Indexes MultiViews

&#AllowOverride None

&#Allow from from all

Order allow,deny
</Directory>

<Directory "/var/www/cgi-bin">

&#Options ExecCGI

&#AllowOverride None

&#Allow from from all

Order allow,deny

</Directory>

NameVirtualHost 172.16.10.1

<VirtualHost www.citd.edu.vn>

ServerAdmin webmaster@citd.edu.vn

DocumentRoot /var/www/citd

DirectoryIndex index.php index.html index.htm index.shtml index.phtml


index.php3

ServerName pascal.citd.edu.vn

ErrorLog logs/citd-error_log

CustomLog logs/citd-access_log common

ScriptAlias "/cgi-bin/" "/var/www/citd/cgi-bin/"

<Directory "/var/www/cgi-bin">

AllowOverride All

Options ExecCGI

Order allow,deny

Allow from all

</Directory>

Alias /images/ /var/www/citd/images/

<Directory "/var/www/citd/images">

AllowOverride All

Options indexes

Order allow,deny
Allow from all

</Directory>

<Directory "/home/*/public_html">

&#Options Indexes MultiViews

&#AllowOverride All

&#Allow from from all

Order allow,deny

</Directory>

</VirtualHost>

<VirtualHost tainguyen.citd.edu.vn>

ServerAdmin antth@citd.edu.vn

DocumentRoot /var/www/tainguyen

DirectoryIndex index.php index.html index.htm index.shtml

ServerName tainguyen.citd.edu.vn

ErrorLog /var/log/httpd/tainguyen-error_log

CustomLog /var/log/httpd/tainguyen-access_log common

ScriptAlias "/cgi-bin/" "/var/www/tainguyen/cgi-bin/"

<Directory "/var/www/tainguyen/cgi-bin">

AllowOverride All

Options ExecCGI

Order allow,deny

Allow from all

</Directory>

Alias /images/ "/var/www/tainguyen/images/"

<Directory "/var/www/tainguyen/images">

AllowOverride All

Options indexes
Order allow,deny

Allow from all

</Directory>

<VirtualHost ity.citd.edu.vn>

ServerAdmin mtdung@citd.edu.vn

DocumentRoot /var/www/ity

DirectoryIndex index.php index.html index.htm index.shtml

ServerName ity.citd.edu.vn

ErrorLog /var/log/httpd/ity-error_log

CustomLog /var/log/httpd/ity-access_log common

ScriptAlias "/cgi-bin/" "/var/www/ity/cgi-bin/"

<Directory "/var/www/ity/cgi-bin">

AllowOverride All

Options ExecCGI

Order allow,deny

Allow from all

</Directory>

Alias /images/ "/var/www/ity/images/"

<Directory "/var/www/ity/images">

AllowOverride All

Options indexes

Order allow,deny

Allow from all

</Directory>

</VirtualHost>

<VirtualHost www.ity.citd.edu.vn>

ServerAdmin mtdung@citd.edu.vn
DocumentRoot /var/www/ity

DirectoryIndex index.php index.html index.htm index.shtml

ServerName ity.citd.edu.vn

ErrorLog /var/log/httpd/ity-error_log

CustomLog /var/log/httpd/ity-access_log common

ScriptAlias "/cgi-bin/" "/var/www/ity/cgi-bin/"

<Directory "/var/www/ity/cgi-bin">

AllowOverride All

Options ExecCGI

Order allow,deny

Allow from all

</Directory>

Alias /images/ "/var/www/ity/images/"

<Directory "/var/www/ity/images">

AllowOverride All

Options indexes

Order allow,deny

Allow from all

</Directory>

</VirtualHost>

Apache Tomcat Server


File cấu hình của Tomcat Server

<?xml version="1.0" encoding="ISO-8859-1"?>

<Server>

<!-- You can add a "home" attribute to represent the "base" for

all relative paths. If none is set, the TOMCAT_HOME property

will be used, and if not set "." will be used.

webapps/, work/ and log/ will be relative to this ( unless

set explicitely to absolute paths ).

-->

<ContextManager workDir="work" >

<!-- ==================== Global modules ==================== -->

<LoaderInterceptor11 useApplicationLoader="true" />


<TrustedLoader />

<LogSetter name="tc_log" timestamps="true"

verbosityLevel="INFORMATION" />

<LogEvents enabled="false" />

<!-- Backward compat: read the Context declarations from server.xml-->

<ContextXmlReader config="conf/server.xml" />

<!-- Separated Context -->

<ContextXmlReader config="conf/apps.xml" />

<AutoDeploy source="modules" target="modules"

redeploy="true" />

<AutoWebApp dir="modules" host="DEFAULT" trusted="true"/>

<AutoDeploy source="webapps" target="webapps" />

<AutoWebApp dir="webapps" host="DEFAULT" />

<PolicyLoader securityManagerClass="java.lang.SecurityManager"

policyFile="conf/tomcat.policy" />

<SimpleMapper1 />

<SessionExpirer checkInterval="60" />

<!-- For development you can use randomClass="java.util.Random" -->

<SessionIdGenerator randomClass="java.security.SecureRandom"

randomFile="/dev/urandom" />

<!-- ========== context processing modules ========== -->

<!-- This will be the "default" profile

( all except the "global" modules can be set per context )

-->

<LogSetter name="servlet_log"

timestamps="true"
verbosityLevel = "INFORMATION"

path="logs/servlet-${yyyyMMdd}.log"

/>

<LogSetter name="JASPER_LOG"

timestamps="true"

path="logs/jasper-${yyyyMMdd}.log"

verbosityLevel = "INFORMATION" />

<WebXmlReader validate="true" />

<ErrorHandler showDebugInfo="true" />

<WorkDirSetup cleanWorkDir="false" />

<Jdk12Interceptor />

<!-- Non-standard invoker, for backward compat. ( /servlet/* ) -->

<InvokerInterceptor />

<!-- you can add javaCompiler="jikes" -->

<JspInterceptor keepGenerated="true"

largeFile="false"

useJspServlet="false"

/>

<StaticInterceptor listings="true" />

<ReloadInterceptor fullReload="true" />

<SimpleSessionStore maxActiveSessions="-1" />

<AccessInterceptor />

<CredentialsInterceptor />

<SimpleRealm filename="conf/users/global-users.xml" />

<!-- UnComment the following and comment out the

above to get a JDBC realm.

Other options for driverName:


driverName="oracle.jdbc.driver.OracleDriver"

connectionURL="jdbc:oracle:thin:@ntserver:1521:ORCL"

connectionName="scott"

connectionPassword="tiger"

driverName="org.gjt.mm.mysql.Driver"

connectionURL="jdbc:mysql://localhost/authority"

connectionName="test"

connectionPassword="test"

"connectionName" and "connectionPassword" are optional.

-->

<!--

<JDBCRealm

debug="99"

driverName="sun.jdbc.odbc.JdbcOdbcDriver"

connectionURL="jdbc:odbc:TOMCAT"

userTable="users"

userNameCol="user_name"

userCredCol="user_pass"

userRoleTable="user_roles"

roleNameCol="role_name" />

-->

<LoadOnStartupInterceptor />

<Servlet22Interceptor />

<!-- Tag pooling support.

To enable the reuse of tag handlers as described in

the JSP spec, uncomment the following. If your pages


use a lot of custom tags, you should see a nice performance

gain.

Note that placing the interceptor here will enable

Tag pooling for all of the web applicatitions loaded -

this may be a bad thing if all tags are not coded to

handle reuse. To enable pooling only for specific web

applications i.e. Contexts, place the interceptor inside of

the Context's definition.

To view information about tag usage uncomment the tag

LogSetter. Set verbosityLevel to DEBUG to see everytime

a tag is obtained and released.

-->

<!--

<LogSetter name="tag_pool_log" timestamps="true"

path="logs/tagpool-${yyyyMMdd}.log"

verbosityLevel="INFORMATION" />

<TagPoolManagerInterceptor />

-->

<!-- Request processing -->

<DecodeInterceptor />

<SessionId cookiesFirst="true" noCookies="false" />

<!-- Automatic config generation

Set noRoot="false" if you wish to have Tomcat try to take

control of the external web server's root context.

Additonal configuration of the external web server may be

required for this to be successful.

Note: Configuration files are not written as part of the


default startup behvior. Append "jkconf" to the startup

command to have Tomcat initialize, write the config files,

then exit. This may be done while Tomcat is running.

-->

<ApacheConfig noRoot="true" />

<IISConfig noRoot="true" />

<NSConfig noRoot="true" />

<!-- Uncoment for apache-style logs

Attributes: logFile, flush, format

<AccessLogInterceptor/>

-->

<!-- ==================== Connectors ==================== -->

<!-- new http adapter. Attributes:

secure - use SSL ( https )

keystore, keypass - certs for SSL

port

reportedname - Server name to send back to browser

by default report Tomcat Web Server ...

set an empty string to avoid sending server header

-->

<!-- By default is 8080 -->

<Http10Connector port="8000"

secure="false"

maxThreads="100"

maxSpareThreads="50"

minSpareThreads="10" />

<!--
Uncomment this for SSL support. You _need_ to set up a

server certificate if you want this to work, and you

need JSSE. See tomcat-ssl-howto.html for more detailed

instructions.

1. Make the JSSE jars available to Tomcat, either by making

them an installed extension or by adding them to the

Tomcat CLASSPATH.

2. Do: keytool -genkey -alias tomcat -keyalg RSA

RSA is essential to work with Netscape and IIS.

Use "changeit" as password. ( or add keypass attribute )

You don't need to sign the certificate.

-->

<!--

<Http10Connector port="8443" secure="true" />

-->

<!--

JNI connector. It assumes the library is located in

TOMCAT_HOME/bin/native/jni_connect.[dll, nlm, so]. or in LD_LIBRARY_PATH.

For different paths set "nativeLibrary" parameter.

The JniConnector will be self-enable only if JNI mode is detected.

-->

<JniConnector />

<!-- Apache AJP12 support. This is also used to shut down tomcat.

Parameter "address" defines network interface this Interceptor

"binds" to. Add it if you want to "bind" to just "127.0.0.1".

address="127.0.0.1"

Parameter "tomcatAuthentication", controls if Tomcat honors


( and uses ) auth done in HTTP Server or not, when true Tomcat does

not use in any way auth information provided by the HTTP Server.

true is the default.

tomcatAuthentication="false"

-->

<Ajp12Connector#9; port="8007" />

<!-- Apache AJP13 support (mod_jk)

Parameter "address" defines network interface this Interceptor

"binds" to. Add it if you want to "bind" to just "127.0.0.1".

address="127.0.0.1"

Parameter "tomcatAuthentication", controls if Tomcat honors

( and uses ) auth done in HTTP Server or not, when true Tomcat does

not use in any way auth information provided by the HTTP Server.

true is the default.

tomcatAuthentication="false"

-->

<Ajp13Connector port="8009" />

<!--

Context definitions can be placed here ( not recommended ) or

in separate files. The ContextXmlReader will read all context

definitions ( you can customize the "base" filename ).

The default is conf/apps-[name].xml.

See conf/apps-examples.xml and conf/apps-admin.xml

-->

</ContextManager>

</Server>
Sendmail Server

Khái niệm

Sendmail là một Mail Transport Agent (MTA), nó nhận mail tù Mail User Agents (MUAs), người
dùng mail và những MTAs khác. Sau đó chuyển mail đó đến các MTAs trên máy khác hoặc đến
MTAs của máy.

MTA là những chương trình mà người sử dụng dùng để đọc, soạn thảo, và gởi thư.

MTU là chương trình để chuyển thư giửa các máy.

Các file cấu hình thông dụng trong chương trình sendmail:

/etc/aliases:Khai báo các bí danh.

/etc/sendmail.cf:File cấu hình của sendmail.

Trong đó file sendmail.cf là file cấu hình quan trọng nhất của sendmail. Sendmail dựa vào file cấu
hình này mà quyết định xử lý những mail nhận được.

Cấu hình file /etc/aliases:

Trong file này ta có thể cấu hình aliases cho một người dùng, có nghĩa là một user có thể nhận
mail với một tên bí danh khác.

Trong trường hợp trên máy có một user netadmin và user này muốn có thể nhận mail thông qua
user name là quanly ta khai báo trong file /etc/aliases như sau:

Loggin vào với quyền root.

Thêm 1 dòng vào file như sau:

quanly: netadmin

sau đó chạy lệnh:

[root@vnuserv /etc]# newaliases

Cấu hình DNS:

Ta phải thêm 1 record MX vào file cơ sở dữ liệu. ví dụ:

vnuhcm.edu.vnINMX5vnuserv.vnuhcm.edu.vn

Cấu hình /etc/sendmai.cf:

File sendmail.cf sẽ được chương trình sendmail đọc và phân tích mõi lần chương trình sendmail
được khởi động. nó chứa những thông tin cần thiết cho sendmail như các tham số: sendmail nhận
chuyển mail cho miền nào, thời gian ngưng kết nối, và các tham số khác nhưng quan trọng nhất là
các luật (rules) và tấp hợp các luật (rule sets) để rewrite lại địa chỉ.
Cấu trúc của file sendmail.cf được phân bố làm nhiều dòng. Mõi dòng gọi là configuration
command. Mõi một configuretion command được theo sau bởi những tham số, ví dụ. lệnh V theo
sau bởi một số để xác định version của sendmail. Ngoài ra ta còn các lệnh thường gặp trong
sendmail mail sau:

V Define configuration file version (beginning with V8.6)

M Define a mail delivery agent

D Define a macro

R Define a rewriting rule

S Declare a rule-set start

C Define a class macro

F Define a class macro from a file or a pipe

O Define an option

H Define a header

P Define delivery priorities

T Declare trusted users (ignored in V8.1, back in V8.7)

K Declare a keyed database (beginning with V8.1)

E Define an environment variable (beginning with V8.7)

L Include extended load average support (contributed software, not


covered)

Ta có một số các lệnh sau:

Macros:

Dùng để định nghĩa các giá trị, sau đó được sử dụng lại nhiều vị trí trong file sendmail.cf một cách
dễ dàng. Để định nghĩa một macro ta dùng ký tự D. ví dụ.

DRvnuhcm.edu.vn a single letter

D{REMOTE}vnuhcm.edu.vn multiple characters (beginning with V8.7)

R và {REMOTE} là tên của macro được định nghĩa, còn vnuhcm.edu.vn là giá trị của macro.

Class Macros:
Class Macros là cách khai báo một tên có thể có nhiều giá trị cùng 1 lúc. Ký tự C được dùng để
định nghĩa một class macros. Ví dụ:

CW localhost vnuhcm.edu.vn a single letter

C{MY_NAMES} localhost vnuhcm.edu.vn multiple characters

W và {MY_NAMES} có cùng lúc 2 giá trị là localhost và vnuhcm.edu.vn.

Một số Macro đã được sendmail định nghĩa sẵn như sau:

Macro Description

n Identity of the error message sender

v Version of the currently running


sendmail

w The short hostname

j The canonical hostname

m The domain name

k The UUCP node name

b Date in RFC1123 format

File Class Macros:

Tương tự như Class Macros nhưng các gí trị được lưu vào một file. Ký tự F được dùng để định
nghỉa một file class macros. Ví dụ:

FW/etc/mail/sendmail.cw

F{MY_NAMES}/etc/mail/sendmail.cw multiple character

W và {MY_NAMES} có các giá trị được lưu trong file /etc/mail/sendmail.cw.

Options:

Các Options tạo cho chương trình sendmail một số các lựa chọn mở rộng có ích khác như thiết lập
thời gian timeout, kích thước tối đa của một lá mail … Ký tự O được dùng để định nghỉa các
Options, ví dụ:

# maximum message size – khai báo kích thước tối đa cho một lá mail là 3000000 bytes.

O MaxMessageSize=3000000

Rules:
Rules là phần quan trọng của sendmail.cf để hiệu chỉnh (rewrite) từ địa chỉ này thành địa chỉ khác.
Ký tự R được dùng để định nghĩa một rule. Ví dụ:

R$+ < @ $*hcmussh.edu.vn. > $#relay $@ mailhost-XHNV-22.local $: $1 < @


$2hcmussh.edu.vn >

Mỗi rule gồm 3 phần, các phần cách nhau bằng 1 hay nhiều phím tab:

Rlhs rhs comment

Trong đó:

lhs gọi là left-hand side.

rhs gọi là right-hand side.

Hoạt động của một rule là: nếu điều kiện ở lhs thoả thì rhs sẽ được thực hiện, ngược lại sẽ bỏ qua
rule đó và thực hiện tiếp rule kế. như sơ đồ sau:

if true do this

Rlhs rhs

otherwise, go to next rule

Rule Sets:

Một tập hợp các rule tạo thành một rule set. Ký tự S được dùng để định nghĩa một rule set, theo
sau là một số để phân biệt giửa các rule sets, và Rule Set kết thúc khi gặp 1 Rule Set khác. Mỗi
rule set có một chức năng khác nhau.

Rule Set 0 đến Rule Set 5 được sendmail đã định nghĩa trước và có chức năng đặc trưng khác
nhau.

Rule Set Purpose

0 Resolve a mail delivery agent

1 Process sender address

2 Process recipient address

3 Preprocess all addresses

4 Postprocess all addresses

5 Rewrite unaliased local users


Rule set 0:

Rule set 0 được gọi duy nhất một lần khi nhận được mail để tách địa chỉ mail thành 3 phần sau đó
chọn ra delivery agent, như hình sau:

Figure 1: Rule set 0 resolves a triple

Rule set 3:

Những chức năng của rule set 1 đến rule set 4 là thay đổi lại địa chỉ người nhận và người gởi ở
phần header và envelope thành dạng chuẩn mà sendmail có thể sử dụng. vì địa chỉ có thể được viết
ở nhiều dạng khác nhau nhu:

From: address (Full Name and other comments)

From: Full Name <address>

Sau khi được xử lý bởi rule set 3 địa chỉ sẽ được viết chuẩn lại, bỏ hết các Full Name, ghi chú và
các dấu ngoặc, như:

Full Name <address>

needs to be transformed into

address

Ta có hình vẽ tóm tắc quy trình các rule set như sau:
Figure 2: The flow of addresses through rule sets

Cài đặt và cấu hình sendmail


Cài đặt:

Để cài đặt sendmail từ packet rpm ta dùng lệnh:

rpm –ivh sendmail-8.11.3-20.rpm

Cấu hình sendmail:

Để cấu hình sendmail ta cấu hình trong file /etc/sendmail.cf. Trong file này ta chỉ cấu hình một số
các tham số thường dùng như sau:

Các tham số cần điều chỉnh Giải thích.

Cwlocalhost vnuhcm.edu.vn Cấu hình cho sendmail nhận mail cho


miền vnuhcm.edu.vn

# "Smart" relay host (may be null) Các mail sẽ được chuyển lên máy
vnuserv.vnuhcm.edu.vn để gởi đi (relay
DSvnuserv.vnuhcm.edu.vn host)

# maximum number of recipients per Giới hạn số người nhận trong 1 lá mail.
SMTP envelope

O MaxRecipientsPerMessage=50

# maximum message size Giới hạn kích thước tối đa của một lá mail,
tính theo đơn vị bytes.
O MaxMessageSize=3000000

Ngoài ra phải cấu hình cho sendmail nhan relay mail cho miền đã khai báo (vnuhcm.edu.vn) trong
file /etc/sendmail.cf ta thêm tên miền đó (vnuhcm.edu.vn) vào trong file /etc/access như sau:
vnuhcm.edu.vnRELAY

Dòng khai báo này cho phép các client gởi được mail thông qua mail server sendmail này, mặt
khác mail server này có thể nhận mail cho miền vnuhcm.edu.vn. gọi là cơ chế chống relay: ngoài
miền này sendmail không nhận chuyển mail cho bất cứ miền nào.

Sau khi thêm dòng này vào ta phải chuyển file dạng text này sang dạng chuẩn của sendmail có thể
đọc được bằng lệnh sau:

cd /etc/access

makemap hash access < access

Khi đã thực hiện xong các bước trên ta có thể khởi động sendmail bằng lệnh:

/etc/rc.d/init.d/sendmail stop

/etc/rc.d/init.d/sendmail start

Cấu hình hệ thống mail của ĐHQG

Hệ thống mail của ĐHQG như sau:

ĐHQG có 2 mail server:

vnuserv.vnuhcm.edu.vn có IP là 172.16.1.2

server.vnuhcm.edu.vn có IP là 172.16.1.4

2 mail server này có nhiệm vụ là nhận relay mail cho tất cả các trường thành viên trong đó máy
vnuserv.vnuhcm.edu.vn là mail server chính, còn máy server.vnuhcm.edu.vn chỉ nhận mail khi
vnuserv.vnuhcm.edu.vn quá tải hoặc bị down.

Các mail server của các trường thành viên khi chuyển mail đi phải relay thông qua máy
vnuserv.vnuhcm.edu.vn, vì tất cả các mail server của các trường thành viên không thể gởi mail
trực tiếp ra internet.

Khi mail từ internet gởi đến các trường thành viên, máy vnuserv.vnuhcm.edu.vn sẽ nhận mail và
chuyển đến các trường thông qua rule set 98 như sau:

R$+ < @ $*hcmussh.edu.vn. > $#relay $@ mailhost-XHNV-22.local $: $1 < @


$2hcmussh.edu.vn >

R$+ < @ $*hcmier.edu.vn. > $#relay $@ mailhost-VNMT-23.local $: $1 < @


$2hcmier.edu.vn >

2 dòng trên có nghĩa là: mọi mail gởi đến miền hcmussh.edu.vn và hcmier.edu.vn sẽ được chuyển
đến mail server của 2 miền đó thông qua tham số mailhost-XHNV-22.local và mailhost-VNMT-
23.local được khai báo trong DNS với 1 zone "local" như sau:

mailhost-XHNV-22 IN A 172.22.2.2
mailhost-XHNV-22 IN MX 0 mailhost-XHNV-22

mailhost-VNMT-23 IN A 172.23.1.2

mailhost-VNMT-23 IN MX 0 mailhost-VNMT-23

Squid Proxy Server

Giới thiệu dịch vụ proxy

Proxy server theo đúng chức năng của nó là kiểm tra băng thông, tăng thêm tính bảo mật và đồng
thời tăng tốc độ truy cập web lên rất cao. Squid là một chương trình có các chức năng nói trên và
tỏ ra rất an toàn cho các hệ thống.

Cấu hình sử dụng SQUID

Các tập tin cấu hình squitd thông thường nằm trong thư mục /etc/squid. Việc cấu hình một dịch vụ
là luôn luôn quan trọng bởi vì nó sẽ làm cho hệ thống được trơn tru hơn và vận hành tối ưu nhất.

Cấu hình squid chạy trong chế độ httpd-acelerator : tập tin “squid.conf” là tập tin cho phép nhà
quản trị có thể thiết lập tất cả những tùy chọn đối với dịch vụ này. Trong chế độ httpd-acelerator
thì WebServer sẽ chạy trên máy server mà Squid được cài đặt, và nên nhớ là thiết lập cổng sử dụng
dịch vụ này là 81, nếu như Webserver chạy trên máy khác so với máy mà Squid cài đặt thì có thể
sử dụng cùng một giá trị. Để thiết lập giá trị cổng sử dụng này thì có thể hiệu chỉnh tập tin
"httpd.conf".

http_port 80

icp_port 0

acl QUERY urlpath_regex cgi-bin \?

no_cache deny QUERY

cache_mem 16 MB

cache_dir ufs /cache 200 16 256

emulate_httpd_log on

redirect_rewrites_host_header off

replacement_policy GDSF

acl all src 0.0.0.0/0.0.0.0

http_access allow all

cache_mgr admin@openna.com

cache_effective_user squid
cache_effective_group squid

httpd_accel_host 208.164.186.3

httpd_accel_port 80

log_icp_queries off

cachemgr_passwd my-secret-pass all

buffered_logs on

Trong đó các thông số được giải thích như sau :

http_port 80

Tùy chọn này chỉ định giá trị cổng mà Squid sẽ lắng nghe cho những yêu cầu HTTP. Nếu như thiết
lập giá trị là 80 thì nó sẽ kết nối với dịch vụ Apache Webserver.

icp_port 0

Thông số này chỉ định giá trị cổng mà Squid sẽ gởi và nhận các yêu cầu ICP từ những lưu trữ kế
đó. Nhất thiết là thiết lập giá trị này về 0 để hủy bỏ nó đảm bảo cho Squid chạy trong chế độ httpd-
acelerator.

acl QUERY urlpath_regex cgi-bin \? và no_cache deny QUERY

Tùy chọn này dùng để bắt buộc những đối tượng chắc chắn không bao giờ được phép lưu trữ, chẳn
hạn như các tập tin dưới thư mục "cgi-bin". Đây là một tiêu chí cho việc bảo mật hệ thống.

cache_mem 16 MB

Tùy chọn này chỉ định số lượng bộ nhớ ( RAM ) được sử dụng cho việc caching những đối tượng
như là : In-Transit objects, Hot Objects, Negative-Cached. Lưu ý là Squid thông thường là sử dụng
nhiều hơn lượng bộ nhớ mà tùy chọn chỉ định do đó nếu hệ thống chỉ có khoảng 48 M thì tốt nhất
là thiết lập giá trị ở đây là 48/3=16.

cache_dir ufs /cache 200 16 256

Tùy chọn này chỉ định trong trường hợp : loại hệ thống lưu trữ nào được sử dụng ( ufs ), tên của
thư mục cache ( /cache ) cho dịch vụ Squid, không gian đĩa tính theo megabyte được phép sử dụng
trong thư mục này ( 200 Mbytes ), số lượng những thư mục con cấp 1 được phép tạo ra dưới thư
mục cache ( 16 ), số lượng các thư mục con cấp 2 được phép tạo ra trong các thư mục con cấp 1
( 256 ). Trong chế độ acelerator, tùy chọn này trực tiếp liên hệ đến kích thước và số lượng các tập
tin mà nhà quản trị quyết định phục vụ cho dịch vụ Apache.

emulate_httpd_log on

Tùy chọn này nếu thiết lập là "ON" thì Squid sẽ tranh giành các tập tin nhật ký theo định dạng của
Apache. Điều này hết sức hữu ích nếu muốn sử dụng các chương trình "third party" như Webalizer
để phân tích các tập tin nhật ký của Web Server ( httpd ).
redirect_rewrites_host_header off

Tùy chọn này nếu thiết lập là "OFF" thì sẽ bảo với Squid là không được phép viết lại các header
trong các yêu cầu đáp lại. hết sức cần thiết là nên thiết lập tùy chọn này là "OFF" nếu như bạn
muốn chạy Squid trong chế độ acelerator.

replacement_policy GDSF

Tùy chọn này chỉ định những quy tắc cache mà Squid sẽ sử dụng để quyết định những đối tượng
nào trong cache phải được thay thế khi mà proxy cần tạo ra không gian đĩa. Những quy tắc Squid
LRU được dùng mặc định nếu như nhà quản trị không chỉ định tùy chọn "--enable-heap-
replacement" trong suốt quá trình biên dịch.

acl all src 0.0.0.0/0.0.0.0 và http_access allow all

Những tùy chọn này chỉ định và định nghĩa danh sách điều khiển được áp đặt trên Squid. những
tùy chọn này cho phép mọi người kết nối vào proxy server khi mà hệ thống bắt đầu phổ biến
Apache Webserver.

cache_mgr admin

Tùy chọn này chỉ định địa chỉ email của nhà quản trị có trách nhiệm đối với Squid proxy server.
Người này sẽ nhận tất cả những mail nếu Squid có vấn đề.

cache_effective_user squid và cache_effective_group squid

Tùy chọn này chỉ định nhóm người và người dùng mà cache sẽ chạy. Và nhớ là không được bao
giờ quên rằng không nên chạy Squid như root.

httpd_accel_host 208.164.186.3 và httpd_accel_port 80

Tùy chọn này chỉ định cho Squid địa chỉ và giá trị cổng nơi mà HTTP server thực sự sử dụng.

log_icp_queries off

Chỉ định này chỉ định rằng hệ thống sẽ tự động ghi những truy vấn ICP vào tập tin "access.log"
hay không. Tốt hơn là nên tắt chế độ này tức là chọn "OFF".

cachemgr_passwd my-secret-pass all

Tùy chọn này chỉ định một mật khẩu cần thiết cho việc truy xuất những thao tác của chương trình
"cachemgr_cgi". Những chương trình này được thiết kế cho phép chạy thông qua giao diện web và
những output tĩnh về việc cấu hình Squid cũng như những hiển thị của nó.

<my-secret-pass> là mật khẩu mà nhà quản trị lựa chọn, và từ khoá <all> chỉ định việc thiết lập
mật khẩu tương tự cho tất cả những thao tác mà nhà quản trị có thể trình diễn với chương trình
này.

buffered_logs on
Chỉ định này nếu được bật "ON" thì có thể cải thiện tốc độ cho việc ghi những tập tin nhật ký một
cách cấp kỳ. Đây là một đặc trưng cho việc tối ưu hệ thống.

Bảo mật SQUID

Rõ ràng là cần phải thiết lập những cơ chế bảo mật cho Squid để tránh việc truy xuất Squid không
có hiệu quả cũng như chưa có sự đồng ý của nhà quản trị.

+ điều khiển việc "mounting" thư mục cache cho Squid : nếu như nàh qảun trị phải tạo ra những
thư mục cache trên từng phân vùng riêng biệt của hệ thống Linux thì họ có thể sử dụng những tùy
chọn noexec, nodev, nosuid để tăng cường thêm cho việc bảo mật Squid. Những thiết lập này chỉ
dẫn cho hệ thống không cho phép có một sự thực thi nào đối với những tập tin nhị phân cũng như
các thao tác khác có thể gây hại cho hệ thống.

Giả sử rằng "/dev/sda8" là phân vùng trong hệ thống dùng để chứa thư mục “/cache” của Squid,
nhà quản trị cần phải hiệu chỉnh ậtp tin "/etc/fstab" như sau :

thay dòng

/dev/sda8 /cacheext2 defaults1 2

thành dòng

/dev/sda8/cacheext2noexec,nodev,nosuid1 2

và phải nhớ là khởi động lại hệ thống để kích hoạt thay đổi.

+ làm cho các tập tin cấu hình ( squid.conf ) trở nên miễn nhiễm : như đã biết thì bit miễn nhiễm
có thể được sử dụng để bảo vệ các tập tin không bị xóa, không bị thay đổi cũng như là không cho
phép tạo một liên kết đến các tập tin này. Một khi tập tin "squid.conf" đã được tạo ra thì có thể sử
dụng dòng lệnh sau để thiết lập sự miễn nhiễm

chattr +i /etc/squid/squid.conf