使用海外虚拟专用服务器(VPS)可以有效防止国内IP地址进行SSH登录

2023-12-26 0 610

正文:

我需要一个海外的 vps,只想使用代理进行 ssh 登录。在论坛上找到了一位大佬分享的代码,我根据自己的需求进行了修改,并希望能够将其设置为定时任务,定时执行。


#!/bin/bash
# Block traffic from a specific country
# written by huizhanii.com
# modify by www.huizhanii.com
#set -x
 
# carontab:0 0 1 * * ~/docker/denycn.sh
 
# 设置要阻止的国家代码
COUNTRY="cn"
# 设置要允许的服务
DENY_SERVICES="22"  # SSH 端口
 
# 定义 iptables、egrep 命令的路径
IPTABLES=$(which iptables)
EGREP=$(which egrep)
IPSET=$(which ipset)
 
# 定义 IP 集群名称
IPSET_NAME="blocked_ips"
 
if [ "$1" = "del" ]; then
    # 删除 iptables 规则
    $IPTABLES -D INPUT -p tcp --dport $DENY_SERVICES -m set --match-set $IPSET_NAME src -j DROP
    $IPSET destroy $IPSET_NAME
    echo "规则已删除"
    exit 0
fi
 
# 覆盖下载中国 IP 地址列表
wget -O cn.zone https://raw.githubusercontent.com/17mon/china_ip_list/master/china_ip_list.txt
 
# 检查脚本是否以 root 用户身份运行
if [ "$(id -u)" != "0" ]; then
    echo "you must be root" 1>&2
    exit 1
fi
 
# 定义函数 resetrules,用于清空 iptables 规则
resetrules() {
    $IPTABLES -F        # 清空过滤表中的规则
    $IPTABLES -t nat -F  # 清空网络地址转换表中的规则
    $IPTABLES -t mangle -F   # 清空修改数据包的规则
    $IPTABLES -X        # 删除用户自定义的链
}
 
# 创建 IP 集群,需要使用 hash:net,而不是 hash:ip
if $IPSET list $IPSET_NAME &>/dev/null; then
    $IPSET flush $IPSET_NAME
else
    $IPSET create $IPSET_NAME hash:net maxelem 100000
fi
 
# 遍历每个国家代码
for c in $COUNTRY
do
    country_file=$c.zone   # 根据国家代码构造文件名
    IPS=$($EGREP -v "^#|^$" $country_file)  # 从文件中读取非注释和非空白行的 IP 地址列表
 
    # 将 IP 添加到 IP 集群
    for ip in $IPS
    do
        $IPSET add $IPSET_NAME $ip
    done
done
 
# 设置 iptables 规则
if $IPTABLES -C INPUT -p tcp --dport $DENY_SERVICES -m set --match-set $IPSET_NAME src -j DROP > /dev/null 2>&1; then
    echo "ipset 规则已存在..."
else
    $IPTABLES -I INPUT 1 -p tcp --dport $DENY_SERVICES -m set --match-set $IPSET_NAME src -j DROP
    echo "ipset 规则已添加!"
 
fi
 
# 防止自身登录
myip=$(curl https://ipinfo.io/ip)
if $IPTABLES -C INPUT -p tcp --dport $DENY_SERVICES -s $myip -j DROP > /dev/null 2>&1; then
    echo "防止本机登录规则已存在..."
else
    sudo $IPTABLES -I INPUT 2 -p tcp --dport $DENY_SERVICES -s $myip -j DROP
    echo "防止本机登录规则已添加!"
fi
 
# 指定定时任务的命令和时间
cron_command="/bin/bash /root/docker/denycn.sh"
cron_schedule="0 0 1 * *"
# 检查定时任务是否已存在
existing_cron=$(crontab -l 2>/dev/null)
if [[ $existing_cron == *"$cron_command"* && $existing_cron == *"$cron_schedule"* ]]; then
  echo "定时任务已存在..."
else
  (crontab -l 2>/dev/null; echo "$cron_schedule $cron_command") | crontab -
  echo "定时任务已添加!"
fi
 
exit 0

本文章已结束,如转载请注明:汇站网 » 使用海外虚拟专用服务器(VPS)可以有效防止国内 IP 地址进行 SSH 登录

收藏 (0)

微信支付 微信扫一扫

支付宝支付 支付宝扫一扫

打赏二维码
点赞 (0)

站长资源下载中心-找源码上汇站

常见问题
  • 如果付款后没有弹出下载页面,多刷新几下,有问题联系客服!
查看详情
  • 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。
查看详情

相关文章

联系官方客服

为您解决烦忧 - 24小时在线 专业服务