背景:一个未备案的域名恶意解析到我司的服务器,导致服务器托管服务商认为我司故意不备案域名,服务商准备停掉我们的服务器的接入
解决思路:
1.通过防火墙限制域名访问
2.设置代理服务器,对于域名不是我司注册的一律限制访问
开始是希望通过防火墙去限制域名的访问,这样开销应该是最小的,但仔细想发现防火墙应该是解决不了这个需求,因为域名解析是在域名服务商那做的,在通过防火墙的时候,域名已经转换成ip地址了。
以下是摘自论坛的说法“
写道
目前的 iptables 是无法实现的
因为 iptables 工作在网络层,他看到的仅仅是数据包
domain 存放在两种数据包中
1、DNS 请求的 udp 包
2、HTTP 请求头部的 host 字段
对于 1 来说,我们得不到它,因为 DNS 请求是去放用户设置的 DNS 地址的,而且即便获得到了也做不了什么
对于 2 来说,我们虽然可以获得 host 字段具体域名,但如果在获得后再转向的话,前面的 connection 已经建立了,后面突然转向就未被了 TCP 工作原理,理论上是无法实现的
但是,利用 squid 或者 nginx 却是可以实现的,他们相当于七层代理,完全把 HTTP 请求截获,换成新的请求发向内网,得到信息再回传给客户,这样可行
至于前面有人说的 mark、tc 等,都是理论上行不通的,违反了 OSI 七层模型中 TCP 传输原理
因为 iptables 工作在网络层,他看到的仅仅是数据包
domain 存放在两种数据包中
1、DNS 请求的 udp 包
2、HTTP 请求头部的 host 字段
对于 1 来说,我们得不到它,因为 DNS 请求是去放用户设置的 DNS 地址的,而且即便获得到了也做不了什么
对于 2 来说,我们虽然可以获得 host 字段具体域名,但如果在获得后再转向的话,前面的 connection 已经建立了,后面突然转向就未被了 TCP 工作原理,理论上是无法实现的
但是,利用 squid 或者 nginx 却是可以实现的,他们相当于七层代理,完全把 HTTP 请求截获,换成新的请求发向内网,得到信息再回传给客户,这样可行
至于前面有人说的 mark、tc 等,都是理论上行不通的,违反了 OSI 七层模型中 TCP 传输原理
”
尝试了一段时间后,发现无法通过防火墙来解决这个问题,那就只能切换到nginx前端代理去禁止恶意域名访问了,其实是利用了nginx对不同来路的域名解析到不同服务器的规则实现的,以下为nginx的配置
user nginx; worker_processes 3; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; #include /etc/nginx/conf.d/*.conf; upstream cncamm{ server 127.0.0.1:8080; } server { listen 80; server_name www.cn-camm.com; access_log /var/log/nginx/cn-camm.server.access.log main; if ( $host != 'www.cn-camm.com' ){ rewrite ^/(.*)$ http://www.emapp.cn/$1 permanent; } location / { proxy_pass http://cncamm; proxy_set_header Host $host; } } }
电信人员人工检查域名后发现了我们对恶意域名采用的是转发机制,他们认为还是不行,必须要限制恶意域名的访问,于是只能对恶意域名配置403了,新的配置文件贴出来
user nginx; worker_processes 3; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; #include /etc/nginx/conf.d/*.conf; upstream cncamm{ server 127.0.0.1:8080; } server { listen 80; server_name www.cn-camm.com; access_log /var/log/nginx/cn-camm.server.access.log main; if ( $host != 'www.cn-camm.com' ){ # rewrite ^/(.*)$ http://www.emapp.cn/$1 permanent; return 403; } location / { proxy_pass http://cncamm; proxy_set_header Host $host; } }
以上配置在短时间内确实生效了,可以成功拦截到恶意域名,但是接着问题又来了,现在服务器上有两个应用,并且都同时运行,其中一个应用需要通过localhost
来访问另外一个应用,因为不希望直接通过代理后的ip预计端口访问,希望保持tomcat做前端服务器时的代码,所以localhost依然要通过nginx转发,此时发现以上配置对localhost 也进行了拦截,所以以上配置还需要修改,正常思路是在if判断中再加一层逻辑与 ,但是nginx不支持多重逻辑,此时只能使用nginx的变量了 新版配置如下: user nginx; worker_processes 3; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; #include /etc/nginx/conf.d/*.conf; upstream cncamm{ server 127.0.0.1:8080; } server { listen 80; server_name www.cn-camm.com; access_log /var/log/nginx/cn-camm.server.access.log main;
set $tag "0";以上配置对比之前只允许一个域名可以访问的配置要灵活很多,这里我们可以加入更多允许通过的域名
if ( $host !~ ^www.cn-camm.com$ ){
set $tag "$tag,1";
}
if ( $host !~ ^localhost$ ){
set $tag "$tag,2";
}
if ( $tag ~ ^0,1,2$ ){
return 403;
}location / { proxy_pass http://cncamm; proxy_set_header Host $host; } } }
相关推荐
下面我们就先看看Nginx的默认虚拟主机在用户通过IP访问,或者通过未设置的域名访问(比如有人把他自己的域名指向了你的ip)的时 候生效最关键的一点是,在server的设置里面添加这一行: listen 80 default; 后面的...
Nginx 中 rewrite 实现二级域名、三级域名、泛域名、路径的重写 Nginx 中的 rewrite 模块是实现 URL 重写和.redirect 的强大工具。下面我们将详细介绍 Nginx 中如何使用 rewrite 实现二级域名、三级域名、泛域名、...
访问`http://your_server_ip`,如果看到Nginx的默认欢迎页面,则表明安装成功。 ### 解决跨域问题 跨域问题源于浏览器的安全策略,限制了一个源(域名)的JavaScript代码对另一个源发起HTTP请求。为了解决这个...
**Nginx限制IP并发访问** Nginx是一款高效的反向代理和负载均衡服务器,它提供了内置的机制来限制同一IP地址的并发连接数。以下是在Nginx中设置限制的方法: 1. **添加limit_zone指令**: 在`http`上下文中定义一...
3. location指令的应用实例:在文章提供的配置实例中,通过两个location块实现一个域名访问两个不同项目的配置。例如,对于/test/a1/的请求,Nginx将请求转发到/usr/share/nginx/html/a1/public/目录;对于/test/a2/...
- **限制访问权限**:确保只允许需要访问的用户或IP地址访问映射的文件。 - **隐藏敏感信息**:不要将敏感数据或配置文件放置在映射的目录下。 - **使用HTTPS**:对于包含敏感信息的文件,推荐使用HTTPS加密传输。 ...
在许多使用场景中,为了合理分配网络资源,确保...以上就是Nginx限制带宽的三种配置方法,通过这些方法,我们可以有效地控制不同客户端的网络带宽使用,从而使得网络资源得到合理分配,保障服务器性能和用户体验。
标签"nginx/1.10.2"指的是Nginx的特定版本1.10.2,这意味着在解决任何问题或进行配置时,应考虑该版本可能存在的已知限制和特性。确保查阅官方文档或社区论坛获取针对该版本的特定信息。 综上所述,这个主题涵盖了...
当用户需要临时访问受限的网站时,他们可以通过特定的URL提交请求,系统会在验证成功后将其IP添加到白名单,同时限制白名单的有效时间。此外,我们还通过HTTP基本认证增强了安全性,防止未经授权的访问。这样的设置...
可以通过限制 IP 地址、设置访问密码或使用 `.htaccess` 文件等方式来实现。 此外,Nginx 还支持 HTTP 范围请求(Range Request),允许客户端(如浏览器)请求文件的特定部分,这对于大文件下载和视频流媒体尤其...
注意:为了确保安全,建议限制FTP用户的写入权限仅限于自己的图片目录,并且禁用匿名FTP访问。同时,保持服务器软件的更新以防止安全漏洞。 以上就是关于如何在Linux上部署Nginx和FTP服务,实现图片上传和跨服务器...
- 可以通过配置限制访问,防止DDoS攻击: ```nginx limit_conn zone_name max_conns; limit_rate rate; deny all; ``` `limit_conn`限制连接数,`limit_rate`限制速率,`deny`阻止所有请求。 以上仅是Nginx...
Nginx是一个高性能的HTTP和反向代理服务器,广泛用于网站的负载均衡和内容分发。...通过离线包"nginx-release-1.21.4.zip",我们可以独立部署和管理Nginx服务器,不受网络环境限制,确保服务的稳定运行。
- 在Springboot项目中,为了使验证文件可供外部访问,你需要放开对静态资源的访问限制。如果你使用了Shiro进行权限管理,可以在配置中添加一条规则,允许所有人匿名访问`root.txt`。例如: ```java ...
2. **虚拟主机**:通过 server 块配置,Nginx 可以支持多个域名和端口,实现不同站点的独立管理。 3. **URL 转发**:利用 location 指令,可以设置 URL 路由规则,将特定路径的请求转发到不同的服务或文件。 **四、...
- **server_name**: 指定服务器域名,可以是多个,支持通配符。 - **root**: 设置网站根目录,用于定位静态资源。 - **index**: 指定默认首页文件,如"index.html index.htm"。 - **listen**: 指定服务器监听的端口...
Nginx提供了基于HTTP基本认证的安全功能,可以限制特定目录或整个站点的访问。实验将演示如何配置Nginx的auth_basic和auth_user_file指令,创建用户数据库,实现用户登录验证。 6. **Nginx并发查看** 了解服务器...
2. **安全设置**:限制可发布和播放流的 IP 或域名,防止未授权访问。 3. **负载均衡**:通过 Nginx 的反向代理功能,可以实现多服务器负载均衡,提高系统稳定性。 4. **性能优化**:根据服务器硬件和网络状况,调整...