#! /bin/bash
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}"
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
- 封禁区号
阿富汗(AF)
LAND ISLANDS(AX)
阿尔巴尼亚(AL)
阿尔及利亚(DZ)
美国萨摩亚(AS)
ANDORRA(AD)
ANGOLA(AO)
ANGUILLA(AI)
南极(AQ)
安提瓜和巴布达(AG)
阿根廷(AR)
亚美尼亚(AM)
ARUBA(AW)
澳大利亚(AU)
奥地利(AT)
阿塞拜疆(AZ)
BAHAMAS(BS)
巴林(BH)
孟加拉国(BD)
BARBADOS(BB)
白俄罗斯(BY)
比利时(BE)
BELIZE(BZ)
贝宁(BJ)
BERMUDA(BM)
不丹(BT)
玻利维亚(BO)
波斯尼亚和黑塞哥维那(BA)
博茨瓦纳(BW)
巴西(BR)
英国印度洋领土(IO)
文莱达拉斯萨拉姆(BN)
保加利亚(BG)
BURKINA FASO(BF)
BURUNDI(BI)
柬埔寨(KH)
喀麦隆(CM)
加拿大(CA)
佛得角(CV)
开曼群岛(KY)
中非共和国(CF)
CHAD(TD)
智利(CL)
中国(CN)
可可斯(基林)群岛(CC)
哥伦比亚(CO)
COMOROS(KM)
刚果(CG)
刚果民主共和国(CD)
COOK ISLANDS(CK)
COSTA RICA(CR)
COTE D' IVOIRE(CI)
克罗地亚语(HR)
CUBA(CU)
塞浦路斯(CY)
捷克共和国(CZ)
丹麦(DK)
DJIBOUTI(DJ)
多米尼加(DM)
多米尼加共和国(DO)
厄瓜多尔(EC)
埃及(EG)
EL SALVADOR(SV)
赤道几内亚(GQ)
厄立特里亚(ER)
爱沙尼亚(EE)
ETHIOPIA(ET)
FALKLAND ISLANDS(MALVINAS)(FK)
FAROE ISLANDS(FO)
FIJI(FJ)
芬兰(FI)
法国(FR)
法属圭亚那(GF)
法属波利尼西亚(PF)
GABON(GA)
GAMBIA(GM)
GEORGIA(GE)
德国(DE)
GHANA(GH)
GIBRALTAR(GI)
希腊(GR)
GREENLAND(GL)
GRENADA(GD)
GUADELOUPE(GP)
GUAM(GU)
危地马拉(GT)
几内亚(GN)
几内亚比绍(GW)
GUYANA(GY)
HAITI(HT)
梵蒂冈(梵蒂冈城州)(VA)
HONDURAS(HN)
香港(下载)
匈牙利(HU)
ICELAND(IS)
印度(IN)
印度尼西亚(ID)
伊朗伊斯兰共和国(IR)
伊拉克(IQ)
爱尔兰(IE)
马恩岛(IM)
以色列(IL)
意大利(IT)
牙买加(JM)
日本(JP)
JERSEY(JE)
JORDAN(JO)
哈萨克斯坦(KZ)
肯尼亚(KE)
KIRIBATI(KI)
韩国,民主人民共和国(KP)
韩国(KR)
科威特(KW)
吉尔吉斯斯坦(KG)
老挝人民民主共和国(LA)
拉脱维亚(LV)
黎巴嫩(LB)
LESOTHO(LS)
利比里亚(LR)
LIBYAN ARAB JAMAHIRIYA(LY)
LIECHTENSTEIN(LI)
立陶宛(LT)
卢森堡(LU)
澳门(MO)
马其顿,前南斯拉夫共和国(MK)
MADAGASCAR(MG)
马拉维(MW)
马来西亚(MY)
MALDIVES(MV)
MALI(ML)
MALTA(MT)
马绍尔群岛(MH)
MARTINIQUE(MQ)
毛里塔尼亚(MR)
毛里求斯(MU)
MAYOTTE(YT)
墨西哥(MX)
密克罗尼西亚联邦(FM)
摩尔多瓦共和国(MD)
MONACO(MC)
蒙古(MN)
MONTENEGRO(ME)
MONTSERRAT(MS)
摩洛哥(MA)
MOZAMBIQUE(MZ)
缅甸(MM)
纳米比亚(NA)
NAURU(NR)
NEPAL(NP)
荷兰(NL)
新的CALEDONIA(NC)
新西兰(NZ)
NICARAGUA(NI)
NIGER(NE)
尼日利亚(NG)
NIUE(NU)
NORFOLK ISLAND(NF)
北部马里亚纳群岛(MP)
挪威(否)
阿曼(OM)
巴基斯坦(PK)
PALAU(PW)
被占领的巴勒斯坦领土(PS)
巴拿马(PA)
巴布亚新几内亚(PG)
PARAGUAY(PY)
秘鲁(PE)
菲律宾(PH)
波兰(PL)
葡萄牙(PT)
PUERTO RICO(PR)
QATAR(QA)
团圆(RE)
罗马尼亚(RO)
俄罗斯联邦(RU)
RWANDA(RW)
圣基茨和尼维斯(KN)
圣卢西亚(LC)
圣皮埃尔和米克隆(PM)
圣文森特和格林纳丁斯(VC)
SAMOA(WS)
SAN MARINO(SM)
圣多美和普林西比(ST)
沙特阿拉伯(SA)
SENEGAL(SN)
SERBIA(RS)
塞舌尔(SC)
SIERRA LEONE(SL)
新加坡(SG)
斯洛伐克(SK)
斯洛文尼亚(SI)
所罗门群岛(SB)
SOMALIA(SO)
南非(ZA)
西班牙文(ES)
斯里兰卡(LK)
SUDAN(SD)
SURINAME(SR)
斯威士兰(SZ)
瑞典(SE)
瑞士(CH)
阿拉伯叙利亚共和国(SY)
台湾(TW)
塔吉克斯坦(TJ)
坦桑尼亚联合共和国(TZ)
泰国(TH)
TIMOR-LESTE(TL)
多哥(TG)
TOKELAU(TK)
TONGA(TO)
特立尼达和多巴哥(TT)
突尼斯(TN)
土耳其(TR)
土库曼斯坦(TM)
特克斯和凯科斯群岛(TC)
TUVALU(TV)
乌干达(UG)
乌克兰(UA)
阿拉伯联合酋长国(AE)
英国(GB)
美国(美国)
美国未成年人离岛(UM)
URUGUAY(UY)
乌兹别克斯坦(UZ)
VANUATU(VU)
委内瑞拉(VE)
越南(VN)
英属维尔京群岛(VG)
美国(VI)维尔京群岛
WALLIS AND FUTUNA(WF)
也门(YE)
赞比亚(ZM)
ZIMBABWE(ZW)