Vì quyền truy cập SSH là điểm vào quan trọng nhất để quản trị máy chủ của bạn, nó đã trở thành một vectơ tấn công được sử dụng rộng rãi.
Các bước cơ bản để bảo mật SSH bao gồm: vô hiệu hóa quyền truy cập root, tắt hoàn toàn xác thực mật khẩu (và sử dụng khóa thay thế) và thay đổi cổng (ít liên quan đến bảo mật ngoại trừ giảm thiểu trình quét cổng thông thường và spam nhật ký).
Bước tiếp theo sẽ là một giải pháp tường lửa PF với theo dõi kết nối. Giải pháp này sẽ quản lý trạng thái kết nối và chặn bất kỳ IP nào có quá nhiều kết nối. Điều này hoạt động rất tốt và rất dễ thực hiện với PF, nhưng trình nền SSH vẫn tiếp xúc với Internet.
Làm thế nào về việc làm cho SSH hoàn toàn không thể truy cập từ bên ngoài? Đây là nơi spiped đến. Từ trang chủ:
Spiped (phát âm là "ess-pipe-dee") là một tiện ích để tạo các đường ống được xác thực và mã hóa đối xứng giữa các địa chỉ ổ cắm, để người ta có thể kết nối với một địa chỉ (ví dụ, ổ cắm UNIX trên localhost) và trong suốt có kết nối được thiết lập với một địa chỉ khác địa chỉ (ví dụ, một ổ cắm UNIX trên một hệ thống khác). Điều này tương tự như chức năng 'ssh -L', nhưng không sử dụng SSH và yêu cầu khóa đối xứng được chia sẻ trước.
Tuyệt quá! May mắn cho chúng tôi, nó có gói OpenBSD chất lượng cao, thực hiện tất cả các công việc chuẩn bị cho chúng tôi, vì vậy chúng tôi có thể bắt đầu bằng cách cài đặt nó:
sudo pkg_add spiped
Điều này cũng cài đặt một tập lệnh init đẹp cho chúng tôi, vì vậy chúng tôi có thể tiếp tục và kích hoạt nó:
sudo rcctl enable spiped
Và cuối cùng bắt đầu nó:
sudo rcctl start spiped
Tập lệnh init đảm bảo rằng khóa được tạo cho chúng ta (mà chúng ta sẽ cần trên một máy cục bộ trong một lát).
Những gì chúng ta cần làm bây giờ, là vô hiệu hóa sshd
việc nghe trên địa chỉ công cộng, chặn cổng 22 và cho phép cổng 8022 (theo mặc định được sử dụng trong tập lệnh init spiped).
Mở /etc/ssh/sshd_config
tệp và thay đổi (và bỏ ghi chú) ListenAddress
dòng cần đọc 127.0.0.1
:
ListenAddress 127.0.0.1
Nếu bạn đang sử dụng quy tắc PF để chặn cổng, hãy đảm bảo vượt qua cổng 8022 (và bạn có thể để cổng 22 bị chặn), ví dụ:
pass in on egress proto tcp from any to any port 8022
Hãy chắc chắn tải lại các quy tắc để làm cho nó hoạt động:
sudo pfctl -f /etc/pf.conf
Bây giờ, tất cả những gì chúng ta cần là sao chép khóa spiped được tạo ( /etc/spiped/spiped.key
) từ máy chủ sang máy cục bộ và điều chỉnh cấu hình SSH của chúng tôi, một số dòng sau:
Host HOSTNAME
ProxyCommand spipe -t %h:8022 -k ~/.ssh/spiped.key
Bạn cũng cần phải spipe/spiped
cài đặt trên một máy cục bộ. Nếu bạn đã sao chép khóa và điều chỉnh tên / đường dẫn, thì bạn sẽ có thể kết nối với ProxyCommand
dòng đó trong ~/.ssh/config
tệp của mình .
Sau khi bạn xác nhận rằng nó hoạt động, chúng tôi có thể khởi động lại sshd
trên máy chủ:
sudo rcctl restart sshd
Và đó là nó! Bây giờ bạn đã loại bỏ hoàn toàn một vectơ tấn công lớn và bạn có một dịch vụ ít nghe hơn trên giao diện công cộng. Các kết nối SSH của bạn bây giờ dường như đến từ localhost, ví dụ:
username ttyp0 localhost Thu Nov 06 07:58 still logged in
Một lợi ích khi sử dụng Vultr là mỗi VPS Vultr cung cấp một ứng dụng khách kiểu VNC trực tuyến có sẵn mà chúng tôi có thể sử dụng trong trường hợp chúng tôi vô tình tự khóa. Thử nghiệm đi!