Một máy chủ web mới bị quét trong vòng vài phút sau khi trực tuyến. Phần lớn lưu lượng đó là tự động và vô hại nếu bạn đã làm những điều cơ bản. Hướng dẫn này đi xa hơn một bước so với tăng cường bảo mật 15 phút và bao gồm tường lửa, bảo vệ chống brute-force bằng fail2ban và thiết lập Nginx an toàn hơn.
Bước 1: tường lửa mặc định từ chối với UFW
Chỉ cho phép những gì bạn cần, và chặn phần còn lại. Thêm SSH trước để không tự khóa mình ra ngoài.
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose
Nếu bạn dùng cổng SSH không chuẩn, hãy cho phép cổng đó thay vì OpenSSH.
Bước 2: fail2ban cho các lần thất bại lặp lại
fail2ban theo dõi nhật ký và cấm các địa chỉ IP liên tục đăng nhập thất bại.
sudo apt install -y fail2ban
sudo tee /etc/fail2ban/jail.local > /dev/null <<'CONF'
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
[sshd]
enabled = true
[nginx-http-auth]
enabled = true
[nginx-botsearch]
enabled = true
CONF
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd
Hãy dùng khóa SSH và tắt cả đăng nhập bằng mật khẩu. Xem giải thích khóa SSH.
Bước 3: ẩn phiên bản Nginx và thêm header an toàn
Trong /etc/nginx/nginx.conf, bên trong khối http:
server_tokens off;
Trong khối server của website bạn:
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
Chỉ thêm header HSTS khi HTTPS đã hoạt động cho tên miền và mọi tên miền con bạn dùng.
Bước 4: giới hạn các yêu cầu lạm dụng
Giới hạn tốc độ làm chậm các nỗ lực brute-force vào trang đăng nhập:
# in the http block
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;
# in your server block
location = /wp-login.php {
limit_req zone=login burst=5 nodelay;
# ...your usual PHP handling
}
Kiểm tra và áp dụng bằng sudo nginx -t && sudo systemctl reload nginx.
Bước 5: luôn cập nhật
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades
Cập nhật bảo mật tự động vá các lỗ hổng đã biết mà bạn không cần làm gì.
Cần theo dõi gì
- Kiểm tra các lệnh cấm bằng
sudo fail2ban-client status sshd. - Thỉnh thoảng xem lại
/var/log/nginx/error.log. - Nếu bạn ở sau một proxy hoặc CDN, hãy đảm bảo fail2ban đọc được IP thật của client, nếu không bạn có thể cấm nhầm chính proxy của mình.