1. Bảo mật máy chủ Ubuntu
I. Cập nhập hệ điều hành
Các bản cập nhập có thể bao gồm các bản sửa lỗi, tính năng mới và cải tiến bảo mật, cải thiện hiệu suất …
sudo apt-get update -y && sudo apt-get upgrade -y
sudo apt-get autoremove
sudo apt-get autoclean
II. Sử dụng tài khoản non-root
sudo adduser test # Tạo tk với tên user là test
sudo usermod -aG sudo test # add user test vào nhóm sudo
sudo su - test # đăng nhập user test
whoami
III. Đổi Port máy chủ Linux
– Sửa đổi file sshd_config
sudo nano /etc/ssh/sshd_config
– Tìm đến dòng chứa thông tin Port (mặc định Port 22) Thay thế số 22 bằng bất kỳ giá trị nào từ 1024 đến 65536, xóa biểu tượng # trước Port nếu có
– Lưu và thóat file sshd_config
– Khởi động lại dịch vụ SSH
sudo systemctl restart ssh
– Cấu hình lại tường lửa
sudo ufw allow <PORT_NUMBER>/tcp
sudo ufw reload
– Test lại SSH có hoạt động với port mới không
ssh test@server.public.ip.address -p <PORT_NUMBER>
IV. Sử dụng SSH keys
– Bạn có thể chọn 1 trong 2 kiểu mã hóa dưới này
# Mã hóa RSA
ssh-keygen -t rsa -b 4096
# Mã Hóa ed25519
ssh-keygen -t ed25519
– Chuyển khóa RSA tới server. Cập nhật lại tên khóa bằng lệnh
ssh-copy-id -i $HOME/.ssh/<keyname>.pub test@server.public.ip.address
– Đăng nhập vào máy chủ với tài khoản test
ssh test@server.public.ip.address
– Cấm tài khoản root đăng nhập.
sudo nano /etc/ssh/sshd_config
- Tìm đến dòng ChallengeResponseAuthentication và sửa thành no
- Tìm đến dòng PasswordAuthentication và sửa thành no
- Tìm đến dòng PermitRootLogin và sửa thành prohibit-password
- Tìm đến dòng PermitEmptyPasswords và sửa thành no
– Khởi động lại dịch vụ SSH
sudo systemctl restart sshd.service
– Đăng nhập lại tài khoản với khóa SSH
ssh -i <path to your SSH_key_name> cardano@server.public.ip.address -p <PORT_NUMBER>
V. Vô hiệu hóa tài khoản root
Để vô hiệu hóa tài khoản root đặng nhập, bạn sử dụng tùy chọn -l như sau:
sudo passwd -l root
Khi cần cho phép đăng nhập trở lại, hãy sử dụng tùy chọn -u như sau:
sudo passwd -u root
VI. Xác thực đa yếu tố cho SSH
1. Cài đặt
– Nâng cấp các gói phần mềm có sẵn
sudo apt-get update
– Cài đặt module Google Authentical
sudo apt-get install libpam-google-authenticator
google-authenticator
– Sau khi bạn chạy lệnh, ứng dụng sẽ hỏi một số câu hỏi.
- Do you want authentication tokens to be time-based (y/n) Y
- Do you want me to update your "~/.google_authenticator" file (y/n) Y
- Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n) Y
- By default, a new token is generated every 30 seconds by the mobile app.
In order to compensate for possible time-skew between the client and the server,
we allow an extra token before and after the current time. This allows for a
time skew of up to 30 seconds between the authentication server and client. Suppose you
experience problems with poor time synchronization. In that case, you can increase the window
from its default size of 3 permitted codes (one previous code, the current
code, the next code) to 17 permitted codes (the eight previous codes, the current
code, and the eight next codes). This will permit a time skew of up to 4 minutes
between client and server.
Do you want to do so? (y/n) N
- If the computer that you are logging into isn't hardened against brute-force
login attempts, you can enable rate-limiting for the authentication module.
By default, this limits attackers to no more than three login attempts every 30s.
Do you want to enable rate-limiting (y/n) Y
2. Cấu Hình sshd để sử dụng 2FA
– Tạo bản sao lưu sshd -sshd_config
sudo cp /etc/pam.d/sshd /etc/pam.d/sshd.bak
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
– Chỉnh sửa sshd
sudo nano /etc/pam.d/sshd
– Thêm dòng sau vào cuối tập tin
# Standard Un*x password updating.
@include common-password
auth required pam_google_authenticator.so nullok
auth required pam_permit.so
– Chỉnh sửa sshd_config
sudo nano /etc/ssh/sshd_config
# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication yes.
– Lưu và đóng tệp, sau đó khởi động lại SSH để tải lại các tệp cấu hình
sudo systemctl restart sshd.service
– Để kiểm tra xem mọi thứ có hoạt động hay không, hãy mở thiết bị đầu cuối khác và thử đăng nhập qua SSH. Điều rất quan trọng là bạn phải duy trì phiên SSH hiện tại của mình. Nếu không bạn sẽ bị khóa khỏi máy chủ của mình
3. Làm cho ssh nhận biết 2FA.
sudo nano /etc/ssh/sshd_config
# Thêm dòng sau vào cuối tập tin
AuthenticationMethods publickey,password publickey,keyboard-interactive
– Tiếp theo, mở lại tệp cấu hình sshd
sudo nano /etc/pam.d/sshd
– Tìm dòng @include common-auth và thêm # vào đầu dòng
# Standard Un*x authentication.
#@include common-auth
# Lưu và đóng tệp, sau đó khởi động lại SSH.
sudo systemctl restart sshd.service
– Bây giờ hãy thử đăng nhập lại vào máy chủ bằng một phiên/cửa sổ đầu cuối khác. Không giống như lần trước, SSH sẽ yêu cầu mã xác minh của bạn
Tham khảo thêm tại:
https://www.digitalocean.com/community/tutorials/how-to-set-up-multi-factor-authentication-for-ssh-on-ubuntu-18-04#step-3-making-ssh-aware-of-mfa
VII. Cài đặt Fail2ban
– Cài đặt
sudo apt-get install fail2ban -y
– Chỉnh sửa config
sudo nano /etc/fail2ban/jail.local
– Cấu hình bộ lọc
[sshd]
enabled = true
port = 2222
filter = sshd
bantime = 3600m
logpath = /var/log/auth.log
maxretry = 3
# whitelisted IP addresses phân biệt bởi dấu cách
ignoreip = ....duckdns.org ....duckdns.org xxx.duckdns.org xxx.xxx.xxx.xxyz
# Tạo services
sudo systemctl enable fail2ban
# Khởi động lại
sudo systemctl restart fail2ban
# Check Status
sudo systemctl status fail2ban
– Xóa Ip bị Ban
sudo iptables -L -n
sudo fail2ban-client status
fail2ban-client set YOURJAILNAMEHERE (vi du sshd) unbanip **IP**
sudo fail2ban-client set sshd unbanip xxx.xxx.xxx.xxx