2019-01-16 nginx 使用Geoip禁止非法地区访问 只允许指定地区访问 只允许域名访问

最近公司内部为了外部访问方便搭建了一台堡垒机,然后发现老是被字典破解,后台登录记录全是弱密码暴力破解


2019-01-16 nginx 使用Geoip禁止非法地区访问 只允许指定地区访问 只允许域名访问_第1张图片
暴力破解记录

虽然我的用户名密码比较安全,但也是虚的一逼啊,抓紧时间禁止它访问.虽然国内也会有肉鸡攻击,但毕竟减少了不少概率.

  1. 先查看下nginx是否编辑有GeoIP模块:
    nginx -V 在输出界面看是否有--with-http_geoip_module
    若没有 yum -y install geoip-devel GeoIP数据库会被安装在 /usr/share/GeoIP/GeoIP.dat
    也可以从 http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz 这里下载最新的GeoIP数据库文件。
[root@zk conf.d]# nginx -V
nginx version: nginx/1.12.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC)
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --省略一部分-- --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-http_sub_module -m64--省略一部分--'

然后开始配置nginx的配置文件/etc/nginx/nginx.conf, 我配置的只允许中国访问:

    # 访问地理位置限制,这里只允许中国ip访问,降低使用国外代理进行暴力破解的概率--秦飞
    geoip_country /usr/share/GeoIP/GeoIP.dat;

    # geoip_city    /usr/share/GeoIP/GeoLiteCity.dat;
    # 下面一行根据实际情况编写
    map $geoip_country_code $allowed_country {
        default no;
        CN yes;
    }

然后在server块里面进行配置:

server {
    listen 80;  # 代理端口,以后将通过此端口进行访问,不再通过8080端口
    server_name xx.xx.xx;  # 修改成你的域名或者注释掉

    client_max_body_size 100m;  # 录像及文件上传大小限制

    if ($allowed_country = no) {
        return 403;
    }
    ----------------略略略一大堆东西-----------------
}

如果国家访问规则的匹配结果是no,则返回403


2019-01-16 nginx 使用Geoip禁止非法地区访问 只允许指定地区访问 只允许域名访问_第2张图片
浏览器访问结果

至此基于国家的访问控制完成.

只允许域名访问基于端口:

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

每一个端口在此配置一个server块, 接收ip请求返回403即可

参考资料:
https://blog.csdn.net/linux_newbie_rookie/article/details/78663721
https://takeshiyako.blogspot.com/2016/10/nginx-ngx-http-geoip-module.html
https://docs.nginx.com/nginx/admin-guide/security-controls/controlling-access-by-geoip/

你可能感兴趣的:(2019-01-16 nginx 使用Geoip禁止非法地区访问 只允许指定地区访问 只允许域名访问)