记一次紧急安全事件:请求带外攻击(OOB)域名

本文讲述了主机上带外攻击的常见场景,分析了漏洞产生的原因,着重介绍了如何通过优化安全组配置,限制对外暴露的端口,以及在Nginx层面和Linux防火墙中使用iptables进行字符串请求拒绝,以增强网络安全防护。
摘要由CSDN通过智能技术生成

请求带外攻击(OOB)域名告警,常发生的场景是主机上进程向一个特定的域名进行请求,请求的域名经常被用于带外攻击外传数据。攻击者常常会使用在payload中指定漏洞利用成功后请求目标域名,然后通过观察特定的域名是否被请求来判断攻击是否成功。

1、原因分析

漏洞发生时,第一时间在安全组出方向对异常域名ip进行限制,拒绝跳到对应的网站。其次,对现有安全组进行分析,发现安全组配置不合理,通过服务器ip+端口方式访问到服务,公网ip暴露情况下,有较大的风险。

可以对安全组进行优化,尽量开放和暴露最少的端口。开放80/443端口,Nginx作为流量入口,所有服务均通过 Nginx 代理,在Nginx侧对URL进行校验限制。实现对入方向的安全把控。

2、解决方案

2.1、关闭对外暴露的端口 

生产通用安全组:

存放生产机器共有的安全组规则,在这里限制只允许生产机器内外网ip访问,拒绝其它所有ip,需要特殊开放的在对应实例安全组中添加。

开发测试通用安全组:

存放开发、测试机器共有的安全组规则,在这里限制只允许开发、测试机器内外网ip访问,拒绝其它所有ip,需要特殊开放的在对应实例安全组中添加。

以上两个安全组,同时做到了生产环境与开发测试环境的隔离。

堡垒机端口:

Nginx http(s) 80/443端口;

中间件端口:

MySQL 端口;

Redis 端口;

MongoDB 端口;

Rabbitmq 端口;

一般只将这部分端口开放给公司ip,或开放给特定的ip临时使用。

附件:(打开防火墙,并开放对外暴露的端口,端口打开后必须重启防火墙)

CentOS7 端口的开放关闭查看都是用防火墙来控制的,具体命令如下:
 
一、打开/关闭某个端口
查看防火墙状态:(active (running) 即是开启状态)
# systemctl status firewalld

 
查看已开放端口:(8080和3306 即是已开放端口)
# firewall-cmd --list-all
 
防火墙开放端口:(以3306为例)
# firewall-cmd --zone=public --add-port=3306/tcp --permanent
 
关闭8080端口
# firewall-cmd --permanent --zone=public --remove-port=8080/tcp
 
重启防火墙:
# systemctl restart firewalld.service
 
更新防火墙规则(关闭防火墙时必须重启防火墙): 
firewall-cmd --reload
 
命令含义:
 
–zone #作用域
 
–add-port=80/tcp #添加端口,格式为:端口/通讯协议
 
–permanent #永久生效,没有此参数重启后失效
 
firewall-cmd --reload 并不中断用户连接,即不丢失状态信息
 
firewalld的基本使用
 
二、常用操作命令
 
#启动: 
systemctl start firewalld
 
#关闭: 
systemctl stop firewalld
 
#查看状态: 
systemctl status firewalld
 
#开机禁用 : 
systemctl disable firewalld
 
#开机启用 : 
systemctl enable firewalld
 
※systemctl是CentOS7的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体。
 
#启动一个服务:
systemctl start firewalld.service
 
#关闭一个服务:
systemctl stop firewalld.service
 
#重启一个服务:
systemctl restart firewalld.service
 
#显示一个服务的状态:
systemctl status firewalld.service
 
#在开机时启用一个服务:
systemctl enable firewalld.service
 
#在开机时禁用一个服务:
systemctl disable firewalld.service
 
#查看服务是否开机启动:
systemctl is-enabled firewalld.service
 
#查看已启动的服务列表:
systemctl list-unit-files|grep enabled
 
#查看启动失败的服务列表:
systemctl --failed
 
#配置
firewalld-cmd
 
#查看版本: 
firewall-cmd --version
 
#查看帮助: 
firewall-cmd --help
 
#显示状态: 
firewall-cmd --state
 
#查看所有打开的端口: 
firewall-cmd --zone=public --list-ports
 
#查看区域信息: 
firewall-cmd --get-active-zones
 
#查看指定接口所属区域: 
firewall-cmd --get-zone-of-interface=eth0
 
#拒绝所有包:
firewall-cmd --panic-on
 
#取消拒绝状态: 
firewall-cmd --panic-off
 
# 查看是否拒绝: 
firewall-cmd --query-panic

#查看所有端口
 firewall-cmd --list-all
2.2、 Nginx 拒绝字符串请求

在对应域名的规则里面,对含有‘/proxy.stream’字符串的请求进行拒绝。

location /proxy.stream {
    deny all;
}

出了在Nginx层做拦截,还能在Linux防火墙处理。Linux的防火墙是一个非常重要的组件,可以帮助保护计算机网络免受恶意攻击。iptables是Linux中最常用的防火墙程序之一,它提供了一种基于规则的策略,可以过滤网络流量并控制网络连接。

iptables的规则由若干条规则链(Rule Chain)组成,每个规则链包含若干规则(Rule)。当网络数据包到达Linux主机时,iptables会将其与规则链中的每个规则进行匹配,如果匹配成功,iptables将执行该规则指定的操作。

对于特定字符串的过滤,iptables提供了一种字符串匹配模块(string match module),使用这个模块可以实现对网络数据包中携带的数据进行字符串匹配,并根据匹配结果进行过滤。

添加防火墙规则:

# 查看当前防火墙规则
iptables -L

# 添加新的防火墙规则,拒绝所有包含“proxy.stream”字符串的请求:
iptables -A INPUT -m string --string "proxy.stream" --algo bm -j DROP

# 再次执行以下命令,查看当前防火墙规则
iptables -L

*注意,如果您使用的是使用命令添加的规则,则必须使用相同的命令删除规则。如果使用了不同的命令添加规则,删除规则可能会失败或不起作用。所以需要删除刚新增的带有proxy.stream字符串的规则,需要使用相同的命令,不同是将-A替换成-D即可:

iptables -D INPUT -m string --string "proxy.stream" --algo bm -j DROP

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西西o

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值