VPS

Bảo mật máy dev từ xa: bảy việc làm ngay

Thanh Nguyễn Đăng 9 phút đọc 5 khối lệnh

Bảo mật máy dev từ xa: bảy việc làm ngay
Mục lục bài viết
  1. Bốn việc chặn dò quét tự động
  2. Ba việc riêng của máy dev
  3. File môi trường, chỗ nguy hiểm nhất
  4. Nếu nhiều người dùng chung máy
  5. Cách gọn nhất: đừng mở ra internet
  6. Bảy việc, theo thứ tự ưu tiên
  7. Tệp môi trường, chỗ nguy hiểm nhất trên máy làm việc
  8. Đơn giản hơn cả: đừng cho máy có địa chỉ công khai
  9. Câu hỏi thường gặp
  10. Bài viết liên quan

Trả lời nhanh: Máy dùng cho remote development nguy hiểm hơn máy chủ web thông thường ở một điểm: nó chứa mã nguồn, khóa SSH tới các máy khác, thông tin đăng nhập kho mã nguồn và đôi khi cả file môi trường có mật khẩu database. Chiếm được nó là chiếm được nhiều thứ khác. Bảy việc dưới đây mất khoảng ba mươi phút và chặn gần hết các đợt tấn công tự động: khóa SSH, tắt mật khẩu, tường lửa, cập nhật tự động, chặn dò quét, giới hạn dịch vụ mở ra ngoài, và sao lưu.

Máy chủ nào mở ra internet cũng bị dò quét trong vòng vài giờ đầu. Với máy dev, hậu quả của việc bị chiếm nặng hơn máy chủ web bình thường, vì nó là điểm trung chuyển tới mọi hệ thống khác của bạn. Bài này là danh sách bảy việc làm ngay trong ngày đầu nhận máy.

Bốn việc chặn dò quét tự động

Một, dùng khóa SSH và tắt đăng nhập mật khẩu. Đây là việc hiệu quả nhất, làm mọi đợt dò mật khẩu trở nên vô nghĩa. Cách làm ở bài về khóa SSH.

Hai, bật tường lửa và chỉ mở cổng cần thiết.

TerminalBốn việc chặn dò quét tự độngbash
sudo ufw default deny incomingsudo ufw default allow outgoingsudo ufw allow 22/tcpsudo ufw enable

Ba, bật cập nhật bảo mật tự động. Vá lỗi bảo mật là việc không nên phụ thuộc vào trí nhớ của bạn.

TerminalBốn việc chặn dò quét tự độngbash
sudo apt install -y unattended-upgradessudo dpkg-reconfigure --priority=low unattended-upgrades

Bốn, chặn địa chỉ dò quét liên tục bằng công cụ theo dõi nhật ký và tự chặn sau nhiều lần thử sai. Với máy đã tắt đăng nhập mật khẩu thì đây là lớp bổ sung, nhưng nó cũng giảm rác trong nhật ký.

Ba việc riêng của máy dev

Năm, đừng để dịch vụ phát triển nghe ra internet. Máy chủ phát triển của các framework thường nghe ở mọi địa chỉ theo mặc định, và chúng không được thiết kế để đối mặt với internet.

TerminalBa việc riêng của máy devbash
# Sai: nghe moi dia chinpm run dev -- --host 0.0.0.0 # Dung: chi nghe trong may, truy cap qua chuyen tiep cong SSHnpm run devssh -L 3000:127.0.0.1:3000 may-cua-toi

Cách chuyển tiếp cổng qua SSH cho bạn xem trang thử ngay trên trình duyệt máy mình mà không mở gì ra internet.

Sáu, khóa riêng chỉ nằm trên máy bạn. Đừng chép khóa SSH riêng lên máy dev để từ đó vào máy khác. Dùng cơ chế nhảy qua máy trung gian trong bài về file cấu hình SSH.

Bảy, sao lưu. Mã nguồn đã đẩy lên kho từ xa thì an toàn, nhưng cấu hình máy và những thứ chưa commit thì không. Xem bài về chu kỳ sao lưu.

File môi trường, chỗ nguy hiểm nhất

Đây là thứ khiến máy dev nguy hiểm hơn hẳn máy chủ web. File môi trường của các dự án thường chứa mật khẩu database, khóa API, thông tin cổng thanh toán. Chúng nằm rải rác trong các thư mục dự án và thường không ai để ý.

Ba việc:

  • Đặt quyền chặt cho file môi trường: chỉ chủ sở hữu đọc được.
  • Trên máy dev chỉ để thông tin của môi trường phát triển, không để thông tin của hệ thống thật. Nếu bạn cần thử với dữ liệu thật, hãy dùng bản sao đã che thông tin theo bài về máy chủ thử nghiệm.
  • Rà định kỳ các thư mục dự án cũ và xóa những dự án không còn làm. Chúng vẫn giữ nguyên khóa cũ của bạn.

Điểm cuối là chỗ nhiều người bỏ qua: một dự án làm xong từ năm ngoái vẫn nằm trên máy với đầy đủ khóa truy cập, và không ai nhớ tới nó nữa.

Nếu nhiều người dùng chung máy

Với máy dev dùng chung cho cả đội, thêm bốn việc:

  • Mỗi người một tài khoản hệ thống, không dùng chung một tài khoản. Nhờ vậy nhật ký cho biết ai làm gì.
  • Không cấp quyền quản trị đại trà. Chỉ cấp cho người thật sự cần và cho từng lệnh cụ thể.
  • Gỡ tài khoản ngay khi có người rời đội, kèm gỡ khóa SSH của họ khỏi mọi máy.
  • Ghi lại ai có quyền vào máy nào, vì sau một năm không ai nhớ nổi.

Một cách tổ chức gọn hơn cho đội đông: mỗi người một máy nhỏ riêng thay vì dùng chung một máy lớn. Chi phí không chênh nhiều mà ranh giới rõ ràng, và một người gặp sự cố không kéo theo cả đội.

Cách gọn nhất: đừng mở ra internet

Bảy việc trên là để bảo vệ một máy có mặt trên internet. Nhưng có một cách đơn giản hơn tất cả: đừng để nó có mặt ở đó.

Với mạng riêng như trong bài Tailscale, máy dev của bạn không mở cổng nào ra internet công cộng. Nó chỉ nhận kết nối từ các thiết bị đã được cấp phép trong mạng riêng của bạn.

Khi đó phần lớn rủi ro biến mất: không có gì để dò quét, không có đợt tấn công tự động nào chạm tới. Bạn vẫn nên làm các việc còn lại như cập nhật tự động và sao lưu, nhưng bề mặt tấn công đã nhỏ hơn rất nhiều.

Đây là cách bố trí đáng cân nhắc ngay từ ngày đầu, thay vì dựng máy mở ra internet rồi mới đi vá từng chỗ.

Bảy việc, theo thứ tự ưu tiên

TerminalBảy việc, theo thứ tự ưu tiênbash
# 1. Chi dang nhap bang khoa, tat dang nhap mat khaused -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_configsed -i 's/^#\?PermitRootLogin.*/PermitRootLogin prohibit-password/' /etc/ssh/sshd_configsshd -t && systemctl restart sshd # 2. Bat tuong lua, chi mo cong can thietufw default deny incoming && ufw allow 22/tcp && ufw enableufw status verbose # 3. Cai cong cu chan do mat khau tu dongapt install -y fail2ban && systemctl enable --now fail2banfail2ban-client status sshd # 4. Bat cap nhat bao mat tu dongapt install -y unattended-upgradesdpkg-reconfigure -plow unattended-upgrades # 5. Tao nguoi dung rieng, khong lam viec bang tai khoan goc # 6. Kiem cong nao dang mo ra internetss -ltnp | grep -v 127.0.0.1 # 7. Xem ai da thu dang nhap trong 24 gio quagrep "Failed password" /var/log/auth.log | tail -20grep "Accepted publickey" /var/log/auth.log | tail -10

Tệp môi trường, chỗ nguy hiểm nhất trên máy làm việc

  • Máy làm việc thường chứa khóa của nhiều dịch vụ: cơ sở dữ liệu, dịch vụ thanh toán, dịch vụ mô hình AI, kho mã nguồn. Đây là mục tiêu giá trị hơn nhiều so với một máy chủ web thông thường.
  • Đặt quyền chặt cho tệp môi trường để chỉ chủ sở hữu đọc được.
  • Không đặt khóa của môi trường thật trên máy làm việc. Dùng khóa chế độ thử.
  • Quét kho mã nguồn trước mỗi lần đẩy lên, tìm khóa lọt vào.
TerminalTệp môi trường, chỗ nguy hiểm nhất trên máy làm việcbash
chmod 600 .envgrep -rn "sk-\|api_key\|password\|BEGIN.*PRIVATE KEY" --exclude-dir=.git . | head -20

Đơn giản hơn cả: đừng cho máy có địa chỉ công khai

Bảy việc ở trên là để bảo vệ một máy có địa chỉ công khai. Nhưng có cách đơn giản hơn nhiều: đặt máy làm việc trong một mạng riêng và không mở cổng nào ra internet. Khi đó công cụ dò quét tự động không tìm thấy máy của bạn, và phần lớn rủi ro biến mất.

Với đội nhỏ, đây thường là bố trí đúng: máy làm việc chỉ vào được qua mạng riêng, còn máy chủ phục vụ khách thì mới mở ra internet. Xem bài về dựng mạng riêng.

Câu hỏi thường gặp

Máy dev có cần bảo mật chặt như máy chủ thật không?

Chặt hơn ở một số mặt, vì nó chứa mã nguồn và khóa truy cập tới các hệ thống khác. Chiếm được máy dev thường cho kẻ tấn công nhiều thứ hơn là chiếm một máy chủ web đơn lẻ.

Chạy máy chủ phát triển ra internet có sao không?

Có. Máy chủ phát triển không được thiết kế để đối mặt internet, thường bật nhiều thông tin gỡ lỗi và không có lớp bảo vệ nào. Hãy chỉ cho nó nghe trong máy và dùng chuyển tiếp cổng qua SSH.

Có nên chép khóa SSH lên máy dev không?

Không. Dùng cơ chế nhảy qua máy trung gian để khóa riêng luôn nằm trên máy cá nhân của bạn. Chép khóa lên máy khác là đánh mất ý nghĩa của việc dùng khóa.

Bảy việc này mất bao lâu?

Khoảng ba mươi phút cho lần đầu, và nhanh hơn nhiều ở những máy sau khi bạn đã có script. Đây là khoản đầu tư rẻ nhất so với hậu quả của việc bị chiếm máy.

Chia sẻ:Facebook

Thanh Nguyễn

TND

Tư vấn bản quyền, VPS và máy chủ kèm hóa đơn VAT, hợp đồng đầy đủ cho doanh nghiệp.