Bảo vệ máy chủ Linux. Đầu tiên phải làm gì

Bảo vệ máy chủ Linux. Đầu tiên phải làm gì
Habib M'henni/Wikimedia Commons, CC BY-SA

Ngày nay, việc nâng cấp một máy chủ trên một dịch vụ lưu trữ chỉ mất vài phút và vài cú click chuột. Nhưng ngay sau khi ra mắt, anh ấy thấy mình ở trong một môi trường thù địch, bởi vì anh ấy cởi mở với toàn bộ Internet như một cô gái ngây thơ trong một vũ trường rocker. Máy quét sẽ nhanh chóng tìm thấy nó và phát hiện hàng nghìn bot được viết kịch bản tự động rà soát mạng để tìm lỗ hổng và cấu hình sai. Có một số điều bạn nên làm ngay sau khi khởi chạy để đảm bảo bảo vệ cơ bản.

nội dung

Người dùng không root

Bước đầu tiên là tạo một người dùng không root cho chính bạn. Vấn đề là người dùng root các đặc quyền tuyệt đối trong hệ thống và nếu bạn cho phép anh ta quản trị từ xa, thì bạn sẽ làm được một nửa công việc cho tin tặc, để lại tên người dùng hợp lệ cho anh ta.

Do đó, bạn cần tạo một người dùng khác và tắt quản trị từ xa qua SSH cho root.

Một người dùng mới được bắt đầu bằng lệnh useradd:

useradd [options] <username>

Sau đó, một mật khẩu được thêm cho nó bằng lệnh passwd:

passwd <username>

Cuối cùng, người dùng này cần được thêm vào một nhóm có quyền thực thi các lệnh nâng cao sudo. Tùy thuộc vào bản phân phối Linux, đây có thể là các nhóm khác nhau. Ví dụ: trong CentOS và Red Hat, người dùng được thêm vào nhóm wheel:

usermod -aG wheel <username>

Trong Ubuntu, nó được thêm vào nhóm sudo:

usermod -aG sudo <username>

Khóa thay vì mật khẩu SSH

Rò rỉ mật khẩu hoặc brute force là một vectơ tấn công tiêu chuẩn, vì vậy tốt nhất bạn nên tắt xác thực mật khẩu trong SSH (Secure Shell) và thay vào đó sử dụng xác thực khóa.

Có nhiều chương trình khác nhau để triển khai giao thức SSH, chẳng hạn như lsh и dropbear, nhưng phổ biến nhất là OpenSSH. Cài đặt ứng dụng khách OpenSSH trên Ubuntu:

sudo apt install openssh-client

Cài đặt máy chủ:

sudo apt install openssh-server

Bắt đầu daemon SSH (sshd) trên máy chủ Ubuntu:

sudo systemctl start sshd

Tự động khởi động daemon trên mỗi lần khởi động:

sudo systemctl enable sshd

Cần lưu ý rằng phần máy chủ của OpenSSH bao gồm phần máy khách. Tức là thông qua openssh-server bạn có thể kết nối với các máy chủ khác. Ngoài ra, từ máy khách của bạn, bạn có thể bắt đầu một đường hầm SSH từ máy chủ từ xa đến máy chủ của bên thứ ba, sau đó máy chủ của bên thứ ba sẽ coi máy chủ từ xa là nguồn yêu cầu. Một tính năng rất tiện dụng để che giấu hệ thống của bạn. Xem bài viết để biết chi tiết "Mẹo thực tế, ví dụ và đường hầm SSH".

Trên máy khách, thường không có ý nghĩa gì khi cài đặt một máy chủ chính thức để ngăn khả năng kết nối từ xa với máy tính (vì lý do bảo mật).

Vì vậy, đối với người dùng mới của bạn, trước tiên bạn cần tạo khóa SSH trên máy tính mà bạn sẽ truy cập máy chủ:

ssh-keygen -t rsa

Khóa công khai được lưu trữ trong một tệp .pub và trông giống như một chuỗi các ký tự ngẫu nhiên bắt đầu bằng ssh-rsa.

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ3GIJzTX7J6zsCrywcjAM/7Kq3O9ZIvDw2OFOSXAFVqilSFNkHlefm1iMtPeqsIBp2t9cbGUf55xNDULz/bD/4BCV43yZ5lh0cUYuXALg9NI29ui7PEGReXjSpNwUD6ceN/78YOK41KAcecq+SS0bJ4b4amKZIJG3JWm49NWvoo0hdM71sblF956IXY3cRLcTjPlQ84mChKL1X7+D645c7O4Z1N3KtL7l5nVKSG81ejkeZsGFzJFNqvr5DuHdDL5FAudW23me3BDmrM9ifUmt1a00mWci/1qUlaVFft085yvVq7KZbF2OP2NQACUkwfwh+iSTP username@hostname

Sau đó, từ quyền root, tạo một thư mục SSH trên máy chủ trong thư mục chính của người dùng và thêm khóa công khai SSH vào tệp authorized_keys, sử dụng trình soạn thảo văn bản như Vim:

mkdir -p /home/user_name/.ssh && touch /home/user_name/.ssh/authorized_keys

vim /home/user_name/.ssh/authorized_keys

Cuối cùng, đặt quyền chính xác cho tệp:

chmod 700 /home/user_name/.ssh && chmod 600 /home/user_name/.ssh/authorized_keys

và thay đổi quyền sở hữu cho người dùng này:

chown -R username:username /home/username/.ssh

Về phía khách hàng, bạn cần chỉ định vị trí của khóa bí mật để xác thực:

ssh-add DIR_PATH/keylocation

Bây giờ bạn có thể đăng nhập vào máy chủ dưới tên người dùng bằng khóa này:

ssh [username]@hostname

Sau khi cấp quyền, bạn có thể sử dụng lệnh scp để sao chép tệp, tiện ích sshfs để gắn từ xa một hệ thống tệp hoặc thư mục.

Bạn nên tạo một số bản sao dự phòng của khóa riêng, vì nếu bạn tắt xác thực mật khẩu và làm mất nó, thì bạn sẽ không có cách nào để đăng nhập vào máy chủ của chính mình.

Như đã đề cập ở trên, trong SSH, bạn cần tắt xác thực cho root (đây là lý do chúng tôi bắt đầu một người dùng mới).

Trên CentOS/Red Hat, chúng tôi tìm thấy dòng PermitRootLogin yes trong tập tin cấu hình /etc/ssh/sshd_config và thay đổi nó:

PermitRootLogin no

Trên Ubuntu thêm dòng PermitRootLogin no vào tập tin cấu hình 10-my-sshd-settings.conf:

sudo echo "PermitRootLogin no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf

Sau khi xác minh rằng người dùng mới đang xác thực bằng khóa của họ, bạn có thể tắt xác thực mật khẩu để loại bỏ nguy cơ rò rỉ mật khẩu hoặc bạo lực. Bây giờ, để truy cập vào máy chủ, kẻ tấn công sẽ cần lấy khóa riêng.

Trên CentOS/Red Hat, chúng tôi tìm thấy dòng PasswordAuthentication yes trong tập tin cấu hình /etc/ssh/sshd_config và thay đổi nó như thế này:

PasswordAuthentication no

Trên Ubuntu thêm dòng PasswordAuthentication no nộp 10-my-sshd-settings.conf:

sudo echo "PasswordAuthentication no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf

Để biết hướng dẫn về cách bật xác thực hai yếu tố qua SSH, hãy xem đây.

Bức tường lửa

Tường lửa đảm bảo rằng chỉ lưu lượng truy cập trên các cổng mà bạn trực tiếp cho phép mới đi đến máy chủ. Điều này bảo vệ chống lại việc khai thác các cổng vô tình được kích hoạt với các dịch vụ khác, giúp giảm đáng kể bề mặt tấn công.

Trước khi cài đặt tường lửa, bạn cần đảm bảo rằng SSH được đưa vào danh sách loại trừ và sẽ không bị chặn. Nếu không, sau khi khởi động tường lửa, chúng tôi sẽ không thể kết nối với máy chủ.

Bản phân phối Ubuntu đi kèm với Tường lửa không phức tạp () và với CentOS/Red Hat - tường lửa.

Cho phép SSH trong tường lửa trên Ubuntu:

sudo ufw allow ssh

Trên CentOS/Red Hat, sử dụng lệnh firewall-cmd:

sudo firewall-cmd --zone=public --add-service=ssh --permanent

Sau thủ tục này, bạn có thể khởi động tường lửa.

Trên CentOS/Red Hat, khởi động dịch vụ systemd cho tường lửa:

sudo systemctl start firewalld
sudo systemctl enable firewalld

Trên Ubuntu, chúng tôi sử dụng lệnh sau:

sudo ufw enable

Fail2Ban

Dịch vụ Fail2Ban phân tích nhật ký trên máy chủ và đếm số lần truy cập từ mỗi địa chỉ IP. Cài đặt chỉ định các quy tắc về số lần truy cập được phép trong một khoảng thời gian nhất định - sau đó địa chỉ IP này bị chặn trong một khoảng thời gian nhất định. Ví dụ: hãy cho phép 5 lần thử xác thực SSH không thành công trong vòng 2 giờ, sau đó chặn địa chỉ IP đã cho trong 12 giờ.

Cài đặt Fail2Ban trên CentOS và Red Hat:

sudo yum install fail2ban

Cài đặt trên Ubuntu và Debian:

sudo apt install fail2ban

Phóng:

systemctl start fail2ban
systemctl enable fail2ban

Chương trình có hai tệp cấu hình: /etc/fail2ban/fail2ban.conf и /etc/fail2ban/jail.conf. Các hạn chế cấm được chỉ định trong tệp thứ hai.

Jail for SSH được bật theo mặc định với cài đặt mặc định (5 lần thử, khoảng thời gian 10 phút, lệnh cấm trong 10 phút).

[MẶC ĐỊNH] ignorecommand=bantime=10m findtime=10m maxretry=5

Ngoài SSH, Fail2Ban có thể bảo vệ các dịch vụ khác trên máy chủ web nginx hoặc Apache.

Cập nhật bảo mật tự động

Như bạn đã biết, các lỗ hổng mới liên tục được tìm thấy trong tất cả các chương trình. Sau khi thông tin được công bố, các khai thác được thêm vào các gói khai thác phổ biến, được tin tặc và thanh thiếu niên sử dụng ồ ạt khi quét tất cả các máy chủ liên tiếp. Vì vậy, điều rất quan trọng là phải cài đặt các bản cập nhật bảo mật ngay khi chúng xuất hiện.

Trên máy chủ Ubuntu, cập nhật bảo mật tự động được bật theo mặc định, vì vậy bạn không cần thực hiện thêm hành động nào.

Trên CentOS/Red Hat bạn cần cài đặt ứng dụng dnf-tự động và bật hẹn giờ:

sudo dnf upgrade
sudo dnf install dnf-automatic -y
sudo systemctl enable --now dnf-automatic.timer

Kiểm tra hẹn giờ:

sudo systemctl status dnf-automatic.timer

Thay đổi các cổng mặc định

SSH được phát triển vào năm 1995 để thay thế telnet (cổng 23) và ftp (cổng 21) nên tác giả của chương trình, Tatu Iltonen đã chọn cổng 22 theo mặc định, và đã được IANA chấp thuận.

Đương nhiên, tất cả những kẻ tấn công đều biết SSH đang chạy trên cổng nào - và quét nó cùng với các cổng tiêu chuẩn còn lại để tìm ra phiên bản phần mềm, để kiểm tra mật khẩu gốc tiêu chuẩn, v.v.

Thay đổi cổng tiêu chuẩn - obfuscation - nhiều lần làm giảm lưu lượng rác, kích thước của nhật ký và tải trên máy chủ, đồng thời cũng làm giảm bề mặt tấn công. Mặc dù một vài chỉ trích phương pháp "bảo vệ thông qua che khuất" này (An ninh thông qua sự tối tăm). Lý do là kỹ thuật này trái ngược với nguyên tắc cơ bản bảo vệ kiến ​​trúc. Do đó, ví dụ, Viện Tiêu chuẩn và Công nghệ Quốc gia Hoa Kỳ tại "Hướng dẫn bảo mật máy chủ" chỉ ra sự cần thiết của một kiến ​​trúc máy chủ mở: “Tính bảo mật của một hệ thống không nên dựa vào tính bí mật của việc triển khai các thành phần của nó,” tài liệu cho biết.

Về mặt lý thuyết, việc thay đổi các cổng mặc định là trái với thực tế của kiến ​​trúc mở. Nhưng trong thực tế, lượng lưu lượng độc hại thực sự giảm, vì vậy đây là một biện pháp đơn giản và hiệu quả.

Số cổng có thể được cấu hình bằng cách thay đổi chỉ thị Port 22 trong tập tin cấu hình / etc / ssh / sshd_config. Nó cũng được biểu thị bằng tham số -p <port> в sshd. Máy khách và chương trình SSH sftp cũng hỗ trợ tùy chọn -p <port>.

Thông số -p <port> có thể được sử dụng để chỉ định số cổng khi kết nối với lệnh ssh trong linux. TRONG sftp и scp tham số được sử dụng -P <port> (chữ P viết hoa). Hướng dẫn dòng lệnh sẽ ghi đè bất kỳ giá trị nào trong tệp cấu hình.

Nếu có nhiều máy chủ, hầu như tất cả các hành động này để bảo vệ máy chủ Linux đều có thể được tự động hóa trong một tập lệnh. Nhưng nếu chỉ có một máy chủ, thì tốt hơn là kiểm soát quy trình theo cách thủ công.

Như một quảng cáo

Đặt hàng và bắt đầu ngay lập tức! Tạo VDS bất kỳ cấu hình nào và với bất kỳ hệ điều hành nào trong vòng một phút. Cấu hình tối đa sẽ cho phép bạn sử dụng hết mức - 128 lõi CPU, RAM 512 GB, NVMe 4000 GB. Sử thi 🙂

Bảo vệ máy chủ Linux. Đầu tiên phải làm gì

Nguồn: www.habr.com