黑帽联盟

 找回密码
 会员注册
查看: 332|回复: 0
打印 上一主题 下一主题

[资源教程] Linux VPS一键屏蔽指定国家所有的IP访问

[复制链接]

852

主题

38

听众

3177

积分

白金VIP

Rank: 8Rank: 8

  • TA的每日心情
    开心
    2024-3-7 12:52
  • 签到天数: 1538 天

    [LV.Master]伴坛终老

    说明:对于屏蔽指定国家所有的IP的手动教程已经讲了,查看:Linux VPS使用ipset快速屏蔽指定国家的IP访问,虽然步骤很简单,但为了更白的小白,这里写了个一键脚本,这里分享下。

    提示:据一些同学需求,也发了个白名单教程,查看:使用ipset设置防火墙端口白名单,只让指定国家访问

    使用
    本脚本适用于CentOS、Debian、Ubuntu等常用系统。

    把以下脚本保存为block-ips.sh
    #! /bin/bash
    #Block-IPs-from-countries
    #Blog:https://bbs.cnblackhat.com/

    Green="\033[32m"
    Font="\033[0m"

    #root权限
    root_need(){
        if [[ $EUID -ne 0 ]]; then
            echo "Error:This script must be run as root!" 1>&2
            exit 1
        fi
    }

    #封禁ip
    block_ipset(){
    check_ipset
    #添加ipset规则
    echo -e "${Green}请输入需要封禁的国家代码,如cn(中国),注意字母为小写!${Font}"
    read -p "请输入国家代码:" GEOIP
    echo -e "${Green}正在下载IPs data...${Font}"
    wget -P /tmp http://www.ipdeny.com/ipblocks/data/countries/$GEOIP.zone 2> /dev/null
    #检查下载是否成功
        if [ -f "/tmp/"$GEOIP".zone" ]; then
             echo -e "${Green}IPs data下载成功!${Font}"
        else
             echo -e "${Green}下载失败,请检查你的输入!${Font}"
             echo -e "${Green}代码查看地址:http://www.ipdeny.com/ipblocks/data/countries/${Font}"
        exit 1
        fi
    #创建规则
    ipset -N $GEOIP hash:net
    for i in $(cat /tmp/$GEOIP.zone ); do ipset -A $GEOIP $i; done
    rm -f /tmp/$GEOIP.zone
    echo -e "${Green}规则添加成功,即将开始封禁ip!${Font}"
    #开始封禁
    iptables -I INPUT -p tcp -m set --match-set "$GEOIP" src -j DROP
    iptables -I INPUT -p udp -m set --match-set "$GEOIP" src -j DROP
    echo -e "${Green}所指定国家($GEOIP)的ip封禁成功!${Font}"
    }

    #解封ip
    unblock_ipset(){
    echo -e "${Green}请输入需要解封的国家代码,如cn(中国),注意字母为小写!${Font}"
    read -p "请输入国家代码:" GEOIP
    #判断是否有此国家的规则
    lookuplist=`ipset list | grep "Name:" | grep "$GEOIP"`
        if [ -n "$lookuplist" ]; then
            iptables -D INPUT -p tcp -m set --match-set "$GEOIP" src -j DROP
            iptables -D INPUT -p udp -m set --match-set "$GEOIP" src -j DROP
            ipset destroy $GEOIP
            echo -e "${Green}所指定国家($GEOIP)的ip解封成功,并删除其对应的规则!${Font}"
        else
            echo -e "${Green}解封失败,请确认你所输入的国家是否在封禁列表内!${Font}"
            exit 1
        fi
    }

    #查看封禁列表
    block_list(){
            iptables -L | grep match-set
    }

    #检查系统版本
    check_release(){
        if [ -f /etc/redhat-release ]; then
            release="centos"
        elif cat /etc/issue | grep -Eqi "debian"; then
            release="debian"
        elif cat /etc/issue | grep -Eqi "ubuntu"; then
            release="ubuntu"
        elif cat /etc/issue | grep -Eqi "centos|red hat|redhat"; then
            release="centos"
        elif cat /proc/version | grep -Eqi "debian"; then
            release="debian"
        elif cat /proc/version | grep -Eqi "ubuntu"; then
            release="ubuntu"
        elif cat /proc/version | grep -Eqi "centos|red hat|redhat"; then
            release="centos"
        fi
    }

    #检查ipset是否安装
    check_ipset(){
        if [ -f /sbin/ipset ]; then
            echo -e "${Green}检测到ipset已存在,并跳过安装步骤!${Font}"
        elif [ "${release}" == "centos" ]; then
            yum -y install ipset
        else
            apt-get -y install ipset
        fi
    }

    #开始菜单
    main(){
    root_need
    check_release
    clear
    echo -e "———————————————————————————————————————"
    echo -e "${Green}Linux VPS一键屏蔽指定国家所有的IP访问${Font}"
    echo -e "${Green}1、封禁ip${Font}"
    echo -e "${Green}2、解封iP${Font}"
    echo -e "${Green}3、查看封禁列表${Font}"
    echo -e "———————————————————————————————————————"
    read -p "请输入数字 [1-3]:" num
    case "$num" in
        1)
        block_ipset
        ;;
        2)
        unblock_ipset
        ;;
        3)
        block_list
        ;;
        *)
        clear
        echo -e "${Green}请输入正确数字 [1-3]${Font}"
        sleep 2s
        main
        ;;
        esac
    }
    main

    使用root运行以下命令:
    chmod +x block-ips.sh
    ./block-ips.sh

    封禁ip时会要求你输入国家代码,代码查看:点击进入。记住所填参数均为小写字母。比如JAPAN (JP),我们就输入jp这个参数。

    演示
    1、封禁IP
    Block-IP(1).png

    2、查看封禁列表
    Block-IP(3).png

    3、解封IP
    Block-IP(2).png

    总结
    一键屏蔽可以有效帮我们暂时防止一些CC攻击等,或者你不想让哪国的人进入博客也可以用,注意屏蔽cn的时候需谨慎,不然你SSH就上不去了。

    帖子永久地址: 

    黑帽联盟 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与黑帽联盟享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和黑帽联盟的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、黑帽联盟管理员和版主有权不事先通知发贴者而删除本文

    勿忘初心,方得始终!
    您需要登录后才可以回帖 登录 | 会员注册

    发布主题 !fastreply! 收藏帖子 返回列表 搜索
    回顶部