网络资讯

在ip不断变化情况下实现自动限制动态ip

2020-02-12 20:50:31   来源:   点击:
  公司在托管机房有部署elasticsearch服务器。开发需要经常连接机房的elasticsearch集群查看数据,但是如果把elasticsearch集群地址配置成外网是很危险的行为,由于elasticsearch数据库特性,因此只要别人知道你的数据库地址和端口,就可以任意操作你的数据库。这是万万不可取的。
 
  解决办法:
 
  给elasticsearch-head服务器配置域名
 
  不能把ip和端口暴露出去,于是就想到利用es-head插件,给es-head插件配置域名。然后通过访问es-head的地址,然后访问数据,为了安全起见,给es-head配置了帐号和密码
 
  配置如下:
 
  1、安装 htpasswd 工具 用于生成nginx访问密码
 
  yum  -y install httpd-tools
 
  1
 
  2、执行 命令创建密码
 
  [root@uuu ~]# htpasswd -c /usr/local/src/nginx/passwd es
 
  New password:
 
  Re-type new password:
 
  Adding password for user coderschool
 
  输入密码即可创建密码
 
  国内IP代理软件密码文件记住路径,等下配置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服务器地址,IP地址修改器才能访问数据,由于我所在的网络环境和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自动更新白名单的操作。
 
  从而实现了整个业务的需求。

上一篇:如何给Windows系统同时设置固定和动态IP?
下一篇:Linux基础_dhcp动态获取IP

关闭
18076763811
动态IP
QQ: 944155117