隐藏基于 nginx 的服务器

问题描述 投票:0回答:1

我正在设置一个运行 nginx 的服务器,我需要一些配置技巧。例如,我的目标是确保只有访问主域的正确子域的人才能访问我的 nginx 面板。这意味着如果有人排除子域或使用我的服务器实际 IP 地址,我希望丢弃请求而不将任何数据发送回用户。

到目前为止,我认为以下内容做得很好,但是,我担心如果我在旨在丢弃无效 HTTPS 流量的默认块中指定实际的 SSL 证书,那么攻击者可以检查 SSL 证书并查看域。这主要是扫描仪的问题,扫描仪可以指定我的服务器 IP 地址,然后尝试确定其背后的域。所以,我想知道我是否可以指定一个虚拟证书或任何想法?

我的第二个问题是,当 nginx 确实被 ping 到时,它会因为某种原因从我的实际服务器 IP 地址获取像

favicons/apple-touch-icon.png
favicons/favicon-32x32.png
这样的图标,而不是使用云耀斑反向代理。这对我来说毫无意义,除非它是某种默认配置,在我设置它时硬编码到 nginx 中?我的最后一个问题也是最不重要的问题是,有没有办法隐藏细节,比如我正在使用 nginx?

# HTTP catch-all server block to drop all connections
server {
    listen 80 default_server;
    server_name _;
    return 444;  # No response for HTTP
}

# Catch-all server block to drop all connections that do not match defined server names
server {
    listen 443 ssl default_server;
    server_name _;

    ssl_certificate /etc/letsencrypt/live/example.net/fullchain.pem;  # Needed for SSL to work on 443
    ssl_certificate_key /etc/letsencrypt/live/example.net/privkey.pem;

    return 444;  # No response
}

 server {
    listen 80;
    server_name examplePanel1.example.net;
    return 301 https://$server_name$request_uri;
}


server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;


 server_name examplePanel1.example.net;

    ssl_certificate /etc/letsencrypt/live/example.net/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.net/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.net/chain.pem;
    ssl_session_cache shared:SSL:10m;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM->
    ssl_prefer_server_ciphers on;

    # See https://hstspreload.org/ before uncommenting the line below.
    # add_header Strict-Transport-Security "max-age=15768000; preload;";
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header Content-Security-Policy "frame-ancestors 'self'";
    add_header X-Frame-Options DENY;
    add_header Referrer-Policy same-origin;
nginx nginx-config server-configuration
1个回答
0
投票

所以,我想知道我是否可以指定一个虚拟证书或任何想法?

当然。对于虚拟证书,您可以查看 this 示例,从 nginx 1.19.4 开始,您可以选择使用

ssl_reject_handshake
指令,这使得
default_server
块变得更加简单:

server {
    listen 80 default_server;
    listen 443 ssl http2 default_server;
    ssl_reject_handshake on;
    return 444;
}

您可以使用

openssl s_client
命令来检查可能的攻击者可以使用哪些证书信息,例如:

openssl s_client -showcerts -connect <IP>:443

我的第二个问题是,当 nginx 确实被 ping 通时,由于某种原因,它会从我的实际服务器 IP 地址获取诸如

favicons/apple-touch-icon.png
favicons/favicon-32x32.png
之类的图标,而不是使用云耀斑反向代理。

不知道这一点,也许这些是一些常见的图标文件名,此类请求用于检查服务器上是否托管有任何站点?

我的最后一个问题也是最不重要的问题是,有没有办法隐藏细节,比如我正在使用 nginx?

检查

server_tokens
指令。

© www.soinside.com 2019 - 2024. All rights reserved.