Bảo mật căn bản cho VPS

Trước đây thì mình hoàn toàn không bao giờ quan tâm bước này, vì mặc định dùng Cloudflare, sẽ rất khó để biết IP thực của server để mà phá, giờ dùng VPS Việt Nam, IP trần lộ ra, nên cũng set ít bước căn bản, gọi là nhà có khóa cửa, đi vắng cũng an tâm hơn 1 tẹo 😀

Demo cho bài này mình dùng trên Ubuntu 22.04, các OS khác cơ bản cũng na ná thế

1. Login bằng khóa SSH và đổi lại port mặc định

Thường khi bạn tạo 1 VPS mới ở các nhà cung cấp lớn như AWS, Google, Oracle …. đa phần hiện tại đều dùng khóa cứng cho SSH, trong đó khóa public .pub được gắn sẵn trên server, khóa private .key thì dùng để login phía máy khách

  • Tạo thủ công 1 cặp khóa nếu chưa dùng bao giờ
ssh-keygen -o -a 150 -t ed25519

Tạo xong sẽ có 2 file id_ed25519.pubid_ed25519 nằm trong thư mục /root/.ssh

Cá nhân mình khá thích hình thức này, đơn giản là không phải nhớ nhiều, đỡ mệt 😀

Port mặc định 22 thường hay bị các tool auto scan, đổi sang port khác để đỡ thấy các request rác

Do hiện tại mình đang dùng các OS ngoài qua hình thức reinstall, nên thường bị reset về password mặc định, cần add lại khóa khóa public lên lại

  • Bạn có thể mở file /root/.ssh/authorized_keys, chép trực tiếp nội dung khóa .pub vào

Tiếp theo gõ

sudo nano /etc/ssh/sshd_config
  • Port 22 mặc định nên đổi thành 1 port khác, 2224 chẳng hạn
  • PermitRootLogin yes -> tắt đi, bằng cách thêm dấu # phía trước
  • PasswordAuthentication yes -> tắt đi, bằng cách thêm dấu # phía trước

Ctrl+O -> Enter -> Ctrl+X để save và exit

Gõ tiếp lệnh sau để khởi động lại ssh:

sudo service sshd restart

Lúc này bạn có thể dùng SSH key và port mới để login vào VPS

Cách này giúp bạn tránh các tool scan là chính, hiệu quả liên quan tới bảo mật thì mình không quá chắc 😀 thường server bị hack, rất hiếm khi do lỗi lộ password, đa phần mình gặp là các plugin WordPress bị lỗi, hoặc dùng các cấu hình docker-compose mặc định, làm lộ thông tin database, củ chuối nhất là bản docker bị lỗi ngay từ đầu …. còn xác xuất ai đó hack được tài khoản root của VPS thì tỷ lệ siêu nhỏ, thường gặp ở các cuộc tấn công chủ đích, trên thèng bibica.net, 1 blog cá nhân, người thường còn không thèm vào, nữa là ai chủ động tấn công 😀

Theo mình khoản login VPS làm căn bản thế cũng tương đối rồi

2. Bật Firewall trên OS

Đây cũng là hình thức mình không làm bao giờ 😀 tương tự lý do đã nói ở trên, vì mình thấy firewall từ OS rất yếu, mình thích dùng firewall từ các nhà cung cấp VPS hoặc Cloudflare hơn, ngoài chuyện có giao diện web dễ nhìn, nó sẽ chặn các request từ bên ngoài, trước khi tới được VPS, hiệu quả hơn

Khoản firewall trên OS thì mình mù tịt, Google xem hướng dẫn theo bài tại Digitalocean thôi

  • Cài đặt UFW
sudo apt install ufw
  • Kiểm tra các port đang hoạt động
sudo ufw show listening
  • Sẽ hiện ra tương tự như sau
tcp:
  22222 * (nginx)
  2224 * (sshd)
  3000 * (docker-proxy)
  443 * (nginx)
  5001 * (docker-proxy)
  51821 * (docker-proxy)
  80 * (nginx)
  8181 * (docker-proxy)
tcp6:
  22222 * (nginx)
  2224 * (sshd)
  443 * (nginx)
  80 * (nginx)
udp:
  51820 * (docker-proxy)

Lúc này bạn đã có các port khá cơ bản để có thể set các rule

  • Tạo các rule
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22222/tcp
sudo ufw allow 2224/tcp
sudo ufw allow 3000/tcp
sudo ufw allow 8000/tcp
sudo ufw allow 443/tcp
sudo ufw allow 5001/tcp
sudo ufw allow 51821/tcp
sudo ufw allow 80/tcp
sudo ufw allow 8181/tcp
sudo ufw allow 51820/udp
  1. Mặc định chặn tất cả kết nối tới VPS
  2. Mặc định cho phép VPS kết nối ra ngoài
  3. Cho phép kết nối tới VPS qua port 22222, 2224, 443, 3000, 5001, 80 ….

Nếu không biết chính xác port cần mở nó là tcp hay udp thì bạn bỏ thông số đó luôn cũng được, sudo ufw allow 443 chẳng hạn

  • Chặn port 22, 25
sudo ufw deny 22
sudo ufw deny 25

2 rule này mặc định không cần thêm, vì theo rule đầu tiên deny incoming là nó đã chặn mọi port rồi, không mở ra là đã tự chặn

Mình thêm vào để demo ý chặn port 😀

  • Bật UFW để các rule có hiệu lực
sudo ufw enable
  • Kiểm tra các rule đang sử dụng
sudo ufw status verbose
  • Nếu bạn cũng lần đầu sử dụng firewall như mình, đa phần ta khá lú các rule, nên chỉ cần nhớ điểm quan trọng, là mở port SSH để có thể login vào VPS, sau đó nếu set sai, thừa, thiếu … đơn giản nhất là chạy lệnh reset, rồi làm lại từ đầu
sudo ufw reset

Xjbkwa0

Ban đầu mình cũng không quá chắc hiệu quả firewall từ OS nhưng khi xem status từ Releem thì thấy cải thiện khá nhiều

CPU khi chưa chạy firewall, biên độ dao động khá loạn, min max giật liên tục, sau khi set lại các rule, CPU giao động khá nhẹ, trừ thời điểm 0 ->3h sáng mình cho chạy ít tool backup, CPU lên cao 1 chút, còn lại chạy khá ổn định

Tổng kết

Nếu bạn dùng Cloudflare, và nhà cung cấp VPS có hệ thống firewall riêng thì tối ưu hơn, còn chỉ cấu hình trực tiếp trên VPS như này, hiệu quả không cao, căn bản gọi là nhà cũng có khóa cửa 😀 tránh các trộm vặt, trộm vãng lai là chính 😀 chứ cướp vào nhà thì nó phá khóa như ăn kẹo cả :]]

Comment policy: We love comments and appreciate the time that readers spend to share ideas and give feedback.
Notes: However, those deemed to be spam or solely promotional will be deleted.

You can create a Gravatar account, add avatar, then use that email to comment here, your account will have a more beautiful Avatar, easier to recognize with other members.

Please use real emails, you can receive notifications when comments are replied