空主機頭(默認虛擬主機)允許任意域名解析至伺服器 IP 直接訪問,易被惡意綁定、內容鏡像、SEO 劫持。必須顯式拒絕或導向錯誤頁。
# /etc/httpd/conf/httpd.conf
NameVirtualHost *:80
# 第一優先級:捕獲所有未匹配的請求
<VirtualHost *:80>
ServerName dummy.default
DocumentRoot /var/www/html_default
<Directory /var/www/html_default>
Require all denied
</Directory>
# 選項 A:返回 403
# 選項 B:返回 444 (Nginx 專用,Apache 需模組)
# 選項 C:重導向至正規域名
RewriteEngine On
RewriteRule ^(.*)$ https://www.example.com$1 [R=301,L]
</VirtualHost>
# 正規站點配置(其後匹配)
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com *.example.com
DocumentRoot /var/www/html
# 正常站點配置...
</VirtualHost>
# /usr/local/nginx/conf/nginx.conf
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _; # 無效主機名,匹配所有未匹配請求
# 方案 1:直接關閉連接(Nginx 專有,最高效)
return 444;
# 方案 2:返回 403
# return 403;
# 方案 3:重導向至正規域名
# rewrite ^(.*)$ https://www.example.com$1 permanent;
}
# 直接用 IP 訪問
curl -H "Host: " https://server-ip/
curl -H "Host: malicious.com" https://server-ip/
# 應返回 444/403/301,而非正常站點內容
server {
listen 80 default_server;
server_name _;
access_log /var/log/nginx/honeypot.log honeypot;
return 444;
}
log_format honeypot '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" "$host"';
Require all denied 而非舊版 Order deny,allow / Deny from alldefault_server 僅能出現一次 per port/IP 組合listen 443 ssl default_server