为了解决linux配置Nginx 只能关闭防火墙才能访问的问题
使用Nginx和iptables做访问权限控制(IP和MAC)
之前配置的服务器,相当于对整个内网都是公开的,而且,除了可以通过80端口的nginx来间接访问各项服务,也可以绕过nginx,直接ip地址加端口访问对应服务,这是不对的啊,所以我们要做一些限制,因为只是对特定的人提供服务,而且局域网IP和MAC都是固定的,所以可以直接用白名单,其他的全部拒绝
/**************************************使用nginx做访问权限控制*********************************/
先在nginx做设置
在/etc/nginx/conf.d 下面新建ip.conf
在这个目录下的.conf都会被包含进nginx.conf中
假设我们只允许192.168.1.2 192.168.1.3 访问
那内容就是
allow 192.168.1.2;
allow 192.168.1.3;
deny all;
这样就搞定了
当然nginx还可以做得更好一些,分目录进行控制
ip.conf相当于第一层白名单,也就是全局白名单,在对应的反向代理的conf文件中,同样可以加上白名单
比如对于开放在4567端口的论坛,只想让192.168.1.2访问
那就将原来的配置文件(参考另一篇随笔Ubuntu 14.04下安装Nginx,MediaWiki,NodeBB,Everything,GitLab http://www.linuxidc.com/Linux/2016-05/131137.htm)
server {
listen 80; server_name www.forum.zqb.local forum.zqb.local;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://127.0.0.1:4567/;
proxy_redirect off; # Socket.IO Support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
改成
server {
listen 80; server_name www.forum.zqb.local forum.zqb.local;
location / {
allow 192.168.1.2; #允许访问
deny all; proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://127.0.0.1:4567/;
proxy_redirect off; # Socket.IO Support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
这样就可以对每个服务分别控制访问权限,而不是一刀切了
注意修改完配置文件后,要重新启动服务
service nginx restart
当然,也可以配置整个网段,也可以配置黑名单,具体自行google或百度语法
/**************************************使用iptables做访问权限控制*********************************/
但是只对IP做限制,还是有点不够,我们还想做的更好一些,比如,针对MAC地址也做限制
这个时候nginx就不行了,要iptables
配置可以一条条写命令,也可以编辑文件后批量写入
先把当前配置写入文件 /etc/iptables.test.rules 中
iptables-save > /etc/iptables.test.rules
然后修改文件 /etc/iptables.test.rules
修改后写回去
iptables-restore < /etc/iptables.test.rules
就生效了
假设服务器自己的IP是192.168.1.2,mac地址为aa:bb:cc:dd:ee:ff
想达到以下效果
服务器自己可以随意访问自己的所有端口
其他的机器不允许访问4567端口(也就是不能直接访问开放在4567端口的论坛,必须通过80端口的nginx去间接访问)
可以这么配置
# Generated by iptables-save v1.4.21 on Mon May 2 15:53:51 2016
*filter
:INPUT ACCEPT [96:9703]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1531:1424833]
-A INPUT -s 192.168.1.2/32 -m mac --mac-source aa:bb:cc:dd:ee:ff -p tcp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 4567 -j REJECT --reject-with icmp-port-unreachable
-A INPUT -s 192.168.1.3/32 -m mac --mac-source ab:cd:ef:ab:cd:ef -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j REJECT --reject-with icmp-port-unreachable
COMMIT
# Completed on Mon May 2 15:53:51
前四行是自动是生成的
第五行表示,对于IP地址为192.168.1.2,mac地址为aa:bb:cc:dd:ee:ff,直接ACCEPT
第六行表示,允许环回通信
第七行表示,禁止访问4567端口
第八行表示,对于IP地址为192.168.1.3,mac地址为ab:cd:ef:ab:cd:ef,允许访问80端口
第九行表示,禁止访问80端口
这个规则是按顺序匹配的,匹配到任意一条就结束,否则继续往下匹配
所以对于服务器本身,第五行就匹配了,后面的规则不管,没有任何限制
对于其他机器,第五行匹配不到,第七行就禁止了直接访问4567端口
对于 192.168.1.3,匹配到第八行,所以可以访问80端口
其他机器匹配不到,执行到第九行,就禁止了80端口的访问
上面这种配置,只是禁止了几个端口,其他的ssh之类的并没有做限制
有点端口黑名单的感觉,更严格的话也可以做成端口白名单吧,只开放23,80等几个端口,其他的全禁止
哦,对了,还要弄成开机自动加载才行
iptables-save > /etc/iptables.up.rules
修改/etc/network/interfaces
在最后加上一行
pre-up iptables-restore < /etc/iptables.up.rules
/***********************************************************************/
综上,先通过iptables,让白名单(IP和MAC必须同时匹配)的机器只能访问80端口,也就是必须通过nginx而不能直接去访问服务
然后nginx再针对服务做进一步的限制
当然每个服务本身也是需要账号密码才能使用的,比如在论坛后台也可以设置注册权限,不过那个就是服务本身提供的了
另,这么做的话会带来一些附加影响,比如gitlab给出的会是
http://192.168.1.2:8081/zhuangqiubin/Books_ceshi.git
但你是无法直接访问8081的,所以要改成
http://www.gitlab.zqb.local/zhuangqiubin/Books_ceshi.git
/***********************************************************************/
不过,其实IP和MAC地址都是可以修改的==
修改IP
sudo ifconfig eth0 192.168.2.1 netmask 255.255.255.0
sudo /etc/init.d/networking restart
修改MAC
ifconfig eth0 down
ifconfig eth0 hw ether xx:xx:xx:xx:xx:xx
ifconfig eth0 up
CentOS 7.0关闭默认防火墙启用iptables防火墙
http://www.linuxidc.com/Linux/2015-05/117473.htm
iptables使用范例详解 http://www.linuxidc.com/Linux/2014-03/99159.htm
Linux防火墙iptables详细教程 http://www.linuxidc.com/Linux/2013-07/87045.htm
iptables的备份、恢复及防火墙脚本的基本使用 http://www.linuxidc.com/Linux/2013-08/88535.htm
Linux下防火墙iptables用法规则详解 http://www.linuxidc.com/Linux/2012-08/67952.htm
Linux下iptables防火墙设置 http://www.linuxidc.com/Linux/2015-10/123843.htm
为了解决linux配置Nginx 只能关闭防火墙才能访问的问题的更多相关文章
- linux配置静态ip,关闭防火墙
在vmware下安装centos6.5通过桥接方式访问外网,因此需要配置ip. 一.ip配置 1.1. 配置动态ip vi /etc/sysconfig/network-scripts/ifcfg-e ...
- 虚拟机linux配置nginx 为什么win7通过Ip访问不到
第一步,你应该先检查网络win机ping linux机,通了进行下一步第二步,检查端口netstat -antl | grep 你开启的服务端口比如你开了http,那就是80端口或者你自定义的端口,我 ...
- Linux配置Nginx+Tomcat负载均衡
cd /usr/local/tomcat1/webapps/ROOT/ tar -zxvf nginx-1.14.2.tar.gz -C /usr/local 一.Linux配置Nginx 一.下载N ...
- linux常用命令和关闭防火墙
linux常用命令和关闭防火墙 2. linux常用命令 Mkdir 创建 Rm -rf 删除 Chmod -R 777 权限 Mysql -uroot -r quit退出 find ...
- 【linux命令】打开关闭防火墙iptables
防火墙关闭 关闭防火墙(linux) 经过自己的实验,发现在ubuntu中service iptables 无法使用. 同时,在init.d中并没有iptables的程序,iptables程序在/sb ...
- Linux 配置nginx
1.首先安装依赖包: # yum -y install gcc gcc-c++ make libtool zlib zlib-devel openssl openssl-devel pcre pcre ...
- [亲测]ASP.NET Core 2.0怎么发布/部署到Ubuntu Linux服务器并配置Nginx反向代理实现域名访问
前言 ASP.NET Core 2.0 怎么发布到Ubuntu服务器?又如何在服务器上配置使用ASP.NET Core网站绑定到指定的域名,让外网用户可以访问呢? 步骤 第1步:准备工作 一台Liun ...
- [亲测]七步学会ASP.NET Core 2.0怎么发布/部署到Ubuntu Linux服务器并配置Nginx反向代理实现域名访问
前言 ASP.NET Core 2.0 怎么发布到Ubuntu服务器?又如何在服务器上配置使用ASP.NET Core网站绑定到指定的域名,让外网用户可以访问呢? 步骤 第1步:准备工作 一台Liun ...
- 三、netcore跨平台之 Linux配置nginx负载均衡
前面两章讲了netcore在linux上部署以及配置nginx,并让nginx代理webapi. 这一章主要讲如何配置负载均衡,有些步骤在前两章讲的很详细了,所以这一章我就不会一个个截图了. 因为本人 ...
随机推荐
- ADO.NET访问数据库
1:ADO.NET数据库的方法和技术 2:ADO.NET的主要组成: 1>DataSet(数据集)-----独立于数据间的数据访问 2>.NETFramework(数据提供程序)----- ...
- IOC的总结
今天趁着空闲总结一下自己IOC的一些理解,希望可以帮助到有需要的人,请大牛们多多指教. (一)IOC IOC就是控制反转,给程序解耦等等,有很多博客都对它做了一些很好的讲解.在这里我也不说太多文字,直 ...
- Life in Changsha College-第一次冲刺
第一次冲刺任务 基于大局的全面性功能框架定位,要求能实现用户基于自己的需求进行的一系列操作. 用户故事 用户打开"生活在长大"的界面 程序首页展示校园服务,论坛等相关信息 用户选择 ...
- 面试经验And总结
作为一个实习生,我大二即将读完,因为自己是大专的和本科没法比,没有他们的 知识基础,没有他们的充裕的时间,没有那个本科毕业证,没有学位证书.作为一个大专生我在找工作的时候总是充满了自卑,可自己有事那种 ...
- 微信小程序入门
自己看了一下微信小程序 其实 还是很简单的 官方有现成的api 跟 组件给你用 我的感觉就像是一个 前端框架 类似于 ionic 这种 感觉比ionic还要简单 里面的wxml ...
- Ubuntu16.04 IDE: 用Vim逐步打造一个IDE
目前打造完成的IDE主要有: terminator+Bundle+NERDtree+YCF(youcompleteme)+UltiSnips+新创建文件自动补充注释和作者,版权信息等 1,当任务比较多 ...
- 第四章:Python基础の快速认识內置函数和操作实战
本課主題 內置函数介紹和操作实战 装饰器介紹和操作实战 本周作业 內置函数介紹和操作实战 返回Boolean值的內置函数 all( ): 接受一個可以被迭代的對象,如果函数裡所有為真,才會真:有一個是 ...
- OpenCV探索之路(二):图像处理的基础知识点串烧
opencv图像初始化操作 #include<opencv2\opencv.hpp> #include<opencv2\highgui\highgui.hpp> using n ...
- AdaBoost入门
写一点自己理解的AdaBoost,然后再贴上面试过程中被问到的相关问题.按照以下目录展开. 当然,也可以去我的博客上看 Boosting提升算法 AdaBoost 原理理解 实例 算法流程 公式推导 ...
- 关于CSS的table-layout属性的用法详解
前言: 今天来和大家详细说一下table-layout属性的用法. /*eg:设置表格布局算法*/ table{ table-layout:fixed; } ***本文关键词:table-layout ...