Tải bản đầy đủ (.docx) (22 trang)

Tìm hiểu tổng quan về FTP, Web Server, SSH

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (490.64 KB, 22 trang )

HỌC VIỆN KỸ THUẬT QUÂN SỰ
KHOA CÔNG NGHỆ THÔNG TIN
BỘ MÔN CÔNG NGHỆ MẠNG

BÁO CÁO MÔN QUẢN TRỊ MẠNG
TÌM HIỂU VỀ FTP, WEBSERVER, SSH

Nhóm 10
Ngô Hồng Quân – TH2
Trần Văn Anh Tuấn – TH2

HÀ NỘI - 2016


MỤC LỤC

CHƯƠNG 1: FTP – File Transfer Protocol
1.1 Khái niệm và hoạt động cơ bản của FTP
Những người phát triển giao thức FTP cần cân bằng nhu cầu giữa việc phát
triển một bộ giao thức vừa có nhiều chức năng và vừa đơn giản trong triển khai.
Hoạt động của giao thức này có thể chia ra thành nhiều thành phần nhỏ, hoạt
động cùng nhau để thực hiện các công việc như khởi tạo kết nối, truyền thông
tin điều khiển và truyền lệnh.
Dịch vụ FTP là dịch vụ cung cấp cơ chế truyền, nhận file qua giao thức
TCP/IP.
Dịch vụ FTP hoạt động trên hai port:
• Port 20: data port. Dữ liệu sẽ được truyền trên port này.
• Port 21: control port. Port này dùng để trao đổi lệnh, reply giữa client và

server.
1.2 Mô hình hoạt động, các thành phần trong giao thức, các thuật


ngữ cơ bản của FTP
Giao thức FTP được mô tả một cách đơn giản thông qua mô hình hoạt động
của FTP. Nó cũng mô tả các thành phần của FTP được dùng để quản lý các
kênh này ở cả hai phía – truyền và nhận. Do đó, mô hình này tạo cho ta một
khởi điểm lý tưởng để xem xét hoạt động của FTP ở mức khái quát.
1.2.1 Tiến trình Server-FTP và User-FTP
FTP là một giao thức dạng client/server truyền thống, tuy nhiên thuật ngữ
client thông thường được thay thế bằng thuật ngữ user – người dùng – do
thực tế là người sử dụng mới là đối tượng trực tiếp thao tác các lệnh FTP
trên máy clients. Bộ phần mềm FTP được cài đặt trên một thiết bị được gọi
là một tiến trình. Phần mềm FTP được cài đặt trên máy Server được gọi là
tiến trình Server-FTP, và phần trên máy client được gọi là tiến trình UserFTP.
1.2.2 Kênh điều khiển và kênh dữ liệu trong FTP
Một khái niệm cốt yếu mà ta cần phải nắm về FTP là: mặc dù giao thức
này sử dụng kết nối TCP, nhưng nó không chỉ dùng một kênh TCP như phần
2


lớn các giao thức truyền thông khác. Mô hình FTP chia quá trình truyền
thông giữa bộ phận Server với bộ phận client ra làm hai kênh logic:
- Kênh điều khiển: đây là kênh logic TCP được dùng để khởi tạo một
phiên kết nối FTP. Nó được duy trì xuyên suốt phiên kết nối FTP và được sử
dụng chỉ để truyền các thông tin điều khiển, như các lệnh và các hồi đáp
trong FTP. Nó không được dùng để truyền file
- Kênh dữ liệu: Mỗi khi dữ liệu được truyền từ server tới client, một kênh
kết nối TCP nhất định lại được khởi tạo giữa chúng. Dữ liệu được truyền đi
qua kênh kết nối này – do đó nó được gọi là kênh dữ liệu. Khi file được
truyền xong, kênh này được ngắt. Việc sử dụng các kênh riêng lẻ như vậy
tạo ra sự linh hoạt trong việc truyền truyền dữ liệu – mà ta sẽ thấy trong các
phần tiếp theo. Tuy nhiên, nó cũng tạo cho FTP độ phức tạp nhất định.

1.2.3 Các tiến trình và thuật ngữ trong FTP
Do các chức năng điều khiển và dữ liệu sử dụng các kênh khác nhau,
nên mô hình hoạt động của FTP cũng chia phần mềm trên mỗi thiết bị ra làm
hai thành phần logic tương ứng với mỗi kênh. Thành phần Protocol
Interpreter (PI) là thành phần quản lý kênh điều khiển, với chức năng phát
và nhận lệnh. Thành phần Data Transfer Process (DTP) có chức năng gửi và
nhận dữ liệu giữa phía client với server. Ngoài ra, cung cấp cho tiến trình
bên phía người dùng còn có thêm thành phần thứ ba là giao diện người dùng
FTP – thành phần này không có ở phía server.

3


Do đó, có hai tiến trình xảy ra ở phía server, và ba tiến trình ở phía
client. Các tiến trình này được gắn với mô hình FTP để mô tả chi tiết hoạt
động của giao thức FTP. Dưới đây là hình đối chiếu các tiến trình vào trong
mô hình FTP:

 Các tiến trình phía server:

Các tiến trình phía server bao gồm hai giao thức:
- Server Protocol Interpreter (Server-PI): chịu trách nhiệm quản lý kênh
điều khiển trên server. Nó lắng nghe yêu cầu kết nối hướng tới từ users trên
cổng dành riêng. Khi kết nối đã được thiết lập, nó sẽ nhận lệnh từ phía UserPI, trả lời lại, và quản lý tiến trình truyền dữ liệu trên server.
- Server DataTransfer Process (Server-DTP): làm nhiệm vụ gửi hoặc
nhận file từ bộ phận User-DTP. Server-DTP vừa làm nhiệm thiết lập kết nối
kênh dữ liệu và lắng nghe một kết nối kênh dữ liệu từ user. Nó tương tác với
server file trên hệ thống cục bộ để đọc và chép file.

 Các tiến trình phía client:


- User Protocol Interpreter (User-PI): chịu trách nhiệm quản lý kênh điều
khiển phía client. Nó khởi tạo phiên kết nối FTP bằng việc phát ra yêu cầu
tới phía Server-PI. Khi kết nối đã được thiết lập, nó xử lý các lệnh nhận
4


được trên giao diện người dùng, gửi chúng tới Server-PI, và nhận phản hồi
trở lại. Nó cũng quản lý tiến trình User-DTP.
- User Data Transfer Process (User-DTP): là bộ phận DTP nằm ở phía
người dùng, làm nhiệm vụ gửi hoặc nhận dữ liệu từ Server-DTP. User-DTP
có thể thiết lập hoặc lắng nghe yêu cầu kết nối kênh dữ liệu trên server. Nó
tương tác với thiết bị lưu trữ file phía client.
- User Interface: cung cấp giao diện xử lý cho người dùng. Nó cho phép
sử dụng các lệnh đơn giản hướng người dùng, và cho phép người điều khiển
phiên FTP theo dõi được các thông tin và kết quả xảy ra trong tiến trình.
1.3 Thiết lập kênh điều khiển và chứng thực người dùng trong FTP
Mô hình hoạt động của FTP mô tả rõ các kênh dữ liệu và điều khiển được
thiết lập giữa FTP client và FTP server. Trước khi kết nối được sử dụng để thực
sự truyền file, kênh điều khiển cần phải được thiết lập. Một tiến trình chỉ định
sau đó được dùng để tạo kết nối và tạo ra phiên FTP lâu bền giữa các thiết bị để
truyền files.
Như trong các giao thức client/server khác, FTP server tuân theo một luật
passive trong kênh điều khiển. Bộ phận Server Protocol Interpreter (Server-PI)
sẽ lắng nghe cổng TCP dành riêng cho kết nối FTP là cổng 21. Phía User-PI sẽ
tạo kết nối bằng việc mở một kết nối TCP từ thiết bị người dùng tới server trên
cổng đó. Nó sử dụng một cổng bất kỳ làm cổng nguồn trong phiên kết nối TCP.
Khi TCP đã được cài đặt xong, kênh điều khiển giữa các thiết bị sẽ được
thiết lập, cho phép các lệnh được truyền từ User-PI tới Server-PI, và Server-PI
sẽ đáp trả kết quả là các mã thông báo. Bước đầu tiên sau khi kênh đã đi vào

hoạt động là bước đăng nhập của người dùng (login sequence). Bước này có hai
mục đích:
- Access Control - Điều khiển truy cập: quá trình chứng thực cho phép hạn chế
truy cập tới server với những người dùng nhất định. Nó cũng cho phép server
điều khiển loại truy cập như thế nào đối với từng người dùng.
- Resource Selection - Chọn nguồn cung cấp: Bằng việc nhận dạng người dùng
tạo kết nối, FTP server có thể đưa ra quyết định sẽ cung cấp những nguồn nào
cho người dùng đã được nhận dạng đó.
1.3.1 Trình tự truy cập và chứng thực FTP
Quy luật chứng thực trong FTP khá đơn giản, chỉ là cung cấp
username/password.
 Trình tự của việc chứng thực như sau:
i.

người dùng gửi một username từ User-PI tới Server-PI bằng lệnh
USER. Sau đó password của người dùng được gửi đi bằng lệnh PASS.
5


ii.

Server kiểm tra tên người dùng và password trong database người
dùng của nó. Nếu người dùng hợp lệ, server sẽ gửi trả một thông báo
tới người dùng rằng phiên kết nối đã được mở. Nếu người dùng không
hợp lệ, server yêu cầu người dùng thực hiện lại việc chứng thực. Sau
một số lần chứng thực sai nhất định, server sẽ ngắt kết nối.

Giả sử quá trình chứng thực đã thành công, server sau đó sẽ thiết lập
kết nối để cho phép từng loại truy cập đối với người dùng được cấp quyền.
Một số người dùng chỉ có thể truy cập vào một số file nhất định, hoặc vào

một số loại file nhất định. Một số server có thể cấp quyền cho một số người
dùng đọc và viết lên server, trong khi chỉ cho phép đọc đối với những người
dùng khác. Người quản trị mạng có thể nhờ đó mà đáp ứng đúng các nhu
cầu truy cập FTP.
Một khi kết nối đã được thiết lập, server có thể thực hiện các lựa chọn
tài nguyên dựa vào nhận diện người dùng. Ví dụ: trên một hệ thống nhiều
người dùng, người quản trị có thể thiết lập FTP để khi có bất cứ người dùng
nào kết nối tới, anh ta sẽ tự động được đưa tới “home directory” của chính
anh ta. Lệnh tùy chọn ACCT (account) cũng cho phép người dùng chọn một
tài khoản cá nhân nào đó nếu như anh ta có nhiều hơn một tài khoản.
1.3.2 Mở rộng về bảo mật FTP
Giống như phần lớn các giao thức cũ, phương pháp đăng nhập đơn
giản của FTP là một sự kế thừa từ những giao thức ở thời kỳ đầu của
Internet. Ngày nay, nó không còn bảo đảm tính an toàn cần thiết trên môi
trường Internet toàn cầu vì username và password được gửi qua kênh kết nối
điều khiển dưới dạng clear text. Điều này làm cho các thông tin đăng nhập
có thể bị nghe lén. Chuẩn RFC 2228 về các phần mở rộng cho bảo mật FTP
đã định ra thêm nhiều tùy chọn chứng thực và mã hóa phức tạp cho những ai
muốn tăng thêm mức độ an toàn vào trong phần mềm FTP của họ.
1.4 Quản lý kênh dữ liệu FTP, kết nối kênh dữ liệu dạng chủ động
(mặc định) và bị động cùng với việc sử dụng cổng
Kênh điều khiển được tạo ra giữa Server-PI và User-PI sử dụng quá trình
thiết lập kết nối và chứng thực được duy trì trong suốt phiên kết nối FTP. Các
lệnh và các hồi đáp được trao đổi giữa bộ phận PI (Protocol Interpreter) qua
kênh điều khiển, nhưng dữ liệu thì không.
Mỗi khi cần phải truyền dữ liệu giữa server và client, một kênh dữ liệu cần
phải được tạo ra. Kênh dữ liệu kết nối bộ phận User-DTP với Server-DTP. Kết
nối này cần thiết cho cả hoạt động chuyển file trực tiếp (gửi hoặc nhận một file)
cũng như đối với việc truyền dữ liệu ngầm, như là yêu cầu một danh sách file
trong thư mục nào đó trên server.

6


Chuẩn FTP chỉ định hai phương thức khác nhau để tạo ra kênh dữ liệu. Khác
biệt chính của hai phương thức đó là ở mặt thiết bị: phía client hay phía server
là phía đã đưa ra yêu cầu khởi tạo kết nối. Điều này nghe qua có vẻ khá đơn
giản, nhưng kỳ thực nó lại khá quan trọng.
1.4.1 Kết nối kênh dữ liệu dạng chủ động
Phương thức đầu tiên đôi khi còn được gọi là kết nối kênh dữ liệu
dạng thông thường (vì nó là phương pháp mặc định) và đôi khi được gọi là
kết nối dạng chủ động (để đối chiếu với dạng kết nối bị động mà ta sẽ xét ở
phần sau). Trong dạng kết nối này, phía Server-DTP khởi tạo kệnh dữ liệu
bằng việc mở một cổng TCP cho phía User-DTP. Phía server sử dụng cổng
được dành riêng, là cổng 20 cho kênh dữ liệu. Trên máy client, một giá trị
cổng được chọn theo mặc định chính là cổng được sử dụng đối với kênh
điều khiển, tuy nhiên phía client sẽ luôn chọn hai cổng riêng biệt cho hai
kênh này.
Giả sử phía User-PI thiết lập một kết nối điều khiển từ cổng bất kỳ
của nó là 1678 tới cổng điều khiển trên server là cổng 21. Khi đó, để tạo một
kênh dữ liệu cho việc truyền dữ liệu, phía Server-PI sẽ báo cho phía ServerDTP khởi tạo một kênh kết nối TCP từ cổng 20 tới cổng 1678 của phía
client. Sau khi phía client chấp nhận kênh được khởi tạo, dữ liệu sẽ được
truyền đi.

7


Thực tế, việc sử dụng cùng một cổng cho cả kênh dữ liệu và kênh
điều khiển không phải là một ý hay, nó làm cho hoạt động của FTP trở nên

phức tạp. Do đó, phía client nên chỉ định sử dụng một cổng khác bằng việc

sử dụng lệnh PORT trước khi truyền dữ liệu. Ví dụ: giả sử phía client chỉ
định cổng 1742 với lệnh PORT. Phía Server-DTP sau đó sẽ tạo ra một kết
nối từ cổng 20 của nó tới cổng 1742 phía client thay vì cổng 1678 như mặc
định. Quá trình này được mô tả trong hình dưới đây.
Thông thường, đối với kênh dữ liệu FTP, phía server sẽ khởi tạo việc
truyền dữ liệu bằng cách mở kết nối dữ liệu tới client.
Trong trường hợp trên, phía client trước tiên sẽ đưa ra lệnh PORT để
yêu cầu server sử dụng cổng 1742. Sau đó, server sẽ mở kết nối kênh dữ liệu
từ cổng 20 mặc định của nó tới cổng 1742 phía client. Dữ liệu sau đó sẽ
được truyền giữa các thiết bị qua các cổng này.
1.4.2 Kết nối kênh dữ liệu dạng bị động
Phương pháp kế tiếp được gọi là kết nối dữ liệu dạng bị động. Phía
client sẽ nhận server là phía bị động, làm nhiệm vụ chấp nhận một yêu cầu
kết nối kênh dữ liệu được khởi tạo từ phía client. Server trả lời lại phía client
với địa chỉ IP cũng như địa chỉ cổng mà nó sẽ sử dụng. Phía Server-DTP sau
đó sẽ lắng nghe một kết nối TCP từ phía User-DTP trên cổng này.
Mặc định, phía client sử dụng cùng một cổng đối với cả hai kênh điều
khiển và dữ liệu như trong trường hợp kết nối chủ động ở trên. Tuy nhiên, ở
đây, một lần nữa phía client có thể chọn sử dụng một giá trị cổng khác cho
8


kênh dữ liệu. Ta sẽ xét lại ví dụ ở trên một lần nữa, với cổng điều khiển phía
client là 1678 tới cổng 21 phía server. Nhưng lần này truyền dữ liệu theo
phương thức kết nối bị động, như mô tả trong hình dưới đây:

Phía client sẽ sử dụng lệnh PASV để yêu cầu server rằng nó muốn
dùng phương thức điều khiển dữ liệu bị động. Phía Server-PI sẽ trả lời lại
phía client với một giá trị cổng mà client sẽ sử dụng, từ cổng 2223 trên nó.
Sau đó phía Server PI sẽ hướng cho phía Server-DTP lắng nghe trên cổng

2223. Phía User-PI cũng sẽ hướng cho phía User-DTP tạo một phiên kết nối
từ cổng 1742 phía client tới cổng 2223 phía server. Sau khi Server chấp nhận
kết nối này, dữ liệu bắt đầu được truyền đi.
1.4.3 Các vấn đề về tính hiệu quả và tính bảo mật trong việc chọn
một phương thức kết nối
Vấn đề phía nào là phía khởi tạo kết nối kênh dữ liệu đưa ra một câu
hỏi: sự khác nhau giữa hai phương thức là gì? Điều này cũng giống như việc
hỏi ai đã thực hiện một cuộc điện thoại nội bộ. Câu trả lời là sự bảo mật.
Việc FTP sử dụng nhiều hơn một kết nối TCP có thể giải quyết các vấn đề về
phần mềm cũng như về phần cứng mà người dùng cần phải có để đảm bảo
sự an toàn cho hệ thống của họ.

9


Khi xem xét việc gì sẽ xảy ra trong trường hợp kênh dữ liệu chủ động
như trong ví dụ phía trên:
Đối với phía client, có một kênh kết nối điều khiển được thiết lập từ
cổng 1678 client tới cổng 21 server. Nhưng kênh dữ liệu lại được khởi tạo từ
phía server. Do đó, client sẽ nhận được một yêu cầu kết nối tới cổng 1678
(hoặc cổng nào khác). Một số client sẽ nghi ngờ về việc nhận được những
kết nối tới như vậy, vì trong tình huống thông thường, client mới là phía
khởi tạo kết nối chứ không phải đáp trả kết nối. Do các kênh kết nối TCP
hướng tới có thể mang theo những mối đe dọa nhất định, một số client có thể
sẽ ngăn chặn các luồng kết nối hướng tới bằng việc sử dụng tường lửa.
Tại sao người ta lại không làm cho phía client luôn chấp nhận kết nối
từ một chỉ số port được dùng trong kênh điều khiển? Vấn đề ở đây là vì
client thường dùng các cổng khác nhau cho mỗi phiên kết nối bằng việc sử
dụng câu lệnh PORT. Và tại sao điều này lại được thực hiện? Vì theo luật
TCP: sau khi một kết nối được đóng lại , có một khoảng thời gian trống

trước khi cổng đó có thể được sử dụng lại – điều này để ngăn ngừa tình
trạng các phiên kết nối liên tiếp bị lẫn với nhau. Điều này sẽ tạo ra độ trễ khi
gửi nhiều file – do đó phía client thường dùng các giá trị cổng khác nhau cho
mỗi kết nối. Điều này rất hiệu quả nhưng cũng dẫn tới việc firewall của
client sẽ hỏi có chấp nhận phiên kết nối tới với nhiều giá trị cổng không ổn
định hay không.
Việc dùng kết nối kiểu kênh gián tiếp sẽ giảm thiểu vấn đề này một
cách hiệu quả. Phần lớn các tường lửa có nhiều vấn đề liên quan tới kết nối
hướng về với các giá trị cổng bất kỳ, hơn là gặp vấn đề với các kết nối
hướng đi. Ta có thể xem chi tiết hơn về vấn đề này trong chuẩn RFC 1579.
Chuẩn này khuyến nghị rằng phía client nên sử dụng kết nối kiểu bị động
làm dạng mặc định thay vì sử dụng kiểu kết nối dạng chủ động cùng với
lệnh PORT, để ngăn chặn tình trạng block theo cổng.
Tất nhiên, phương thức kết nối kiểu bị động không hoàn toàn giải
quyết được vấn đề, chúng chỉ đẩy vấn đề về phía server mà thôi. Phía server,
giờ đây phải đối mặt với việc có nhiều kênh kết nối hướng về trên hàng loạt
các cổng khác nhau. Tuy nhiên việc xử lý các vấn đề bảo mật trên một nhóm
nhỏ server vẫn dễ hơn nhiều so với việc phải đối mặt với một lượng lớn các
vấn đề từ nhiều client. FTP server phải được cấu hình chấp nhận phương
thức truyền bị động từ client, do đó cách thông thường để thiết lập trên
server là thiết lập chấp nhận một số cổng kết nối hướng về trên server trong
khi vẫn khóa các yêu cầu kết nối hướng về trên các cổng khác.

10


1.5 Các phương thức truyền dữ liệu trong FTP
Khi kênh dữ liệu đã được thiết lập xong giữa Server-DTP với User-DTP, dữ
liệu sẽ được truyền trực tiếp từ phía client tới phía server, hoặc ngược lại, dựa
theo các lệnh được sử dụng. Do thông tin điều khiển được gửi đi trên kênh điều

khiển, nên toàn bộ kênh dữ liệu có thể được sử dụng để truyền dữ liệu. (Tất
nhiên, hai kênh logic này được kết hợp với nhau ở lớp dưới cùng với tất cả các
kết nối TCP/UDP khác giữa hai thiết bị, do đó điều này không hẳn đã cải thiện
tốc độ truyền dữ liệu so với khi truyền trên chỉ một kênh – nó chỉ làm cho hai
việc truyền dữ liệu và điều khiển trở nên độc lập với nhau mà thôi). FTP có ba
phương thức truyền dữ liệu, nêu lên cách mà dữ liệu được truyền từ một thiết bị
tới thiết bị khác trên một kênh dữ liệu đã được khởi tạo, đó là: stream mode,
block mode, và compressed mode
1.5.1 Stream mode
Trong phương thức này, dữ liệu được truyền đi dưới dạng các byte
không cấu trúc liên tiếp. Thiết bị gửi chỉ đơn thuần đầy luồng dữ liệu qua kết
nối TCP tới phía nhận. Không có một trường tiêu đề nhất định được sử dụng
trong phương thức này làm cho nó khá khác so với nhiều giao thức gửi dữ
liệu rời rạc khác. Phương thức này chủ yếu dựa vào tính tin cậy trong truyền
dữ liệu của TCP. Do nó không có cầu trúc dạng header, nên việc báo hiệu kết
thúc file sẽ đơn giản được thực hiện việc phía thiết bị gửi ngắt kênh kết nối
dữ liệu khi đã truyền xong.
Trong số ba phương thưc, stream mode là phương thức được sử dụng
nhiều nhất trong triển khai FTP thực tế. Có một số lý do giải thích điều đó.
Trước hết, nó là phương thức mặc định và đơn giản nhất, do đó việc triển
khai nó là dễ dàng nhất. Thứ hai, nó là phương pháp phổ biến nhất, vì nó xử
lý với các file đều đơn thuần như là xử lý dòng byte, mà không để ý tới nội
dung của các file. Thứ ba, nó là phương thức hiệu quả nhất vì nó không tốn
một lượng byte “overload” để thông báo header.
1.5.2 Block mode
Đây là phương thức truyền dữ liệu mang tính quy chuẩn hơn, với việc
dữ liệu được chia thành nhiều khối nhỏ và được đóng gói thành các FTP
blocks. Mỗi block này có một trường header 3 byte báo hiệu độ dài, và chứa
thông tin về các khối dữ liệu đang được gửi. Một thuật toán đặc biệt được sử
dụng để kiểm tra các dữ liệu đã được truyền đi và để phát hiện, khởi tạo lại

đối với một phiên truyền dữ liệu đã bị ngắt.
1.5.3 Compressed mode
Đây là một phương thức truyền sử dụng một kỹ thuật nén khá đơn
giản, là “run-length encoding” – có tác dụng phát hiện và xử lý các đoạn lặp
trong dữ liệu được truyền đi để giảm chiều dài của toàn bộ thông điệp.
Thông tin khi đã được nén, sẽ được xử lý như trong block mode, với trường
11


header. Trong thực tế, việc nến dữ liệu thường được sử dụng ở những chỗ
khác, làm cho phương thức truyền kiểu compressed mode trở nên không cần
thiết nữa. Ví dụ: nếu bạn đang truyền đi một file qua internet với modem
tương tự, modem của bạn thông thường sẽ thực hiện việc nén ở lớp 1; các
file lớn trên FTP server cũng thường được nén sẵn với một số định dạng như
ZIP, làm cho việc nén tiếp tục khi truyền dữ liệu trở nên không cần thiết.

CHƯƠNG 2: WEB SERVER
2.1 Khái niệm Web Server
Webserver là máy chủ cài đặt các chương trình (phần mềm) phục vụ các ứng
dụng web.
Webserver có khả năng tiếp nhận yêu cầu từ các trình duyệt web và gửi phản
hồi đến máy khách những trang web thông qua môi trường mạng Internet qua
giao thức HTTP hoặc các giao thức khác.
Mỗi loại Web server chỉ hỗ trợ một số loại tập tin riêng biệt, ví dụ như IIS hỗ
trợ một số tập tin như .asp, .aspx, .html, .php,… còn Apache hỗ trợ .php ...
Có nhiều phần mềm web server khác nhau như: Apache, Nginx, LiteSpeed,
IIS, …
Web server thông dụng nhất hiện nay:

2.2 Tổng quan về Web Server

Máy chủ Web Server là máy chủ có dung lượng lớn, tốc độ cao được dùng
để lưu trữ thông tin như một ngân hàng dữ liệu chứa những website đã được
thiết kế cùng với những thông tin liên quan khác. (các mã Script, các chương
trình, và các file Multimedia).
2.2.1 - Môi trường và giao thức
Web Server có khả năng gửi đến máy khách những trang Web thông
qua môi trường Internet (hoặc Intranet) qua giao thức HTTP – giao thức
được thiết kế để gửi các file đến trình duyệt Web (Web Browser), và các
giao thức khác.
12


Tất cả các Web Server đều có một địa chỉ IP (IP Address) hoặc cũng
có thể có một Domain Name.
Giả sử khi bạn đánh vào thanh Address trên trình duyệt của bạn một
dòng sau đó gõ phím Enter bạn sẽ gửi một yêu cầu đến
một Server có Domain Name là www.abc.com. Server này sẽ tìm trang Web
có tên là index.htm rồi gửi nó đến trình duyệt của bạn.
2.2.2 – Web Server Software
Bất kỳ một máy tính nào cũng có thể trở thành một Web Server bởi
việc cài đặt lên nó một chương trình phần mềm Server Software và sau đó
kết nối vào Internet.
Khi máy tính của bạn kết nối đến một Web Server và gửi đến yêu cầu
truy cập các thông tin từ một trang Web nào đó, Web Server Software sẽ
nhận yêu cầu và gửi lại cho bạn những thông tin mà bạn mong muốn.
Giống như những phần mềm khác mà bạn đã từng cài đặt trên máy
tính của mình, Web Server Software cũng chỉ là một ứng dụng phần mềm.
Nó được cài đặt, và chạy trên máy tính dùng làm Web Server, nhờ có
chương trình này mà người sử dụng có thể truy cập đến các thông tin của
trang Web từ một máy tính khác ở trên mạng (Internet, Intranet).

Web Server Software còn có thể được tích hợp với CSDL (Database),
hay điều khiển việc kết nối vào CSDL để có thể truy cập và kết xuất thông
tin từ CSDL lên các trang Web và truyền tải chúng đến người dùng.
Web Server phải hoạt động liên tục 24/24 giờ, 7 ngày một tuần và 365
ngày một năm, để phục vụ cho việc cung cấp thông tin trực tuyến.
Vị trí đặt server đóng vai trò quan trọng trong chất lượng và tốc độ
lưu chuyển thông tin từ server và máy tính truy cập.
2.3 Giới thiệu một số phần mềm Web Server phổ biến
2.3.1 Apache HTTP server
Apache HTTP server hay còn được gọi là Apache là phần mềm web
server được sử dụng rộng rãi nhất thế giới.
Apache được phát triển và duy trì bởi một cộng đồng mã nguồn mở dưới
sự bảo trợ của Apache Software Foundation.
Apache được phát hành với giấy phép Apache License, là một phần mềm
tự do, miễn phí. Tính đến tháng 6 năm 2013, apache ước tính phục vụ cho
54.2% các trang web đang hoạt động và 53.3% số máy chủ hàng đầu trong
các lĩnh vực.
13


Apache chạy trên các hệ điều hành như windows, linux, unix, freeBSD,
solaris, ….
Apache có các tính năng như chứng thực người dùng, virtual hosting, hỗ
trợ CGI, FCGI, SCGI, WCGI, SSI, ISAPI, HTTPS, Ipv6, ...

2.3.2 Nginx
Nginx là một web server nhẹ, không chiếm nhiều tài nguyên của hệ
thống. Nginx còn là một reserse proxy mã nguồn mở. Nginx là phần mềm
ổn định, cấu hình đơn giản và hiệu suất cao.
Nginx được phát triển bởi Igor Sesoev vào năm 2002 chủ yếu là để

phục vụ cho website rambler.ru (trang web được truy cập nhiều thứ hai
của nước Nga).
Nginx là phần mềm mã nguồn mở và là phần mềm miễn phí, được
phát hành rộng rãi theo giấy phép BSD. Nginx được phát triển bằng ngôn
ngữ C. Theo thống kê của Netcaft, trong một triệu website lớn nhất thế
giới có 6.52% sử dụng Nginx. Tại Nga, quê hương của Nginx, có 46.9%
sử dụng máy chủ này.
Nginx chạy được trên các hệ điều hành như Linux, FreeBSD,
Windows, Solaris, MacOS…
Nginx có các tính năng như chứng thực người dùng, hỗ trợ HTTPS,
virtual hosting, hỗ trợ FastGCI, hỗ trợ Ipv6…
2.3.3 Internet Information Services (IIS)
IIS do Microsoft phát triển, sản phẩm này được tích hợp cùng với hệ
điều hành Windows. Server. Trong IIS bao gồm nhiều dịch vụ như: dịch
vụ Web Server, dịch vụ FTP Server. Tính đến thời điểm tháng 5 năm
2015 thì thì số lượng trang Web sử dụng máy chủ IIS gần 248 triệu trang
web.
Tất cả các tính năng của web server được quản lí độc lập do đó chúng
ta có thể dễ dàng thêm, loại bỏ hoặc thay thế các tính năng của web
server.
IIS đảm bảo an toàn cho máy chủ bằng cách giảm diện tích bề mặt tấn
công. Giảm diện tích bề mặt tấn công là một trong những cách mạnh mẽ
nhất để đảm bảo hệ thống máy chủ. Với IIS, chúng ta có thể loại bỏ
những tính năng máy chủ không cần thiết để máy chủ đạt diện tích bề
14


mặt nhỏ nhất mà vẫn giữ những tính năng cần thiết. Bằng cách loại bỏ
một số tính năng máy chủ không sử dụng, chúng ta có thể làm giảm số
lượng bộ nhớ mà máy chủ sử dụng, cải thiện hiệu suất bằng cách làm

giảm số lượng đoạn code cần thực hiện. Bằng cách lựa chọn tập hợp các
tính năng máy chủ chúng ta có thể xây dựng một máy chủ để tối ưu hóa
một chức năng trong liên kết ứng dụng, chẵn hạn như bộ nhớ đệm hoặc
cân bằng tải.
Chúng ta có thể thêm các tính năng hoặc thay thế bất kì tính năng hiện
có nào bằng cách sử dụng các thành phần máy chủ của bên thứ ba hoặc
các thành phần chúng ta tự xây dựng trên phần mở rộng API. Cấu trúc
từng phần cung cấp lợi ích lâu dài cho cộng động IIS: nó tạo điều kiện
phát triển những tính năng mới khi cần thiết cho các nhà phát triển của
Microsoft và cả của bên thứ ba.
Nhờ được tích hợp ASP.NET IIS có thể sử dụng toàn bộ sức mạnh của
ASP.NET. Module ASP.NET làm cho máy chủ phát triển nhanh chóng
nhờ vào giao diện quen thuộc và các dịch vụ ứng dụng của ASP.NET. IIS
hỗ trợ chứng thực người dùng, virtual hosting, CGI, FCGI, ISAPI, php,
hỗ trợ Ipv6, …

15


CHƯƠNG 3: SSH – SECURE SHELL
3.1 Giao thức SSH là gì?
SSH (tiếng Anh: Secure Shell) là một giao thức mạng dùng để thiết lập kết
nối mạng một cách bảo mật. SSH hoạt động ở lớp trên trong mô hình phân lớp
TCP/IP. Các công cụ SSH (như là OpenSSH, PuTTy,...) cung cấp cho người
dùng cách thức để thiết lập kết nối mạng được mã hoá để tạo một kênh kết nối
riêng tư.
Mỗi khi dữ liệu được gửi bởi một máy tính vào mạng, SSH tự động mã hoá
nó. Khi dữ liệu được nhận vào, SSH tự động giải mã nó. Kết quả là việc mã hoá
được thực hiện trong suốt: người dùng có thể làm việc bình thường, không biết
rằng việc truyền thông của họ đã được mã hoá an toàn trên mạng.

3.2 Lịch sử phát triển các phiên bản SSH
SSH1 và giao thức SSH-1 được trình bày năm 1995 bởi Tatu Ylõnen, một
nhà nghiên cứu ở trường đại học kĩ thuật Helsinki của Phần Lan. Sau khi mạng
trường đại học của ông ta là nạn nhân của một cuộc tấn công đánh cắp
password vào đầu năm đó.
Năm 1998, SCS phát hành sản phẩm phần mềm "SSH Secure Shell" (SSH2),
dựa trên giao thức SSH-2. Tuy nhiên, SSH2 không thay thế SSH1 trong một số
lĩnh vực, có 2 lí do.
Thứ nhất, SSH2 không có một số tiện ích, các đặc điểm có ích và cấu
hình tuỳ chọn như SSH1.
Thứ hai, SSH2 có nhiều giới hạn về việc đăng kí.
3.3 Tổng quan về các đặc điểm của SSH
Các đặc điểm chính của giao thức SSH là:
- Tính bí mật (Privacy) của dữ liệu thông qua việc mã hoá mạnh mẽ
- Tính toàn vẹn (integrity) của thông tin truyền, đảm bảo chúng không bị
biến đổi.
- Chứng minh xác thực (authentication) nghĩa là bằng chứng để nhận dạng
bên gửi và bên nhận
- Giấy phép (authorization) :dùng để điều khiển truy cập đến tài khoản.
- Chuyển tiếp (forwarding) hoặc tạo đường hầm (tunneling) để mã hoá
những phiên khác dựa trên giao thức TCP/IP
3.3.1. Tính bí mật (Privacy)
Tính bí mật có nghĩa là bảo vệ dữ liệu không bị phơi bày. Mạng máy
tính bình thường không bảo đảm tính bí mật, bất cứ ai truy cập đến phần
16


cứng của mạng hoặc đến những host kết nối với mạng đều có thể sẽ đọc
được tất cả dữ liệu đi qua mạng. Mặc dù mạng chuyển mạch hiện đại đã
giảm những vấn đề này trong mạng vùng cục bộ nhưng nó vẫn còn một vấn

đề nghiêm trọng đó là mật khẩu dễ bị những kẻ xấu đánh cắp.
SSH cung cấp tính bí mật bằng việc mã hoá dữ liệu đi qua mạng. Đó
là việc mã hoá hai đầu dựa trên khoá ngẫu nhiên (sinh ra để phục vụ cho một
phiên kết nối và được huỷ đi khi phiên kết nối thành công). SSH hỗ trợ
nhiều thuật toán mã hoá đối với phiên dữ liệu, đó là những thuật toán mã
hoá chuẩn như: AES, ARCFOUR, Blowfish, Twofish, IDEA, DES và tripleDES (3DES)
3.3.2. Tính toàn vẹn (Integrity)
Tính toàn vẹn nghĩa là bảo đảm dữ liệu được truyền từ một đầu này
đến đầu kia của mạng không bị thay đổi. Giao thức SSH sử dụng phương
pháp kiểm tra toàn vẹn mật mã, phương pháp này kiểm tra cả việc dữ liệu có
bị biến đổi hay không và dữ liệu đến có đúng là do đầu kia gửi hay không.
Nó sử dụng thuật toán băm khoá là MD5 và SHA-1.
3.3.3. Chứng minh xác thực (Authentication)
Chứng minh xác thực là kiểm tra định danh của ai đó để xác định
chính xác đúng là người đó hay không. Mỗi kết nối SSH bao gồm hai việc
xác thực: client kiểm tra định danh của SSH server (server authentication) và
server kiểm tra định danh của người sr dụng yêu cầu truy cập (user
authentication). Server authentication chắc chắn rằng SSH server là chính
xác và không phải là kẻ lừa đảo để đề phòng kẻ tấn công lại gửi kết nối
mạng đến một máy khác. Server authentication cũng bảo vệ việc bị kẻ xấu
ngồi ở giữa hai bên, lừa gạt cả hai bên nghĩa là kẻ xấu sẽ nói với server nó là
client và nói với client nó là server để đọc được dữ liệu trao đổi giữa hai
bên.
User authentication theo truyền thống là làm việc với mật khẩu. Để
xác thực định danh của bạn, bạn phải đưa ra mật khẩu, và dễ bị lấy cắp.
Thêm nữa, để dễ nhớ một mật khẩu, người ta thường đặt nó ngắn và có ý
nghĩa nào đó nên dễ bị kẻ xấu đoán ra. Đối với mật khẩu dài hơn thì người ta
thường chọn những từ hoặc câu trong ngôn ngữ bẩm sinh nên cũng dễ bị bẻ
khoá.
SSH hỗ trợ xác thực bằng mật khẩu, mã hoá mật khẩu khi nó truyền đi

trên mạng. Đây là sự cải thiện rất lớn so với những giao thức truy cập từ xa
thông thường khác (Telnet, FTP) mà chúng gửi mật khẩu qua mạng dưới
dạng clear text. Tuy nhiên, việc chứng thực như thế vẫn chỉ là chứng thực
mật khẩu đơn giản vì thế SSH cung cấp cơ chế mạnh hơn và dễ sử dụng
hơn: mỗi user có nhiều chữ kí khoá công cộng (per-user public-key
17


signature) và một cải tiến rlogin-style xác thực với định danh host được
kiểm tra bằng khoá công khai. Hơn nữa, những bản bổ sung khác nhau của
SSH hỗ trợ vài hệ thống khác bao gồm Kerberos, RSA, mật khẩu S/Key
one-time và PAM. Một SSH client và SSH server đàm phán với nhau để xác
định cơ chế xác thực sẽ sử dụng dựa trên cấu hình của chúng và một server
thậm chí có thể yêu cầu nhiều kiểu xác thực.
3.3.4. Việc cấp giấy phép (Authorization)
Việc cấp giấy phép có tác dụng quyết định ai đó có thể hoặc không thể
làm gì đó. Nó diễn ra sau khi xác thực, bởi vì bạn không thể chấp nhận một
ai đó có quyền gì khi chưa biết đó là ai. SSH server có nhiều cách khác nhau
để giới hạn hành động của client. Truy cập đến phiên đăng nhập tác động lẫn
nhau như TCP port và X Window forwarding, key agent forwarding, … có
thể tất cả đều được điều khiển mặc dù không phải tất các đặc điểm đều có
sẵn trên tất cả các bản bổ sung SSH,và chúng không luôn luôn tống quát
hoặc linh hoạt như bạn ý muốn. Giấy phép có thể được điều khiển tại một
mức server rộng (ví dụ: /etc/ssh/sshd_config file đối với OpenSH) hoặc theo
tài khoản phụ thuộc vào phương thức xác thực sử dụng.
3.3.5. Chuyển tiếp (Forwarding) hoặc tạo đường hầm (tunneling)
Chuyển tiếp hoặc tạo đường hầm là tóm lược dịch vụ dựa trên TCP
khác như là Telnet hoặc IMAP trong một phiên SSH mang lại hiệu quả bảo
mật của SSH đến với các dịch vụ dựa trên TCP khác. Ví dụ, một kết nối
Telnet bình thường truyền username, password của bạn và phiên đăng nhập

của bạn ở dạng clear text. Bằng cách chuyển tiếp telnet thông qua SSH, tất
cả dữ liệu sẽ tự động được mã hoá và kiểm tra định danh và bạn có thể xác
nhận dùng SSH tin cậy.
SSH hỗ trợ 3 kiểu chuyển tiếp:
 TCP port forwarding:

SSH dùng TCP/IP làm cơ chế truyền, thường dùng port 22 trên máy
server khi nó mã hoá và giải mã lưu lượng đi trên mạng. Ở đây chúng ta nói
đến một đặc điểm mã hoá và giải mã lưu lựong TCP/IP thuộc về ứng dụng
khác, trên cổng TCP khác dùng SSH. Tiến trình này gọi là port forwarding,
nó có tính trong suốt cao va khá mạnh. Telnet, SMTP, NNTP, IMAP và
những giao thức không an toàn khác chạy TCP có thể được bảo đảm bằng
việc chuyển tiếp kết nối thông qua SSH. Port forwarding đôi khi được gọi là
tunneling bởi vì kết nối SSH cung cấp một “đường hầm” xuyên qua để kết
nối TCP khác có thể đi qua.
Giả sử bạn có một máy H ở nhà đang chạy IMAP và bạn muốn kết nối
đến một IMAP server trên máy S để đọc và gửi mail. Bình thường thì việc
kết nối này không đảm bảo an toàn, tài khoản và mật khẩu mail của bạn
18


được truyền đi dưới dạng clear text giữa chương trình mail của bạn và
server. Đối với SSH port forwarding, bạn có thể định tuyến lại trong suốt kết
nối IMAP ( tìm cổng TCP 143 trên server S) để truyền đi thông qua SSH, mã
hoá bảo đảm dữ liệu truyền đi trên kết nối. Máy IMAP server phải chạy một
SSH server cho port forwarding để cung cấp việc bảo đảm đó.
Tuy nhiên, SSH port forwarding chỉ hoạt động trên giao thức TCP và
không làm việc được trên các giao thức khác như UDP hay AppleTalk
 X forwarding


X là một hệ thống window phổ biến đối với các trạm làm việc Unix,
một trong những đặc điểm tốt nhất của nó là tính trong suốt. Sử dụng X bạn
có thể chạy ứng dụng X từ xa để mở các cửa sổ của chúng trên màn hình
hiển thị cục bộ của bạn
 Agent forwarding

SSH client có thể làm việc với một SSH agent trên cùng một máy. Sử
dụng mọt đặc trưng gọi là agent forwarding, client cũng có thể liên lạc với
các agent trên những máy từ xa. Điều thuận lợi là nó cho phép client trên
nhiều máy làm việc với một agent và có thể tránh vấn đề liên quan đến
tường lửa.
3.4 Kiến trúc chung của một hệ thống SSH
SSH có khoảng một bộ 12 thuộc tính riêng lẻ, các thành phần tác động lẫn
nhau cho ra các nét đặc trưng riêng.

19


SSH cũng có khoá (keys), phiên (sessions) và những thứ khác. Ở đây chúng
ta qui định một bản tóm tắt tổng quan của tất cả các thành phần, ví thế có thể
bắt đầu thấy được bức tranh lớn về SSH như sau:
 Server

Một chương trình cho phép đi vào kết nối SSH với một bộ máy, trình
bày xác thực, cấp phép, … Trong hầu hết SSH bổ sung của Unix thì
server thường là sshd.
 Client

Một chương trình kết nối đến SSH server và đưa ra yêu cầu như là
“log me in” hoặc “copy this file”. Trong SSH1, SSH2 và OpenSSH,

client chủ yếu là ssh và scp.
 Session

Một phiên kết nối giữa một client và một server. Nó bắt đầu sau khi
client xác thực thành công đến một server và kết thúc khi kết nối chấm
dứt. Session có thể được tương tác với nhau hoặc có thể là một chuyến
riêng.
 Key

Một lượng dữ liệu tương đối nhỏ, thông thường từ mười đến một hoặc
hai ngàn bit. Tính hữu ích của việc sử dụng thuật toán ràng buộc khoá
hoạt động trong vài cách để giữ khoá: trong mã hoá, nó chắc chắn rằng
chỉ người nào đó giữ khoá (hoặc một ai có liên quan) có thể giải mã
thông điệp, trong xác thực, nó cho phép bạn kiểm tra trễ rằng người giữ
khoá thực sự đã kí hiệu vào thông điệp.
Có hai loại khóa: khoá đối xứng hoặc khoá bí mật và khoá bất đối
xứng hoặc khóa công khai. Một khoá bất đối xứng hoặc khoá công khai
có hai phần: thành phần công khai và thàn phần bí mật.
3.5 Cách thức làm việc của SSH
SSH làm việc thông qua 3 bước đơn giản:
 Định danh host - xác định định danh của hệ thống tham gia phiên làm

việc SSH.
 Mã hoá - thiết lập kênh làm việc mã hoá.
 Chứng thực - xác thực người sử dụng có quyền đăng nhập hệ thống.
3.5.1 Định danh host
Việc định danh host được thực hiện qua việc trao đổi khoá. Mỗi máy tính
có hỗ trợ kiểu truyền thông SSH có một khoá định danh duy nhất. Khoá này
20



gồm hai thành phần: khoá riêng và khoá công cộng. Khoá công cộng được
sử dụng khi cần trao đổi giữa các máy chủ với nhau trong phiên làm việc
SSH, dữ liệu sẽ được mã hoá bằng khoá công khai và chỉ có thể giải mã
bằng khoá riêng. Khi có sự thay đổi về cấu hình trên máy chủ: thay đổi
chương trình SSH, thay đổi cơ bản trong hệ điều hành, khoá định danh cũng
sẽ thay đổi. Khi đó mọi người sử dụng SSH để đăng nhập vào máy chủ này
đều được cảnh báo về sự thay đổi này. Khi hai hệ thống bắt đầu một phiên
làm việc SSH, máy chủ sẽ gửi khoá công cộng của nó cho máy khách. Máy
khách sinh ra một khoá phiên ngẫu nhiên và mã hoá khoá này bằng khoá
công cộng của máy chủ, sau đó gửi lại cho máy chủ. Máy chủ sẽ giải mã
khoá phiên này bằng khoá riêng của mình và nhận được khoá phiên. Khoá
phiên này sẽ là khoá sử dụng để trao đổi dữ liệu giữa hai máy. Quá trình này
được xem như các bước nhận diện máy chủ và máy khách.
3.5.2 Mã hoá
Sau khi hoàn tất việc thiết lập phiên làm việc bảo mật (trao đổi khoá,
định danh), quá trình trao đổi dữ liệu diễn ra thông qua một bước trung gian
đó là mã hoá/giải mã. Điều đó có nghĩa là dữ liệu gửi/nhận trên đường
truyền đều được mã hoá và giải mã theo cơ chế đã thoả thuận trước giữa
máy chủ và máy khách. Việc lựa chọn cơ chế mã hoá thường do máy khách
quyết định. Các cơ chế mã hoá thường được chọn bao gồm: 3DES, IDEA,
và Blowfish. Khi cơ chế mã hoá được lựa chọn, máy chủ và máy khách trao
đổi khoá mã hoá cho nhau. Việc trao đổi này cũng được bảo mật dựa trên
đinh danh bí mật của các máy. Kẻ tấn công khó có thể nghe trộm thông tin
trao đổi trên đường truyền vì không biết được khoá mã hoá. Các thuật toán
mã hoá khác nhau và các ưu, nhược điểm của từng loại:
• 3DES (cũng được biết như Triple-DES) -- phương pháp mã hoá mặc

định cho SSH.
• IDEA—Nhanh hơn 3DES, nhưng chậm hơn Arcfour và Blowfish.

• Arcfour—Nhanh, nhưng các vấn đề bảo mật đã được phát hiện.
• Blowfish—Nhanh và bảo mật, nhưng các phương pháp mã hoá đang
được cải tiến.
3.5.3 Chứng thực
Việc chứng thực là bước cuối cùng trong ba bước, và là bước đa dạng
nhất. Tại thời điểm này, kênh trao đổi bản thân nó đã được bảo mật. Mỗi
định danh và truy nhập của người sử dụng có thể được cung cấp theo rất
nhiều cách khác nhau. Chẳng hạn, kiểu chứng thực rhosts có thể được sử
dụng, nhưng không phải là mặc định; nó đơn giản chỉ kiểm tra định danh
của máy khách được liệt kê trong file rhost (theo DNS và địa chỉ IP). Việc
chứng thực mật khẩu là một cách rất thông dụng để định danh người sử
21


dụng, nhưng ngoài ra cũng có các cách khác: chứng thực RSA, sử dụng sshkeygen và ssh-agent để chứng thực các cặp khoá.

22



×