SSH (Shell Bảo mật) là một giao thức mạng mã nguồn mở được sử dụng để kết nối các máy chủ Linux cục bộ hoặc từ xa để chuyển file, sao lưu từ xa, thực thi lệnh từ xa và các tác vụ liên quan đến mạng khác thông qua các lệnh scp hoặc sftp giữa hai máy chủ kết nối qua một kênh an toàn trên mạng.
Trong bài viết này, tôi sẽ chỉ cho bạn một số công cụ và mẹo đơn giản giúp bạn tăng cường bảo mật máy chủ ssh của mình. Ở đây bạn sẽ tìm thấy một số thông tin hữu ích về cách bảo mật và ngăn chặn các máy chủ ssh khỏi các cuộc tấn công nguỵ định và từ điển.
1. DenyHosts
DenyHosts là một tập lệnh phòng ngừa xâm nhập dựa trên thông tin nhật ký nguồn mở dành cho các máy chủ SSH được viết bằng ngôn ngữ lập trình python nhằm theo dõi và phân tích nhật ký truy cập máy chủ SSH để nhận biết các cuộc tấn công đăng nhập thất bại dựa trên từ điển và tấn công nguỵ định.
Tập lệnh này hoạt động bằng cách cấm địa chỉ IP sau một số lần đăng nhập thất bại và cũng ngăn chặn các cuộc tấn công đó từ truy cập vào máy chủ.
Tính năng của DenyHosts
- Theo dõi file /var/log/secure để tìm tất cả các cuộc đăng nhập thành công và thất bại và lọc chúng.
- Theo dõi tất cả các cuộc đăng nhập thất bại bằng người dùng và máy chủ gây phiền toái.
- Theo dõi mỗi người dùng tồn tại và không tồn tại (ví dụ: xyz) khi có một cuộc đăng nhập thất bại.
- Theo dõi mỗi người dùng, máy chủ gây phiền toái và các cuộc đăng nhập đáng ngờ (nếu có số cuộc đăng nhập thất bại nhiều) sẽ cấm địa chỉ IP máy chủ đó bằng cách thêm một mục vào file /etc/hosts.deny.
- Tùy chọn gửi thông báo qua email về các máy chủ bị chặn mới và các đăng nhập đáng ngờ.
- Bảo quản tất cả các cuộc đăng nhập thành công và không hợp lệ vào các file riêng biệt để dễ dàng nhận biết người dùng hợp lệ hoặc không hợp lệ đang bị tấn công. Do đó, chúng ta có thể xóa tài khoản đó hoặc thay đổi mật khẩu hoặc vô hiệu hóa shell cho người dùng đó.
2. Fail2Ban
Fail2Ban là một trong những khung phát hiện / phòng ngừa xâm nhập mã nguồn mở phổ biến nhất được viết bằng ngôn ngữ lập trình python. Nó hoạt động bằng cách quét các file nhật ký như /var/log/secure, /var/log/auth.log, /var/log/pwdfail v.v. để tìm kiếm quá nhiều cuộc đăng nhập thất bại.
Fail2Ban được sử dụng để cập nhật file hosts.deny của Netfilter/iptables hoặc TCP Wrapper, từ chối địa chỉ IP của kẻ tấn công trong một khoảng thời gian nhất định. Nó cũng có khả năng bỏ chặn một địa chỉ IP đã bị chặn trong một khoảng thời gian nhất định do các quản trị viên thiết lập. Tuy nhiên, một số phút được bỏ chặn cũng là đủ để ngăn chặn các cuộc tấn công độc hại như vậy.
Tính năng của Fail2Ban
- Đa luồng và có khả năng cấu hình cao.
- Hỗ trợ xoay file nhật ký và có thể xử lý nhiều dịch vụ như (sshd, vsftpd, apache, v.v).
- Theo dõi các file nhật ký và tìm kiếm các mẫu đã biết và không biết.
- Sử dụng bảng Netfilter/Iptables và TCP Wrapper (/etc/hosts.deny) để chặn địa chỉ IP của kẻ tấn công.
- Chạy các tập lệnh khi có mẫu đã cho trong một địa chỉ IP nằm ngoài đã xác định được thấy quá số lần X.
[ Bạn cũng có thể thích: Cách sử dụng Fail2ban để bảo mật máy chủ Linux của bạn ]
3. Tắt Đăng nhập Root
Theo mặc định, các hệ thống Linux được cấu hình sẵn cho phép đăng nhập từ xa ssh cho tất cả mọi người bao gồm cả người dùng root, cho phép mọi người đăng nhập trực tiếp vào hệ thống và có quyền truy cập root. Bất chấp việc rằng máy chủ ssh cho phép một cách an toàn hơn để vô hiệu hóa hoặc kích hoạt đăng nhập root, việc tắt đăng nhập root luôn là một ý tưởng tốt để giữ máy chủ an toàn hơn.
Có rất nhiều người cố gắng tấn công các tài khoản root qua các cuộc tấn công SSH bằng cách cung cấp tên tài khoản và mật khẩu khác nhau, một sau một. Nếu bạn là một quản trị viên hệ thống, bạn có thể kiểm tra nhật ký máy chủ ssh, nơi bạn sẽ tìm thấy một số lượng cuộc đăng nhập thất bại. Lý do chính sau việc có một số lượng cuộc đăng nhập thất bại là có mật khẩu yếu đủ và điều đó hợp lý cho hacker/ kẻ tấn công thử.
Nếu bạn có mật khẩu mạnh, thì có thể bạn an toàn, tuy nhiên, nó tốt hơn nếu bạn tắt đăng nhập root và có một tài khoản riêng thường xuyên để đăng nhập và sau đó sử dụng sudo hoặc su để có quyền truy cập root khi cần thiết.
[ Bạn cũng có thể thích: Cách vô hiệu hóa đăng nhập root SSH và hạn chế truy cập SSH trong Linux ]
4. Hiển thị Banner SSH
Đây là một trong những tính năng cổ nhất có sẵn từ đầu dự án ssh, tuy nhiên tôi hiếm khi thấy nó được sử dụng bởi bất kỳ ai. Dù sao đi nữa, tôi cảm thấy đây là một tính năng quan trọng và rất hữu ích mà tôi đã sử dụng cho tất cả các máy chủ Linux của mình.
Điều này không phải vì mục đích bảo mật, nhưng lợi ích lớn nhất của banner này là nó được sử dụng để hiển thị thông báo cảnh báo ssh cho các truy cập không được ủy quyền và thông báo chào mừng đến người dùng được ủy quyền trước gợi ý mật khẩu và sau khi người dùng đã đăng nhập.
5. Đăng nhập không cần mật khẩu SSH
Đăng nhập không cần mật khẩu SSH bằng SSH keygen sẽ thiết lập một mối quan hệ tin tưởng giữa hai máy chủ Linux, giúp việc chuyển file và đồng bộ hóa dễ dàng hơn.
Điều này rất hữu ích nếu bạn đang xử lý sao lưu tự động từ xa, thực thi tập lệnh từ xa, chuyển file, quản lý tập lệnh từ xa v.v mà không cần nhập mật khẩu mỗi lần.