• 使用Nginx防止IP地址被恶意解析


    使用Nginx的目的

    使用阿里云ECS云服务器,首先聊聊笔者使用Nginx的背景。

    初始化ECS后会生成一个公网IP,默认访问IP地址自动访问80端口,此时通过ip地址可直接访问启动在80端口的服务。

    如再把域名解析到当前ip,即可通过域名直接访问80端口的服务。

    然后,出现了一个问题:任何人都可以将域名解析到ip地址,也就是说,通过其他域名也可以访问到自己ECS上的服务。至于目的,这种攻击手段未免太光明正大了,应该是想养域名然后售卖(猜测,脑洞够大的大大交流一下)。

    避免这种攻击的方式有很多种,参考网上的答案,配置Nginx是最方便快捷的。

    大致思路如下,web端服务以非80端口启动(无法直接通过IP地址访问到),Nginx配置一层正向代理,将域名转发到域名+端口。

    结果:解析后使用自己的域名可以直接访问,本质上是转发到了ip地址+端口。而其他域名没有配置端口转发,所以会被拦截下来。


    使用Nginx的场景有很多,反向代理,负载均衡等等,防止恶意解析只是其中一种。

    也许未来或扩展更多Nginx相关的技术经验,但是代码只是一种工具,技术只有在解决了真正的问题才会产生价值,不然就如同纸上谈兵,毫无意义。

    之前看到过一篇文章,讲的是两个开发者在讨论技术选择,其中一个人选择了冷门的Lua,另一个人表示不解,为什么不选择热门的技术,更好的性能,更好的开发体验。然而,她的回答是:能解决我们的问题就行了。

    我陷入了深思,2019掀起的微服务架构浪潮我也跟了一把,学习了很多新的技术,名词,感觉盆满钵满。然而很难有机会将其运用到实际的项目开发中,高并发,微服务到底是一种技术,还是一种炫耀的资本,解决的是项目中的实际问题还是就业问题。学习无罪,但在学习前我会思考,我会使用它,还是被它所束缚。

    就哔哔这么多,以下是在Linux环境下Nginx的常用命令和我复制下来的配置文件(nginx.conf)

    常用命令列表

    yum install nginx   //安装nginx(centos)
    
    //开机自启
    systemctl enable nginx
    systemctl disable nginx
    
    //查看nginx状态
    systemctl status nginx
    
    //启动,停止,重启
    systemctl start nginx
    systemctl stop nginx
    systemctl restart nginx
    
    //重新加载配置
    systemctl reload nginx
    
    //配置文件的默认位置
    /etc/nginx  主配置文件nginx.conf
    

    防止恶意解析配置

     server {
                listen       80  default_server;
                server_name  _;
                access_log   off;
                return       444;
            }
    
    # For more information on configuration, see:
    #   * Official English Documentation: http://nginx.org/en/docs/
    #   * Official Russian Documentation: http://nginx.org/ru/docs/
    
    user nginx;
    worker_processes auto;
    error_log /var/log/nginx/error.log;
    pid /run/nginx.pid;
    
    # Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
    include /usr/share/nginx/modules/*.conf;
    
    events {
        worker_connections 1024;
    }
    
    http {
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
        access_log  /var/log/nginx/access.log  main;
    
        sendfile            on;
        tcp_nopush          on;
        tcp_nodelay         on;
        keepalive_timeout   65;
        types_hash_max_size 2048;
    
        include             /etc/nginx/mime.types;
        default_type        application/octet-stream;
    
        # Load modular configuration files from the /etc/nginx/conf.d directory.
        # See http://nginx.org/en/docs/ngx_core_module.html#include
        # for more information.
        include /etc/nginx/conf.d/*.conf;
            server {
                listen       80  default_server;
                server_name  _;
                access_log   off;
                return       444;
            }
        server {
            listen       80;
            server_name  www.zkrun.top;
            location / {
                    proxy_pass http://www.zkrun.top:8080;
            }
    
            error_page 404 /404.html;
                location = /40x.html {
            }
    
            error_page 500 502 503 504 /50x.html;
                location = /50x.html {
            }
        }
    
    # Settings for a TLS enabled server.
    #
    #    server {
    #        listen       443 ssl http2 default_server;
    #        listen       [::]:443 ssl http2 default_server;
    #        server_name  _;
    #        root         /usr/share/nginx/html;
    #
    #        ssl_certificate "/etc/pki/nginx/server.crt";
    #        ssl_certificate_key "/etc/pki/nginx/private/server.key";
    #        ssl_session_cache shared:SSL:1m;
    #        ssl_session_timeout  10m;
    #        ssl_ciphers HIGH:!aNULL:!MD5;
    #        ssl_prefer_server_ciphers on;
    #
    #        # Load configuration files for the default server block.
    #        include /etc/nginx/default.d/*.conf;
    #
    #        location / {
    #        }
    #
    #        error_page 404 /404.html;
    #            location = /40x.html {
    #        }
    #
    #        error_page 500 502 503 504 /50x.html;
    #            location = /50x.html {
    #        }
    #    }
    }
    
  • 相关阅读:
    Log4Net 配置详解
    .Net Core 获取应用物理路径的常见问题
    Js/Jquery获取iframe中的元素
    Ztree树使用详解
    【解决】nginx + socket.io ,能连接但不响应事件
    基础文档官方链接
    位运算
    Java基础之集合框架--Collections.reverse()方法
    Android动画攻略—帧动画、补间动画、属性动画
    [转]京东mPaaS移动日志建设与应用
  • 原文地址:https://www.cnblogs.com/noneplus/p/13047609.html
Copyright © 2020-2023  润新知