Đặt CDN hoặc reverse proxy phía trước một website giúp hấp thụ lưu lượng và che giấu địa chỉ máy chủ, nhưng chỉ khi IP thật vẫn chưa bị lộ. Kẻ tấn công hiếm khi phá được CDN. Chúng tìm thẳng máy chủ gốc. Hướng dẫn này liệt kê những nơi máy chủ gốc có thể bị lộ và cách khiến nó từ chối mọi thứ ngoại trừ proxy của bạn.
Máy chủ gốc bị tìm ra bằng cách nào
- Lịch sử DNS: một số dịch vụ lưu lại bản ghi cũ, nên IP bạn dùng trước khi thêm CDN vẫn còn được liệt kê.
- Subdomain: các bản ghi như
mail.,ftp.hoặcdev.trỏ thẳng vào máy chủ. - Header email: thư gửi đi từ cùng một máy chủ để lộ IP của nó trong phần header.
- Certificate transparency và quét internet: các bộ quét đối chiếu một chứng chỉ với mọi IP đang phục vụ chứng chỉ đó.
- Hành vi của ứng dụng: webhook, trình tải ảnh và các tính năng "kiểm tra URL này" đều kết nối ra ngoài từ máy chủ gốc.
Bước 1: bắt đầu từ trạng thái sạch
Nếu máy chủ đã bị lộ, cách khắc phục an toàn nhất là dùng IP mới, hoặc dùng máy chủ mới rồi di chuyển sang. Che giấu một địa chỉ đã công khai là vô ích. Hãy lên kế hoạch chuyển với hướng dẫn di chuyển không gián đoạn.
Bước 2: chỉ nhận lưu lượng từ proxy
Chỉ cho phép các cổng web từ dải IP mà proxy công bố và không gì khác. Với UFW, việc này trông như bên dưới, dùng các dải IP mà nhà cung cấp của bạn công bố.
sudo ufw default deny incoming
sudo ufw allow OpenSSH
for ip in $(cat proxy-ranges.txt); do sudo ufw allow from "$ip" to any port 443 proto tcp; done
sudo ufw enable
Hãy làm mới danh sách theo lịch, vì các dải IP thay đổi. Để bảo đảm chắc chắn hơn, hãy dùng authenticated origin pulls (mutual TLS) để Nginx từ chối mọi client không có chứng chỉ của proxy.
Bước 3: tách riêng mọi thứ có thể gây rò rỉ
- Gửi email qua một máy chủ hoặc relay khác, đừng bao giờ gửi từ máy chủ gốc.
- Giữ các subdomain không phải web ra khỏi IP của máy chủ gốc.
- Cho các yêu cầu tải dữ liệu ra ngoài của ứng dụng đi qua một proxy hoặc một worker riêng.
- Dùng một server block Nginx mặc định trả về phản hồi rỗng với
Hostkhông xác định, để việc quét IP trần không cho thấy gì.
server {
listen 443 ssl default_server;
ssl_reject_handshake on;
}
Bước 4: kiểm tra như một kẻ tấn công
Hãy tìm tên miền của bạn trong các công cụ lịch sử DNS, quét dải IP của chính bạn để tìm chứng chỉ và kiểm tra header của một thư thử. Nếu bất kỳ cách nào để lộ máy chủ gốc, hãy đổi IP và lặp lại.
Hãy nhớ điều này làm được gì và không làm được gì: nó bảo vệ khả năng hoạt động và tính riêng tư của địa chỉ. Nó không che giấu ai là chủ tài khoản. Về điều đó, hãy đọc hosting ẩn danh thực sự ẩn danh đến đâu, và với các cuộc tấn công vượt qua tầng mạng, xem phòng thủ Layer 7.