Quay lại blog

Tự dựng IP proxy: khởi tạo SSH và gia cố bảo mật

Trình tự thực tế để chuẩn bị phía máy chủ cho IP proxy tự dựng: kiểm tra đăng nhập SSH trước, đổi cổng và chuyển sang xác thực bằng khóa, thực hiện gia cố cơ bản, cài dịch vụ proxy và mở cổng, rồi kết nối và kiểm tra từ máy khách.

Khi mua một máy chủ đám mây để dùng làm proxy, điểm gây vướng hiếm khi nằm ở khả năng kết nối cơ bản. Thường thì vấn đề nằm ở thứ tự chuẩn bị phía máy chủ. Làm đúng trình tự thì máy khách thường kết nối ngay lần đầu; làm lộn xộn thì phải liên tục quay lại terminal để sửa cấu hình.

Bài này chỉ nói về phía máy chủ: từ lần đăng nhập đầu tiên, siết chặt lối vào, chạy dịch vụ proxy, mở cổng, kết nối máy khách cho đến cách kiểm tra theo từng lớp khi không kết nối được.

Lần đăng nhập đầu tiên: kiểm tra lối vào trước

Sau khi tạo instance, hãy đăng nhập trước bằng terminal web có sẵn trong bảng điều khiển của nhà cung cấp, đừng phụ thuộc ngay vào công cụ cục bộ. Bước này chỉ nhằm xác nhận máy chủ đang hoạt động và mạng có thể truy cập.

Sau khi vào được, chuyển sang root bằng cách chạy sudo -i rồi nhấn Enter. Khi dấu nhắc đổi từ $ thành # thì việc nâng quyền đã thành công. Thực hiện các bước tiếp theo với danh tính này.

Tiện thể ghi lại bốn thông tin: IP công khai, tên người dùng đăng nhập (mặc định là root trên Linux), mật khẩu và cổng SSH (mặc định 22). Máy khách cần đủ bốn giá trị này; thiếu một giá trị là không kết nối được.

Đổi cổng mặc định rồi chuyển sang đăng nhập bằng khóa

Cổng 22 bị quét vô số lần mỗi ngày và các thử nghiệm đăng nhập tự động là chuyện bình thường. Đổi cổng không làm máy chủ mạnh hơn về bản chất, nhưng giúp lọc phần lớn nhiễu tự động.

Thay đổi được thực hiện trong /etc/ssh/sshd_config. Mở tệp bằng vi, nhấn i để vào chế độ chỉnh sửa, đổi hai dòng PermitRootLogin và PasswordAuthentication thành yes, sau đó nhấn Esc và nhập :wq để lưu rồi thoát. Nếu nhà cung cấp hỗ trợ đăng nhập bằng khóa, cách chắc chắn hơn là thêm khóa công khai cục bộ vào authorized_keys trên máy chủ, rồi đổi PasswordAuthentication thành no để chỉ chấp nhận khóa.

Đừng đóng phiên hiện tại ngay sau khi sửa cấu hình. Trước tiên hãy mở một cửa sổ terminal khác, đăng nhập một lần bằng cổng mới và phương thức mới, xác nhận vào được rồi mới đóng cửa sổ cũ. Nếu cấu hình sai, bạn có thể tự khóa mình bên ngoài và phải quay lại bảng điều khiển của nhà cung cấp để khôi phục.

Cổng SSH được đặt ở dòng Port. Sau khi đổi, khởi động lại dịch vụ SSH để cấu hình có hiệu lực. Trên hệ Debian và Ubuntu có thể chạy /etc/init.d/ssh restart.

Thực hiện gia cố cơ bản ngay trong ngày đầu

Ngoài đổi cổng và dùng khóa, có hai việc nhỏ nên hoàn tất trong ngày đầu. Thứ nhất, đặt cho root một mật khẩu ngẫu nhiên đủ dài bằng passwd root, không dùng tổ hợp dễ đoán. Thứ hai, tắt các dịch vụ và cổng không cần thiết. Càng ít thứ chạy trên máy, bề mặt tấn công càng nhỏ; tường lửa hệ thống chỉ nên cho phép các cổng thực sự cần dùng.

Nếu máy chủ này lâu dài chỉ phục vụ từ một vài nguồn cố định, hãy giới hạn địa chỉ nguồn trong security group vào các vị trí đó. Cách này an toàn hơn nhiều so với mở cho toàn Internet.

Cài dịch vụ proxy và cấu hình xác thực

Sau khi hoàn tất khởi tạo phía máy chủ, hãy chuyển sang chính dịch vụ proxy.

Một cách là dùng trực tiếp đường hầm SSH. Không cần cài thêm gì trên máy chủ; máy khách dùng dịch vụ SSH có sẵn của hệ thống để chuyển tiếp, với chính bộ thông tin đăng nhập của máy chủ. Cách này tiện, nhưng hiệu năng ở mức trung bình và sẽ đuối khi có nhiều kết nối đồng thời, phù hợp với nhu cầu tạm thời hoặc ít tài khoản.

Cách còn lại là cài một dịch vụ proxy chuyên dụng trên máy chủ. Thông thường chỉ cần một lệnh cài đặt, sau đó tự cấu hình phương thức xác thực và cổng lắng nghe. Nhớ bật tự khởi động cùng hệ thống; nếu không, chỉ cần máy chủ khởi động lại một lần là proxy cũng ngừng.

Có thể chia xác thực thành ba mức với độ an toàn tăng dần: tên người dùng và mật khẩu là đơn giản nhất, nhưng bị lộ thì coi như giao proxy cho người khác; mật khẩu cộng danh sách cho phép IP nguồn thường đủ dùng hằng ngày; xác thực bằng khóa hoặc chứng chỉ là chắc chắn nhất, cấu hình phức tạp hơn một chút nhưng đáng làm cho tài khoản chạy lâu dài.

Phải mở cổng ở hai nơi riêng biệt

Đây là chỗ dễ mắc nhất. Cổng lắng nghe của dịch vụ proxy phải được cho phép cả trong tường lửa hệ thống lẫn security group của nhà cung cấp. Hai nơi độc lập với nhau; chỉ mở một nơi thì vẫn không kết nối được.

Một vị trí khác dễ bị bỏ sót là địa chỉ lắng nghe của dịch vụ. Một số dịch vụ mặc định chỉ bind vào 127.0.0.1. Nếu kiểm tra ngay trên máy chủ thì được nhưng từ bên ngoài lại không vào được, nguyên nhân thường là đây. Hãy đổi địa chỉ lắng nghe thành địa chỉ nội bộ của máy chủ hoặc 0.0.0.0.

Kết nối từ máy khách cục bộ

Tạo một môi trường mới trong công cụ quản lý môi trường và chọn loại proxy đúng với thực tế. Nếu dùng đường hầm SSH, địa chỉ là IP công khai của máy chủ, cổng là cổng SSH, còn tên người dùng và mật khẩu là bộ thông tin của máy chủ. Sau đó chạy kiểm tra kết nối.

Kiểm tra thành công chỉ cho biết đường truyền đã thông. Hãy mở môi trường và xác nhận thêm ba việc: IP đầu ra có đúng là IP công khai của máy chủ không; DNS có đi qua proxy không, vì nếu DNS vẫn được phân giải cục bộ thì thông tin khu vực bị lộ có thể không khớp với IP đầu ra; múi giờ và ngôn ngữ có phù hợp với khu vực đầu ra không. Chỉ khi cả ba đều đạt thì môi trường mới thực sự sẵn sàng.

Khi số lượng tài khoản tăng, hãy cố định quan hệ giữa môi trường và đầu ra để tránh nhiều tài khoản dùng chung một môi trường. Các công cụ như PurpleMark có thể gán đầu ra riêng cho từng tài khoản, ổn định hơn so với tự duy trì bảng đối chiếu thủ công.

Không kết nối được thì kiểm tra từ ngoài vào trong

Bắt đầu từ lớp ngoài cùng: security group đã cho phép chưa? Tường lửa hệ thống đã cho phép chưa? Xác nhận cả hai rồi mới đi sâu hơn.

Tiếp theo kiểm tra chính dịch vụ: tiến trình còn chạy không, đặc biệt sau khi máy chủ từng khởi động lại? Địa chỉ lắng nghe có chỉ bind cục bộ không?

Sau đó đến lớp xác thực: tên người dùng hoặc mật khẩu có sai không? Quyền của tệp khóa có quá rộng không? SSHD sẽ từ chối trực tiếp nếu quyền không đúng. Cuối cùng mới kiểm tra phía máy khách: bạn nhập IP công khai hay nhầm sang IP nội bộ? Đây là chỗ rất dễ nhầm.

Đi theo thứ tự này thường chỉ cần hai hoặc ba vòng là xác định được vấn đề nằm ở lớp nào, thay vì cài lại dịch vụ hết lần này đến lần khác.

Kết thúc

Chuẩn bị phía máy chủ mất chưa đến nửa giờ, nhưng nó quyết định trong vài tháng tiếp theo chiếc máy này có dễ vận hành hay không. Siết chặt lối vào, mở cổng đúng cách và cấu hình xác thực rõ ràng; phần còn lại chỉ là bảo trì thường ngày.