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;
        }
    }
}
View Code

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
View Code

  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;
    }

}
View Code

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;
        }
    }
View Code

  如果想下载站点资源,就需要在后面加上认证参数,如:--http-user=admin --http-passwd=xxxxxx

 

 

 

以上是关于nginx禁止ip登录,只允许域名访问的主要内容,如果未能解决你的问题,请参考以下文章

nginx 禁止ip访问只允许域名访问

Nginx禁止IP访问,只允许域名访问

Nginx 禁止IP访问 只允许域名访问

nginx 禁止IP访问,只允许域名访问

nginx只允许域名访问,禁止ip访问

配置nginx只允许域名访问,禁止ip访问图文教程