Chuyển đến nội dung chính

Tăng cường bảo mật cho SSH server.

Tổng quan mình sẽ đưa ra một số phương pháp để tăng cường độ bảo mật cho SSH server, sau đó mình sẽ đi sâu vào hướng dẫn những phương pháp phổ biến mà hữu ích nhất.
  • Sử dụng Fail2ban để bảo vệ cổng SSH không bị tấn công brute force.
  • Cài đặt Google Authenticator PAM module cho SSH server để tạo lớp bảo vệ thứ 2.
  • Tắt đăng nhập với quyền root và giới hạn các user được quyền SSH.
  • Thay đổi cổng đăng nhập SSH.
  • Sử dụng SSH private key với passphrase mạnh thay thế cho password truyền thống.
  • Tắt bà nó SSH đi, khỏi xài nữa :)) . Bình tĩnh nào, mình sẽ giải thích khi đến phần này. 

1. Cài đặt Fail2ban để bảo vệ cổng SSH

Fail2ban có sẵn trên repository gốc của Ubuntu.
sudo apt-get install fail2ban
Chúng ta sẽ tạo một file config mới cho Fail2ban.
nano /etc/fail2ban/jail.local
Thêm đoạn này vào file config.
[ssh] enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 600
ignoreip = 127.0.0.1/8 
Dùng Ctrl+O để lưu lại, Ctrl+X để thoát ra.
Sau đó khởi động lại dịch vụ Fail2ban.
systemctl restart fail2ban
Chúng ta có thể kiểm tra trạng thái các jail đang hoạt động của Fail2ban bằng lệnh: fail2ban-client status

Để kiểm tra các IP bị ban bởi jail SSH, ta dùng lệnh:  fail2ban-client status ssh

Bật service của Fail2ban khởi động cùng hệ thống: systemctl enable fail2ban 


2. Cài đặt Google Authenticator PAM module cho SSH server

https://github.com/google/google-authenticator-libpam/
https://mangmaytinh.net/threads/xac-thuc-hai-buoc-cho-ssh-tren-centos-6-su-dung-google-authenticator.153/

Đầu tiên chúng ta sẽ cài module trước.
apt-get install libpam-google-authenticator
Sau đó hãy đăng nhập với user mà bạn sẽ muốn tạo secret key. Rồi chạy lệnh: google-authenticator

Do you want authentication tokens to be time-based (y/n)
Trả lời: y.

Các bước còn lại sẽ giống như vầy, bạn có thể chọn theo ý bạn.
Cài đặt Google Authenticator lên thiết bị của bạn theo hướng dẫn tại đây.


Sau đó mở Google Authenticator lên, cách dễ nhất là chọn quét mã QR, bạn quét mã QR sinh ra ở bước phía trên là xong. Cách thứ hai là nhập khóa được cung cấp, bạn nhập tên tài khoản là gì cũng được (không quan trọng), sau đó bạn nhập secret key tạo ở bước trên vào ô khóa được cung cấp là xong. 


Mở file /etc/pam.d/sshd và thêm dòng này vào.
auth required pam_google_authenticator.so
Mở file /etc/ssh/sshd_config và bật ChallengeResponseAuthentication.
ChallengeResponseAuthentication yes
Khởi động lại dịch vụ SSH.
systemctl restart ssh
Lần đăng nhập kế tiếp, bạn sẽ phải nhập verification code trước khi đăng nhập SSH.
Như vầy là thành công :D

LƯU Ý: Theo nguyên lý làm việc này thì bạn sẽ gặp rắc rối nếu thời gian trên máy bạn hoặc server không đúng.


3. Đổi port SSH

Phần này rất đơn giản. Bạn mở file config của SSH.
nano /etc/ssh/sshd_config
Tìm dòng Port, uncomment nó đi (nếu còn dấu #), rồi sửa thành port bạn muốn rồi lưu lại.
LƯU Ý: Hãy chắc chắn rằng bạn không bật firewall, nếu bạn có bật firewall, bạn phải thêm port SSH mới vào danh sách được cho phép. Ví dụ ở đây mình vừa chuyển sang port 47896. 
Để thêm port này vào ufw ta dùng lệnh.
ufw allow 47896/tcp
Đối với CentOS 6 (và các distro khác) dùng iptables.
iptables -A INPUT -p tcp --dport 47896 -j ACCEPT
Đối với CentOS 7 dùng firewalld
firewall-cmd --permanent --add-port=47896/tcp
firewall-cmd --reload
Khởi động lại dịch vụ SSH.
systemctl restart ssh

4. Tạo SSH key với passphrase để đăng nhập thay cho password

Tạo key RSA 2048-bit:
ssh-keygen -t rsa
Chưa đủ đô? Thì đây, 4096-bit.
ssh-keygen -t rsa -b 4096
Nó sẽ hỏi:
Enter file in which to save the key
Kệ cha nó đi, bấm enter bỏ qua.
Nó lại hỏi tiếp:
Enter passphrase (empty for no passphrase):
Bạn có thể nhập passphrase ở đây để tăng độ bảo mật cho khóa, không làm cũng không sao, tốt hơn là nên làm.

Lệnh này sẽ tạo ra một cặp khóa RSA công khai & bí mật, bạn có thể đọc thêm tại đây: https://goo.gl/t1yF92
Bạn đổi tên file id_rsa.pub thành authorized_keys
mv /root/.ssh/id_rsa.pub authorized_keys
authorized_keys là khóa công khai, id_rsa là khóa bí mật. Dùng  cat /root/.ssh/id_rsa đọc toàn bộ nội dung khóa bí mật rồi copy lưu cẩn thận trong máy. Hoặc kết nối SFTP vào server rồi tải id_rsa về. Sau đó thử đăng nhập bằng SSH key.

Với PuTTY trên Windows, bạn thêm SSH key vào mục Auth, Private key file for authentication.

Với Linux và macOS, đọc lại bài này:
https://mrvir.com/ket-noi-ssh-den-may-chu-linux/

Nếu gặp trục trặc khi kết nối bằng SSH key, bạn có thể  chmod 400 id_rsa hoặc chmod 600 id_rsa.

Nếu đăng nhập thành công thì nó sẽ vào thẳng server mà không cần password (có thể cần nhập passphrase nếu bạn có tạo).

Sau khi đã đăng nhập thành công thì tắt chức năng đăng nhập bằng password đi.
nano /etc/ssh/sshd_config
Sửa 2 dòng này:
PasswordAuthentication no
UsePAM no
Khởi động lại dịch vụ SSH.
systemctl restart ssh
5. Tắt đăng nhập quyền root và giới hạn các user được phép SSH

Khoan, bạn phải tạo một sudoer mới trước khi tắt đăng nhập bằng root. Tắt xong thì lấy quyền éo gì mà vào nữa :))
useradd vir
passwd vir
Mấy cái này cơ bản mình không giải thích.
Bây giờ nâng vir thành sudoer.
nano /etc/sudoers
Thêm vào vir ALL=(ALL:ALL) ALL rồi lưu lại.
Thử đăng nhập với user vir rồi sudo -s thử xem được chưa, nếu thành công sang bước tiếp theo.
nano /etc/ssh/sshd_config 
Tìm đến dòng #PermitRootLogin yes, uncomment nó đi sửa lại thành PermitRootLogin no.

Thêm dòng AllowUsers vir để cho phép chỉ mình vir được SSH, có thể thêm nhiều user cách nhau bởi khoảng cách.

Khởi động lại dịch vụ SSH.
systemctl restart ssh

6. Tắt SSH service

Cái gì? Mày bày trò cho tao làm nãy giờ xong kêu tao tắt?

OK. Tại sao mình lại kêu tắt SSH?
Nếu bạn sử dụng các dịch vụ cloud VPS, cloud server mà nhà cung cấp có hỗ trợ một VNC console trên nền web, thì bạn có một cách thứ 2 để tương tác với server thay vì SSH trực tiếp.


Nếu production của bạn đã xong giai đoạn deploy và đi vào hoạt động ổn định thì bạn cũng không cần phải SSH nhiều, chủ yếu để vào cập nhật các bản vá, kiểm tra tình trạng hệ thống nhẹ nhàng.

Bạn có thể tắt hẳn SSH và chỉ dùng VNC trên web của nhà cung cấp để quản lý server. Khi nào cần SSH thì chỉ cần vào VNC để bật lại. Bạn nên gia cố thêm bảo mật hai lớp vào tài khoản quản trị trên web cho chắc ăn.
systemctl stop ssh
systemctl disable ssh
Trên đây chỉ là một trong rất nhiều cách để tăng cường bảo mật cho server. Hi vọng bài viết này giúp ích được bạn.

Tham khảo: MrVir

Nhận xét

Bài đăng phổ biến từ blog này

HttpOnly Flag và Secure Flag của chiếc Cookie để làm gì?

Cookies rất hữu ích nhưng cũng tồn tại không ít rủi ro. Bài viết sau đây giúp tìm hiểu rõ thêm về 2 thuộc tính giúp bảo vệ Cookies là Httponly flag   và Secure flag.   Nếu anh em mò vào được bài này thì chắc cũng biết về Cookie rồi, nhưng còn hiểu lơ mơ    thì click vào đây trước nhé -  Cookie . Chuyện kể rằng, ngày xửa ngày xưa, có một "nghệ sĩ" nọ do không sao kê tiền từ thiện nên đã bị hacker tấn công chiếm rất nhiều tài khoản do bị mất cookie.  1. Tại sao lại mất?   Nguyên nhân "nghệ sĩ" bị mất thông tin cá nhân là do quá chủ quan khi click đọc email do rất nhiều "fan" gửi cho, trong những email đó có gắn đường link chứa mã độc đánh cắp cookie của 1 trang web nào đó.  Do cookies phản hồi từ server mà các đường link đó dẫn tới không được bảo vệ     nên đã bị đối tượng xấu lấy mất cookies chứa xác thực đăng nhập -> dẫn tới mất thông tin. Về mặt bản chất, cũng có thể hiểu đây như là một cuộc tấn công XSS , đối tượng gửi email sẽ execute một đoạn scri

Mã hóa đối xứng và bất đối xứng

Hôm nay mình xin được nói về hai thuật toán cơ bản và quan trong nhất trong bảo mật đó là mã hóa đối xứng và mã hóa bất đối xứng . 1. Mã hóa đối xứng (mã hóa không công khai- symmetric-key algorithms ) - Là lớp thuật toán các mã hóa trong đó việc mã hóa và giải mã đều dùng chung cho 1 khóa (secret key) 1.1 Các loại thuật toán khóa đối xứng Thuật toán đối xứng có thể được chia ra làm hai thể loại, mật mã luồng ( stream ciphers ) và mật mã khối ( block ciphers ). Mật mã luồng mã hóa từng bit của thông điệp trong khi mật mã khối gộp một số bit lại và mật mã hóa chúng như một đơn vị. Cỡ khối được dùng thường là các khối 64 bit. Thuật toán tiêu chuẩn mã hóa tân tiến ( Advanced Encryption Standard ), được NIST công nhận tháng 12 năm 2001, sử dụng các khối gồm 128 bit. Các thuật toán đối xứng thường không được sử dụng độc lập. Trong thiết kế của các hệ thống mật mã hiện đại, cả hai thuật toán bất đối xứng ( asymmetric ) (dùng chìa khóa công khai) và thuật toán đối xứng được sử

Những câu hỏi phỏng vấn kỹ sư bảo mật thường gặp.

Dưới đây là một danh sách các câu hỏi thường được sử dụng trong việc phỏng vấn tuyển dụng chuyên gia bảo mật. Nhiều câu hỏi được thiết kế buộc người được phỏng vấn phải suy nghĩ, và không thể chuẩn bị trước cho dạng câu hỏi này. Ở đó, các phản ứng của ứng viên cũng quan trọng  như câu trả lời. Một số câu hỏi được pha trộn giữa kỹ thuật và lý thuyết, hoặc câu hỏi tìm hiểu quan điểm của ứng viên để tạo ra những câu hỏi khó khăn hơn. Các câu hỏi cũng thường được chia thành các thể loại khác nhau, một số câu hỏi mẹo sẽ được chèn vào giữa. Mục đích của những câu hỏi dạng đánh đố này là tìm kiếm những điểm yếu kỹ thuật thường chỉ xuất hiện khi ứng viên đi vào làm việc :| . Nhóm câu hỏi chung 1. Giữa các dự án mã mở và mã đóng, bên nào bảo mật hơn? Câu trả lời của ứng viên sẽ nói rất nhiều về họ. Nó cho thấy 1) họ biết những khái niệm gì trong phát triển phần mềm, 2) cho thấy mức độ chín chắn của ứng viên. Mục tiêu chính của câu hỏi là đưa ra được ưu/ nhược điểm của hệ mã đóng và mã m