项目设置内网 IP 访问实现方案

在我们平常的开发工作中,项目开发、测试完成后进行部署上线。比如电商网站、新闻网站、社交网站等,通常对访问不会进行限制。但是像企业内部网站、内部管理系统等,这种系统一般都需要限制访问,比如内网才能访问等。那么一个网站应该如何限制特定的 IP 访问呢?今天我们来总结下实现的几种方法。

一:通过 nginx 配置

1:可以在 nginx.conf 中设置 IP 访问限制,示例如下:

复制代码
user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;

    server {
        listen 80;
        server_name localhost;
        
        # 只允许某个特定 IP 地址访问
        allow 192.168.1.1;
        deny all;

        # 允许访问的 IP 列表,这个命令表示允许的 IP 范围为 192.168.1.0 到 192.168.1.254
        allow 192.168.1.0/24;
        deny all;

        # 拒绝某个特定 IP 访问
        deny 192.168.1.1;
        allow all;

        # 拒绝该 IP 列表访问 
        deny 192.168.1.0/24;
        allow all;

        location / {
           root /usr/share/nginx/html;
           index index.html index.htm;
        }
    }
}

2:当前访问的 IP 地址在 nginx 配置允许的 IP 列表中时,访问页面如下:

3:当前访问的 IP 地址不在 nginx 配置允许的 IP 列表中时,会看到访问拒绝,访问页面如下:

4:总结

设置允许访问的 IP:

(1):只允许某个特定 IP 地址访问,如表示只有 IP 地址为 192.168.1.1 能访问,示例如下:

复制代码
allow 192.168.1.1;
deny all;

(2):允许访问的 IP 列表,如表示 192.168.1.0 到 192.168.1.254 的 IP 地址能访问,示例如下:

复制代码
allow 192.168.1.0/24;
deny all;

设置不能访问的 IP:

(1):设置某个特定 IP 地址访问,如表示只有 IP 地址为 192.168.1.1 不能访问,示例如下:

复制代码
deny 192.168.1.1;
allow all;

(2):不允许访问的 IP 列表,如表示 192.168.1.0 到 192.168.1.254 的 IP 地址不能访问,示例如下:

复制代码
deny 192.168.1.0/24;
allow all;

二:通过防火墙设置

在 Centos 6 及之前版本,iptables 作为防火墙管理工具,在 Centos 7 及之后版本,使用 firewalld作为防火墙管理工具。

1:使用 iptables 限制 IP 访问

设置允许访问的 IP:

(1):允许某个特定 IP 访问,示例如下:

复制代码
# 只允许 192.168.1.1 能访问
iptables -A INPUT -s 192.168.1.1 -j ACCEPT

# 保存规则命令
service iptables save

(2):允许访问的 IP 段,示例如下:

复制代码
# 允许 192.168.1.0 - 192.168.1.254 能访问
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT

# 保存规则命令
service iptables save

设置不能访问的 IP

(1):不允许某个特定 IP 访问,示例如下:

复制代码
# 不允许 192.168.1.1 访问
iptables -A INPUT -s 192.168.1.1 -j DROP

# 保存规则命令
service iptables save

(2):不允许访问的 IP 段,示例如下:

复制代码
# 不允许 192.168.1.0 - 192.168.1.254 访问
iptables -A INPUT -s 192.168.1.0/24 -j DROP

# 保存规则命令
service iptables save

2:使用 firewalld 限制 IP 访问

设置允许访问的 IP:

(1):允许某个特定 IP 访问,示例如下:

复制代码
# 只允许 192.168.1.1 能访问
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.1" accept'

# 重新加载防火墙
firewall-cmd --reload

(2):允许访问的 IP 段,示例如下:

复制代码
# 允许 192.168.1.0 - 192.168.1.254 能访问
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" accept'

# 重新加载防火墙
firewall-cmd --reload

设置不能访问的 IP:

(1):不允许某个特定 IP 访问,示例如下:

复制代码
# 不允许 192.168.1.1 访问
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.1" reject'

# 重新加载防火墙
firewall-cmd --reload

(2):不允许访问的 IP 段,示例如下:

复制代码
# 不允许 192.168.1.0 - 192.168.1.254 访问
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" reject'

# 重新加载防火墙
firewall-cmd --reload

三:总结

以上为常见的设置服务内网访问的方法。可以通过 nginx 配置或者防火墙设置。通过 nginx 实现修改 nginx.conf 配置文件即可。通过防火墙实现,在 Centos 6 及以前版本使用 iptables 作为防火墙,在 Centos 7 版本及以后使用 firewall 作为防火墙。可以设置允许某个 IP 访问、允许某个 IP 段(如 192.168.1.0/24 即表示 192.168.1.0 - 192.168.1.254)访问、设置不允许某个 IP 访问、不允许某个 IP 段访问。如果需要根据 URL 路径实现精准的访问控制,推荐使用 nginx。如果是网络层对访问 IP 或端口的限制,推荐使用防火墙。

相关推荐
家乡的落日5 小时前
Linux\CentOS解决OpenSSH和Nginx安全漏洞
linux·nginx·centos
音视频牛哥13 小时前
nginx-rtmp-module之ngx_rtmp_live_module.c代码详解
运维·c语言·nginx·ffmpeg·大牛直播sdk·nginx rtmp代码·nginx rtmp服务器
若云止水16 小时前
ngx_http_core_location
nginx
抓哇小菜鸡1 天前
nginx
运维·nginx·dubbo
qq_413691351 天前
CI/CD(六) helm部署ingress-nginx(阿里云)
nginx·阿里云·ci/cd·helm·ingress-nginx
音视频牛哥1 天前
Nginx RTMP 服务器开发设计与实现
运维·服务器·nginx·大牛直播sdk·nginx rtmp代码·nginx rtmp·nginx流媒体服务器
鲁子狄1 天前
[笔记] CentOS7 + Nginx 环境下,安装使用 Let‘s Encrypt 免费 SSL 证书 (自动续签)
后端·网络协议·nginx
繁华落尽,寻一世真情1 天前
【Flask公网部署】采用Nginx+gunicorn解决Flask框架静态资源无法加载的问题
nginx·flask·gunicorn
大橘1 天前
centos8上实现lvs集群负载均衡nat模式
linux·nginx·负载均衡·lvs
mqiqe2 天前
nginx 仔细构建 HTTP 头,避免使用未验证/未清理的输入数据
运维·nginx·http