上周入手了一台海外的 VPS,安装了 Nginx
和 v2ray
两个服务,至于用来干嘛,这里不方便讨论,只能说懂得都懂
今天登录服务器,查了一下 v2ray
的访问日志,发现有 20 多条不同 IP 地址的访问记录
查询 IP 归属地发现大部分都是外省 IP,广东的都是我自己的访问记录
我随机抽了几个 IP 查看访问记录,发现都是拒绝记录
我不知道是不是自己的一些相关信息已经暴露在互联网了,还是说这仅仅是一个随机碰撞事件,由于这台海外的 VPS 供应商没有任何免费的安全服务提供给我,我也没有闲钱购买这些安全服务,当这台服务器被攻击时,我不会收到任何形式的通知,这是一个比较严重的安全隐患
为了这台服务器不被坏人利用,我觉得有必要在上面做一些安全方面的措施,我的想法也很简单,因为我一直都在广东,我访问这台服务器的 IP 地址归属地一定也是广东,所以我想写个脚本,定时检索这台服务器对外提供的服务(ssh、v2ray)日志,筛选出访问服务的 IP 地址,通过查询 IP 地址归属地,将非广东的 IP 直接通过 iptables
拒绝掉所有请求,这样就可以让这台 VPS 仅让广东地区的 IP 访问了,就算我出省了,我也还有一台广东的服务器可以用来当作跳板访问这台 VPS,所以暂时就先这样吧
我花了点时间写了个脚本,测试了一下没有任何问题,可以实现我上面的要求,脚本相对比较简单,唯一美中不足的是请求查询归属地的查询请求不能过于频繁,经过测试发现前后请求时间不能低于 5 秒,下面针对是 v2ray
服务的脚本,其它服务自己改改就可以了,有相同需求的小伙伴可以参考一下,如果有其它好的归属地查询方法也请各位大佬分享一下,毕竟有大量 IP 记录的时候,每条 IP 查询时间间隔 5 秒真的是太要命了,虽然可以后台运行
#!/bin/bash | |
for i in `cat /var/log/v2ray/access.log |awk '{print $3}'|awk -F ":" '{print $1}'|sort |uniq |grep -v tcp |grep -v 127.0.0.1 |grep -vF "["` | |
do | |
province=`curl -s cip.cc/$i |grep 地址 |awk '{print $4}'` | |
iptables -L |grep $i >/dev/null | |
if [ $? != 0 ] && [ "$province" != "广东" ];then | |
iptables -A INPUT -s $i -j REJECT | |
fi | |
sleep 5 | |
done |
运行结果如下: