MENU

Nginx的空主机头访问保护在多端口绑定下的配置(二更)

March 6, 2021 • 折腾

自己的服务器除了搭建现有的几个公开的服务内容之外,还使用以 ZeroTier One 为例的跨区域组网形式,为可信设备提供其他服务内容,这就涉及到 Nginx 在不同 IP 上的绑定。但由于 Nginx 的默认行为特性,可能会导致不经意的信息泄露,尤其是在一些 IP 段盲扫下,容易泄露源站信息。(这里不讨论带主机头的 IP 段盲扫)

通常,可以查到的教程中都会告诉你,可以在 nginx.conf 中使用如下配置,来达到屏蔽空主机头的效果。

server {
    listen 80 default_server;
    server_name _;
    return 410;
}

在我的场景下,部分 Host 会绑定一个特定的 IP 和端口,此时会出现,用户依旧可以通过 IP 访问绑定的第一个对应的站点,这是业务设计之外的结果,但这一现象是 Nginx 的默认行为(包括 Apache 也是)。

通过测试,上述的屏蔽空主机头的配置代码仅针对于 listen 80 一行配置相同的站点,对于其他的(如:listen 10.144.2.1),则需要同样配置一条内容,具体如下:

server {
    listen 10.144.2.1 default_server;
    server_name _;
    return 410; #Gone
    #return 444; #关闭连接
}

对于 HTTPS 来说,配置如下

server {
    listen 443 ssl default_server;
    server_name _;
    ssl_certificate none.pem;
    ssl_certificate_key none.key;
    return 410; #Gone
    #return 444; #关闭连接
}

同样也要警惕 listen 443一行所造成的行为。同时建议以上内容要在 nginx.conf 中配置,如果在 vhost 内编写时,请确保该配置生效于其他业务配置之前。

对于 HTTPS ,由于发送 HTTP 请求是在 TLS 管道内实施的。因此,TLS 握手必定在 HTTP 建立通信之前(TLS 为 L4,HTTP 为 L7),即 HTTP 未建立连接之前,就会得到一个 TLS 证书,按照 Nginx 默认的规则,就会返回出第一个 HTTPS 站点的证书(可以利用成为一种信息嗅探的方式)。所以 SSL 证书在空主机头上的配置也需要格外注意。建议使用自签证书,对于一些证书字段可以采用不填写的方式来规避信息泄露的问题。在 Linux 上可以使用以下命令来创建一张证书。

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ca.key -out ca.crt

下文为一份有效期为 365000 天、 RSA2048bit 的空白信息证书,以备选用。

-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC+7PT9IywLk0Kk
wBvWhRbfdntU6tNCUtH68hqsnEucLBq2x6BjwrmoPViUQo35/EVRu54uGJev5WYo
/osE3jlf2fio0vK3ZJ0oVZFTADhHM9wYCWN1+IOti4ALCSFUlywiY7Zt8o/XSVdb
9g96jzHTFcaED/EAvqm6CvOOsxzipGyQZHr0bF8UR2LF7DP+lLPHQaDd52f34Hh6
Xd+8sEeFeqARik8Sx8W44viZutcc5G/BlQ4D8Cu/X4GIG1j+w2o/rByvcYmwAw1Y
mrWX4t2A4EMU5FwYEn/n1htVAmOTdBeo44n3fafwfnhfJi1zmQp6IXZ0i12lA11e
X3oheW4VAgMBAAECggEAPnIMEvs8/bA1fOMkd75h48bBwd1oKWojKZuj487e3/6A
4kVajSZ0SLV/0kYOX7QGDBx8OQFsI2i5SDEw0O/J/jKxpK4SGq96w2VxOZ95yLgK
hYYUlNIqZ0mYIIPk9eDX24uXcFCEgVqIixhoqaJKHoshubHpFmBF7QaF8KdejDW/
f4zJLhfgpIlf0zz1a88got0un5/bEinGNfVIrWEnvFPp6kAnBR2EJBf9v1hrAAZ6
0CYiVCl8pYKPmsY53oPFYtX/Bc11GEw7i9G86CSaFyNxDSou6kveSYDHygDUW177
HZo6hQBLEHNv8GPZBpfEFElCsnku44bjMFUtSOIyJQKBgQD4VDvYGZebLJ/A+e5+
2AwYn1dcuSfxl9M5fqLkfleV0itnppXMB4IejozRFBLYy0LOsUEQsOORixvxgW5l
ESwr8ZvSg4YPQn83c7EKNMLYwd/X4lj6MXlFzzSnlOLAOud2KYq4np4mNeao5ux5
LqfSO0G60iv+FO2adaafr7QeawKBgQDE0sgRTk7f3uNtPW3VVwQXnWnP/9aKQp0n
3V17vkJGjaIaPFQZ4cmPsJ98n96LmaqTkpFrR+WG4VpAyqnjQjY7G9/NcL3572FS
ZnS87tpjOA/0VScYa9ODoBacPXiGsSm5b7WXFgeljJssePTb+YxN+C3E7d3ALISo
ArfCVKLFfwKBgQDoSDJqIxYyqf0MzzwNHh3CclmPfAom6/NCFnhb7uoSVDMRkzsP
S/6kgoapk3NFomttV1QbPrq/CzYqIv2WQAfnWup8cVZWs8a3odn6R/vyMPcmwqyj
6t8bM4R3NMcdNHwJhTYjFwurhkOpvcd4WvHTrmX/UFSiKAVQs7gWKo363QKBgGMC
AOAruyOEVHUULJbfwdA7QAoAkSRVpAZ0pVzk9SPWhU+bP1cRrDnayC+BoAorT5IS
bZJAxWYXIDZtfA40tWEAgZEvgHEkiJlRrrGHmVXF0si+uP7g5rJUqmsHxQRERE/i
sL8CtvABDeHOKqYpHvntuOBSI3VTL5vwWg2oU4TzAoGBAOX1oHLhiR//iAyLmo/W
PBwiEiMhSZYlfD5nRBpDNGk5zXh3HwN7STDzJEIhdQmT/4un6yNaGAUEwt39f7p/
AyQZlaDQFD8dLicIHOOgH03qHgOAOF6ea1/IPAeK9aV8lAzN71cYGfNMwHNTdqYV
u+fSwXdehaTIztnSSIKFX7bG
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIDZzCCAk+gAwIBAgIUd84b8LH9jZddnEL10wNTLe+mA6IwDQYJKoZIhvcNAQEL
BQAwQjELMAkGA1UEBhMCWFgxFTATBgNVBAcMDERlZmF1bHQgQ2l0eTEcMBoGA1UE
CgwTRGVmYXVsdCBDb21wYW55IEx0ZDAgFw0yMTAzMDYwMzM3NDJaGA8zMDIwMDcw
NzAzMzc0MlowQjELMAkGA1UEBhMCWFgxFTATBgNVBAcMDERlZmF1bHQgQ2l0eTEc
MBoGA1UECgwTRGVmYXVsdCBDb21wYW55IEx0ZDCCASIwDQYJKoZIhvcNAQEBBQAD
ggEPADCCAQoCggEBAL7s9P0jLAuTQqTAG9aFFt92e1Tq00JS0fryGqycS5wsGrbH
oGPCuag9WJRCjfn8RVG7ni4Yl6/lZij+iwTeOV/Z+KjS8rdknShVkVMAOEcz3BgJ
Y3X4g62LgAsJIVSXLCJjtm3yj9dJV1v2D3qPMdMVxoQP8QC+qboK846zHOKkbJBk
evRsXxRHYsXsM/6Us8dBoN3nZ/fgeHpd37ywR4V6oBGKTxLHxbji+Jm61xzkb8GV
DgPwK79fgYgbWP7Daj+sHK9xibADDViatZfi3YDgQxTkXBgSf+fWG1UCY5N0F6jj
ifd9p/B+eF8mLXOZCnohdnSLXaUDXV5feiF5bhUCAwEAAaNTMFEwHQYDVR0OBBYE
FD4UDQmo6IYB8mG/IAXLs2MYZ66AMB8GA1UdIwQYMBaAFD4UDQmo6IYB8mG/IAXL
s2MYZ66AMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBADkwGMem
RbdW78SRX8oiuF6M34VqzG6uKaqxFjPtqhliFNu/LAwiz48WjO/bV8U0tYkdQlCb
qFvM67IqtiHaZkkmU68U7s3POC4hJdYh98t1YRz1Rot2DpERGJDgPyZGDNSpCw6r
pIZCS5/1mhxsyNsxuG/GUYFDgJPPJwZT96IaPWtfIGLxM7w3yWyC8+r3l8+i1Mkd
m0SAgidx+DwT85Tyc6s7aBbagIHiwUeeqkbCzdhq0LO5z07N2LN7Ky6Q9/0lzUaQ
a7LWaWpIdgVPGdQ+gnuyRdhsdVsQdfJB/qYlenpOtAZ+7PFXkFVR/K0MbIIfYNNA
0Q7mb0SXobrW8m8=
-----END CERTIFICATE-----

Archives QR Code
QR Code for this page
Tipping QR Code