在ip不断变化情况下实现自动限制动态ip访问允许访问限定域名内容。

81 篇文章 2 订阅
61 篇文章 5 订阅

摘要:
公司在托管机房有部署elasticsearch服务器。开发需要经常连接机房的elasticsearch集群查看数据,但是如果把elasticsearch集群地址配置成外网是很危险的行为,由于elasticsearch数据库特性,因此只要别人知道你的数据库地址和端口,就可以任意操作你的数据库。这是万万不可取的。

解决办法:

给elasticsearch-head服务器配置域名

不能把ip和端口暴露出去,于是就想到利用es-head插件,给es-head插件配置域名。然后通过访问es-head的地址,然后访问数据,为了安全起见,给es-head配置了帐号和密码
配置如下:

1、安装 htpasswd 工具 用于生成nginx访问密码

 yum  -y install httpd-tools

2、执行 命令创建密码

[root@uuu ~]# htpasswd -c /usr/local/src/nginx/passwd es
New password: 
Re-type new password: 
Adding password for user coderschool 

输入密码即可创建密码
密码文件记住路径,等下配置nginx会用到。

3、配置nginx虚拟主机配置


server {
  listen 80;
  server_name es-head.qq.com;
  location / {
    auth_basic "es";
    auth_basic_user_file /usr/local/src/nginx/passwd;   #密码文件路径
    proxy_pass http://192.168.1.10:9100;
    include /conf.d/proxy-params.conf;
  }
}

这样就可以通过域名http://es-head.qq.com访问 http://192.168.1.10:9100的内网地址了
访问的时候可以会提示输入账号密码,账号填入es,密码填入刚才配置的密码即可。如下图所以。
输入账号密码就会出现es界面了

在这里插入图片描述

进入后,又发现了一个问题

在这里插入图片描述

es-head中,需要填入es服务器地址,才能访问数据,由于我所在的网络环境和es数据不在同一个网络环境,因此地址不能填写内网地址,只能填写外网。这就尴尬,搞了半天,还是无法连接数据库。
后来想到了nginx有一个限定ip访问域名的功能,刚好可以用上。

给elasticsearch数据库配置域名,并限定特定的ip访问

于是修改nginx虚拟主机配置
配置一

upstream es.qq.com
{
  server 192.168.1.10:9200  weight=1;
  server 192.168.1.11:9200  weight=1;
  server 192.168.1.12:9200  weight=1;
  server 192.168.1.13:9200  weight=1;
  #ip_hash;
}

# 上面我做了一个集群,和nginx负载均衡,可以删除。如果删除了,请参考配置二

server {
  listen 80;
  server_name es.qq.com;
  location / {
    include  /usr/local/src/nginx/es-allow-ip.conf;

    deny all;
    proxy_pass http://es.qq.com;
    include /conf.d/proxy-params.conf;
  }
}

推荐配置二(不是集群的,或者有集群的都可以使用配置二):

server {
  listen 80;
  server_name es.qq.com;
  location / {
    include  /usr/local/src/nginx/es-allow-ip.conf;
    deny all;
    proxy_pass http://es.qq.com;
    include /conf.d/proxy-params.conf;
  }
}
/usr/local/src/nginx/es-allow-ip.conf;文件内容格式如下:
allow 114.114.114.114;

114.114.114.114 是你的外网ip,如果你的外网ip是固定ip,那就现在就完事了,但是很多的外网ip是动态ip。因为这个也需要动态操作的。

动态更新限定的ip,从而达到限制其他人访问的目的

更新本地的动态ip。需要用到动态ddns解析,这个腾讯云和阿里云都有接口,百度一下怎么操作。
就是一旦自己的外网ip变化了,就会动态解析到设定的域名上面去,我配置了一个域名test.qq.com,然后我通过获取这个域名的解析地址,知道我的外网ip、

python2代码如下:python3代码略有不同。

# -*- coding: utf-8 -*-
import os
import socket
result = socket.getaddrinfo("test.qq.com", None)[0][4][0]
with open('/usr/local/src/nginx/es-allow-ip.conf','r') as f1 :
    ip = f1.readline()[6:][:-1]
    if ip != result:
        print ip
        print result 
        with open('/usr/local/src/nginx/es-allow-ip.conf','w') as f2 :
            f2.write('allow ' + result+';')
        os.system('nginx -s reload')
        print('ip改变')
    else:
        print('ip未改变')

然后我配置一个定时任务,每小时执行一次

crontab -e
1 * * * * python /root/update_ip.py >> /root/update_ip.log

这样就实现了外网ip自动更新白名单的操作。

从而实现了整个业务的需求。

在这里插入图片描述

上面就是效果图。已经可以取到东西了、

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值