Thursday, July 16, 2009

Lý Thuyết và Cấu hình SSH (Secure Shell)

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.


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.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
4.Kiến trúc chung của một hệ thống SSH

SSH cũng có khoá (keys), phiên (sessions) và những thứ ngộ nghĩnh 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ế bạn có thể bắt đầu thấy được bức tranh lớn về SSH như sau:
Quote:
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.
5.Bên trong SSH-2 :

Giao thức SSH-2 được chia làm 4 bộ phận chính, được diễn tả như 4 giao thức riêng rẽ trong nhiều tài liệu IETF khác nhau. Theo thông thường, chúng được sắp xếp cùng với nhau để cung cấp thiết lập các dịch vụ mà hầu hết người dùng kết hợp chúng thành một SSH-2 đầy đủ.
Quote:
-Giao thức lớp vận chuyển SSH (SSH-TRANS)
-Giao thức xác thực SSH (SSH-AUTH)
-Giao thức kết nối SSH (SSH-CONN)
-Giao thức truyền file SSH (SSH-SFTP)

Tóm tăt cơ chế hoạt động của SSH-2

Một phiên làm việc của SSH-2 trải qua 4 bước chủ yếu như sau:

+ Thiết lập kết nối ban đầu (SSH-TRANS) + Tiến hành xác thực lẫn nhau (SSH-AUTH) + Mở phiên kết nối để thực hiện các dịch vụ (SSH-CONN) + Chạy các dịch vụ ứng dụng SSH ( có thể là SSH-SFTP)

6.Cài đặt.
Mặc định khi cài đặt server thì ssh đã được tích hợp vài đặt vào server.
Kiểm tra:
[root@goldenbook /tmp]# rpm -qa | grep ssh
openssh-clients-4.3p2-26.el5
openssh-server-4.3p2-26.el5
openssh-4.3p2-26.el5
6.Cấu hình :
File cấu hình server SSH được đặt trong thư mục /etc/ssh/sshd_conf. Bạn cần khởi động lại dịch vụ SSH sau mỗi lần thay đổi để các thay đổi đó được thực thi.

Thay đổi cổng SSH

Mặc định, SSH tuân theo các kết nối đến trên cổng 22. Kẻ tấn công thường sử dụng phần mềm quét cổng xem liệu các host (máy trạm) có sử dụng dịch vụ SSH không. Thay đổi cổng SSH lên cao hơn 1024 là một lựa chọn khôn ngoan, vì hầu hết mọi chương trình quét cổng (gồm cả nmap) mặc định đều rà soát được các cổng cao.

Mở file /etc/ssh/sshd_config và tìm dòng có ghi:
Port 22
Thay đổi số cổng và khởi động lại dịch vụ SSH:
/etc/init.d/ssh restart
Chỉ cho phép sử dụng giao thức SSH 2

Có hai loại giao thức SSH. Nếu chỉ dùng giao thức SSH 2 thì sẽ an toàn hơn nhiều vì SSH 1 thường gặp phải vấn đề bảo mật với kiểu tấn công man-in-the-middle và insertion. Mở file /etc/ssh/sshd_config và tìm dòng sau:
Protocol 2,1
Thay đổi dòng thành protocol 2.

Chỉ cho phép một số đối tượng người dùng đăng nhập qua SSH

Bạn không nên cho phép người dùng root đăng nhập qua SSH, vì điều này gây nên mối đe doạ bảo mật lớn mà không cần thiết. Nếu một kẻ tấn công nào đó thu được đặc quyền root khi đăng nhập vào máy, khả năng phá hoại có thể gấp mấy lần người dùng thông thường. Bạn nên cấu hình server SSH không cho phép người dùng root đăng nhập. Đầu tiên, tìm dòng ghi:
PermitRootLogin yes
Thay đổi yes thành no và khởi động lại dịch vụ. Sau đó bạn có thể đăng nhập lại hệ thống với bất kỳ vai trò người dùng xác định nào đó và chuyển sang người dùng root nếu muốn trở thành siêu người dùng.

Sẽ khôn ngoan hơn khi tạo một user cục bộ giả hoàn toàn không có đặc quyền gì trên hệ thống và dùng tên user đó để đăng nhập SSH. Sử dụng cách thức này sẽ giúp máy tính không bị hại dù tài khoản người dùng có bị xâm phạm. Khi tạo người dùng này, hãy chắc chắn nó phải nằm trong nhóm wheel để bạn có thể chuyển sang nhóm superuser (siêu người dùng) nếu cần.

Nếu muốn tạo danh sách một số đối tượng người dùng được phép đăng nhập vào SSH, bạn có thể mô tả chúng trong file sshd_config. Ví dụ, nếu muốn cho phép người dùng kimsach đăng nhập qua SSH, ở cuối file sshd_config, thêm vào một dòng như sau:
AllowUsers kimsach
Sử dụng cơ chế thẩm định khoá công cộng
Thay vì sử dụng tên và mật khẩu khi đăng nhập vào SSH, bạn có thể dùng cơ chế thẩm định khoá công cộng RSA hoặcDSA. Chú ý rằng bạn có thể sử dụng username, password và khoá RSA hoặcDSA cùng một lúc.
Cách tạo khóa :
  • Trên Windows dùng tool puttygen.exe để tạo Key va passwd
Tiếp theo, copy nội dung "Public key" vào file ~/.ssh/authorized_keys trên server. Và lưu "Private key" tren client. Bạn chỉ cần thực hiện một việc là thiết lập chính xác đặc quyền trong file ~/.ssh/authorized_keys trên server:
# chmod 600 ~/.ssh/authorized_keys
Bây giờ cấu hình file sshd_conf để sử dụng cơ chế thẩm định khoá RSA. Hãy chắc chắn rằng bạn có ba dòng không chú thích sau:
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys

Khởi động lại dịch vụ. Nếu mọi thứ đã được cấu hình chính xác, bạn đã có thể sử dụng SSH cho server và đặt trực tiếp nó vào thư mục chủ mà không cần bất kỳ tương tác nào khác.

Nếu muốn chỉ sử dụng duy nhất một cơ chế thẩm định RSA, không cần chú thích hay thay đổi dòng PasswordAuthentication trong file sshd_config từ yes thành no:
PasswordAuthentication no
Lúc này từ Client ta se dùng user, password, key để login vào Server bằng khóa công cộng.
Trên Windows dùng tool putty.exe để ssh vào server.
Nếu ai đó cố gắng kết nối tới dịch vụ SSH mà không có khoá chung trên server, anh ta sẽ bị từ chối và thậm chí không được đưa nền đăng nhập ra với thông báo lỗi:
Permission denied (publickey).

No comments:

Post a Comment