nginx禁止ip登录,只允许域名访问
Posted 淺景尘
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx禁止ip登录,只允许域名访问相关的知识,希望对你有一定的参考价值。
公司要求,线上solr、kibana要求只能通过域名进行访问,禁止用ip+端口进行登录访问,那么,下面介绍下我是如何实现的
1、禁止ip,允许域名访问
如下图,默认安装好nginx,不让ip方式访问,但是可以通过域名方式访问:
域名可以访问:
直接贴配置文件:443端口配置一样
cat nginx.conf worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80 default; #配置此段表示用IP或其他域名访问时直接跳转到www.baidu.com,也可直接返回403 server_name _; #rewrite ^ http://www.baidu.com$request_uri?; return 403; } server { listen 80; server_name www.kalaok.com; location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
2、solr只允许域名方式访问
由于考虑线上solr数据的安全和重要性,禁止运维和开发人员随意登录进行相关数据增删改操作,我们需要针对solr服务器进行安全访问控制。
配置iptables如下:
[root@localhost conf]# cat /etc/sysconfig/iptables # Generated by iptables-save v1.4.7 on Thu Jun 11 10:58:09 2015 *filter :INPUT DROP [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [1310:141998] -A INPUT -i eth1 -j LOG --log-prefix "BANDWIDTH_IN:" --log-level 7 -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT #202.106.149.226为公司公网地址 -A INPUT -s 202.106.149.226 -p tcp -m tcp --dport 8888 -j DROP ######### 1113 ########################### -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP -A INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP ########################################## # #-A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT #-A INPUT -p tcp -m state --state NEW -m tcp --dport 8081 -j ACCEPT #-A INPUT -p tcp -m state --state NEW -m tcp --dport 8888 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT #-A INPUT -s 124.42.77.106/32 -p tcp -m tcp --dport 5666 -j ACCEPT #-A INPUT -s 124.42.77.106/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A INPUT -p tcp -m tcp --dport 3306 -j DROP -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -o eth1 -j LOG --log-prefix "BANDWIDTH_OUT:" --log-level 7 -A FORWARD -i eth1 -j LOG --log-prefix "BANDWIDTH_IN:" --log-level 7 -A FORWARD -j REJECT --reject-with icmp-host-prohibited -A OUTPUT -o eth1 -j LOG --log-prefix "BANDWIDTH_OUT:" --log-level 7 COMMIT # Completed on Thu Jun 11 10:58:09 2015
reload一下iptables,可以看到我们无法再使用ip请求数据了,下面实现通过nginx使用固定域名访问,直接贴配置:
cat solr.conf server { listen 80; ## define use url to visit server_name dsolr.pharmacodia.com; location /solr { #keep with the server proxy name below allow 202.106.149.226; allow 10.30.48.99; allow 10.173.24.183; deny all; auth_basic "data solr access"; auth_basic_user_file /usr/local/nginx/conf/.htpasswd; proxy_pass http://10.26.241.96:8888/solr; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $Proxy_add_x_forwarded_for; } }
3、nginx添加登录认证
如下图,实现起来很简单:
直接贴配置文件,跟上面的solr登录认证权限一样,需要使用htpasswd工具生成密码文件
如果没有htpasswd命令使用以下命令安装 yum -y install httpd-tools htpasswd -c /usr/local/nginx/conf/solr.passwd admin #输入两次密码 直接在server里添加 server { listen 80; server_name www.kalaok.com; auth_basic "data solr access"; auth_basic_user_file /usr/local/nginx/conf/solr.passwd; location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
如果想下载站点资源,就需要在后面加上认证参数,如:--http-user=admin --http-passwd=xxxxxx
以上是关于nginx禁止ip登录,只允许域名访问的主要内容,如果未能解决你的问题,请参考以下文章