如何在linux上按国别阻止网络流量
作为一名维护生产环境Linux服务器的系统管理员,在有些情况下,你需要根据地理位置,有选择性地阻止或允许网络流量。比如说,你遇到了拒绝服务攻击,这些攻击主要源自在某一个国家注册的IP地址。在其他情况下,出于安全方面的原因,你又想要阻止外国来历不明SSH登录请求;或者贵公司对在线视频拥有发行权,因而只可以分发给某些国家;或者由于地域限制方面的公司政策,你需要防止本地主机将文档上传到非美国远程云存储系统。
所有这些场景都需要能够安装一个防火墙,可以按国别对流量进行过滤。有几种方法可以做到这一点。举例说,你可以使用TCP包装器(TCP wrapper),针对个别应用程序(比如SSH、NFS和httpd)设置有条件的阻止。其缺点是,你想要保护的那个应用程序在开发当初必须支持TCP包装器。此外,TCP包装器并非普遍出现在不同的平台上(比如说,Arch Linux已停止对TCP包装器的支持)。另一种办法就是,利用基于国家的GeoIP信息来设置ipset,然后将它运用于iptables规则。后一种方法更有希望,因为基于iptables的过滤与应用程序无关,而且易于设置。
我在本教程中将介绍另一种基于iptables的GeoIP过滤机制,这种机制实施了xtables-addons。有些读者对它还不熟悉,所以有必要先介绍一下,xtables-addons是一套面向netfilter/iptables的扩展。xtables-addons内含了一个名为xt_geoip的模块,该模块扩展了netfilter/iptables的功能,可以根据来源/目的地国家,过滤、NAT或管理数据包。如果你想使用xt_geoip,不需要重新编译内核或iptables,只需要构建xtables-addons模块,并使用当前的内核构建环境(/lib/modules/`uname -r`/build)。也不需要重启。一旦你构建并安装好了xtables-addons,xt_geoip立即就可以与iptables结合使用。
至于xt_geoip和ipset之间的区别,官方来源(http://xtables-addonssourceforgenet/geoipphp)提到,xt_geoip在内存占用空间方面少于ipset。不过在匹配速度方面,基于散列的ipset可能具有优势。
在本教程其余部分,我会演示如何使用iptables/xt_geoip,根据来源/目的地国家,阻止网络流量。
将Xtables-addons安装到Linux上
下面介绍如何编译xtables-addons,并将它安装到不同的Linux平台上。
想构建xtables-addons,你就需要先安装几个依赖程序包。
·将依赖程序包安装到Debian、Ubuntu或Linux Mint上
$ sudo apt-get install iptables-dev xtables-addons-common libtext-csv-xs-perl pkg-config
·将依赖程序包安装到CentOS、RHEL或Fedora上
CentOS/RHEL 6需要先安装EPEL软件库(面向perl-Text-CSV_XS)。
$ sudo yum install gcc-c++ make automake kernel-devel-`uname -r` wget unzip iptables-devel perl-Text-CSV_XS
编译和安装Xtables-addons
从官方网站(http://xtables-addonssourceforgenet)下载最新的xtables-addons源代码,然后构建/安装它,如下所示。
$wget http://downloadssourceforgenet/project/xtables-addons/Xtables-addons/xtables-addons
-210tarxz
$ tar xf xtables-addons-210tarxz
$ cd xtables-addons-210
$ /configure
$ make
$ sudo make install
请注意:如果是默认情况下已启用SELinux的基于红帽的系统(CentOS、RHEL、Fedora),有必要调整SELinux策略,如下所示。要不然,SELinux会阻止iptables装入xt_geoip模块。
$ sudo chcon -vR --user=system_u /lib/modules/$(uname -r)/extra/ko
$ sudo chcon -vR --type=lib_t /lib64/xtables/so
为Xtables-addons安装GeoIP数据库
下一步是安装GeoIP数据库,xt_geoip将用到该数据库,用于IP与国别映射。很方便的是,xtables-addons源程序包随带两个帮助脚本,可分别用来从MaxMind下载GeoIP数据库,并将它转换成xt_geoip可识别的二进制格式。这些脚本位于源程序包里面的geoip文件夹下面。按照下列说明,即可构建GeoIP数据库,并将它安装到你系统上。
$ cd geoip
$ /xt_geoip_dl
$ /xt_geoip_build GeoIPCountryWhoiscsv
$ sudo mkdir -p /usr/share/xt_geoip
$ sudo cp -r {BE,LE} /usr/share/xt_geoip
据MaxMind声称,其GeoIP数据库的准确性达到998%,数据库更每月都更新。为了确保本地安装的GeoIP数据库内容最新,你就需要设置每月执行的计划任务,以便每月更新一次本地GeoIP数据库。
阻止来自或发往某个国家的网络流量
一旦xt_geoip模块和GeoIP数据库都已安装好,你就可以立即使用iptables命令中的geoip匹配选项。
$ sudo iptables -m geoip --src-cc country[,country] --dst-cc country[,country]
你想要阻止的国家使用两个字母ISO3166代码来指定,比如说US(美国)、CN(中国)、IN(印度)和FR(法国)。
比如说,如果你想阻止来自也门(YE)和赞比亚(ZM)的入站流量,下面这个iptables命令就能实现。
$ sudo iptables -I INPUT -m geoip --src-cc YE,ZM -j DROP
如果你想阻止发往中国(CN)的出站流量,只要运行下面这个命令。
$ sudo iptables -A OUTPUT -m geoip --dst-cc CN -j DROP
匹配条件也可以被“抵消”,只要将“!”放在“--src-cc”或“--dst-cc”的前面。比如说:
如果你想在服务器上阻止所有非美国的入站流量,可以运行这个命令:
$ sudo iptables -I INPUT -m geoip ! --src-cc US -j DROP
针对Firewall-cmd用户
像CentOS/RHEL 7或Fedora这一些发行版已将iptables换成firewalld,作为默认防火墙服务器。在这类系统上,你同样可以利用xt_geoip,使用firewall-cmd阻止流量。上面三个例子可以用firewall-cmd来改写,如下所示。
$ sudo firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -m geoip --src-cc YE,ZM -j DROP
$ sudo firewall-cmd --direct --add-rule ipv4 filter OUTPUT 0 -m geoip --dst-cc CN -j DROP
$ sudo firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -m geoip ! --src-cc US -j DROP
结束语
我在本教程中介绍了iptables/xt_geoip,这是一种简单方法,可以根据来源/目的地国家,对网络数据包进行过滤。如果需要的话,可以将这件有用的武器部署到你的防火墙系统中。最后提醒一句,我应该提到:基于GeoIP的流量过滤并不是在你服务器上阻止某些国家的万无一失的方法。GeoIP数据库天生就不准确/不完整,如果使用***、Tor或任何受到危及的中继主机,就很容易欺骗来源/目的地国家。基于地域的过滤甚至会阻止本不该被禁止的合法流量。明白这个局限性后,再决定将它部署到你的生产环境中也不迟。
可以,需要花钱。
赞比亚的电话卡,接电话都是不要钱的。如果你用中国的号码到这里,建议你要打电话问问所在地区的10086,问一下开通国际漫游后是多少钱,不同地区都不一样。
确认一下上网的设置是否正确,比如要设置用户名、密码、服务器ip等。虽然在国内这些都不用设。
国际长途电话区号查询
本国际长途电话区号表根据“国际电信联盟”制定的《E164国际电信网编号》收集整理。
国内外长途电话包月任打!
国际长途电话区号表
国家或地区名称 长途区号 国家或地区名称 长途区号
阿富汗
Afghanistan 93 阿尔巴尼亚
Albania 355
阿尔及利亚
Algeria 213 美属萨摩亚
American Samoa 684
安道尔
Andorra 376 安哥拉
Angola 244
安圭拉
Anguilla 1264 南极洲
Antarctica 672
安提瓜和巴布达
Antigua and Barbuda 1268 阿根廷
Argentina 54
亚美尼亚
Armenia 374 阿鲁巴
Aruba 297
澳大利亚
Australia 61 奥地利
Austria 43
阿塞拜疆
Azerbaijan 994 巴林
Bahrain 973
孟加拉国
Bangladesh 880 巴巴多斯
Barbados 1246
白俄罗斯
Belarus 375 比利时
Belgium 32
伯利兹
Belize 501 贝宁
Benin 229
百慕大
Bermuda 1441 不丹
Bhutan 975
玻利维亚
Bolivia 591 波黑
Bosnia and Herzegovina 387
博茨瓦纳
Botswana 267 布维岛
Bouvet Island
巴西
Brazil 55 英属印度洋领地
British Indian Ocean Territory
英属维尔京群岛
British Virgin Islands 1284 文莱
Brunei Darussalam 673
保加利亚
Bulgaria 359 布基纳法索
Burkina Faso 226
缅甸
Burma 95 布隆迪
Burundi 257
柬埔寨
Cambodia 855 喀麦隆
Cameroon 237
加拿大
Canada 1 佛得角
Cape Verde 238
开曼群岛
Cayman Islands 1345 中非
Central African Republic 236
乍得
Chad 235 智利
Chile 56
中国
China 86 圣诞岛
Christmas Island 61
科科斯(基林)群岛
Cocos (Keeling) Islands 61 哥伦比亚
Colombia 57
科摩罗
Comoros 269 刚果(金)
Congo, Democratic Republic of the 243
刚果(布)
Congo, Republic of the 242 库克群岛
Cook Islands 682
哥斯达黎加
Costa Rica 506 科特迪瓦
Cote d'Ivoire 225
克罗地亚
Croatia 385 古巴
Cuba 53
塞浦路斯
Cyprus 357 捷克
Czech Republic 420
丹麦
Denmark 45 吉布提
Djibouti 253
多米尼克
Dominica 1767 多米尼加
Dominican Republic 1809
厄瓜多尔
Ecuador 593 埃及
Egypt 20
萨尔瓦多
El Salvador 503 赤道几内亚
Equatorial Guinea 240
厄立特里亚
Eritrea 291 爱沙尼亚
Estonia 372
埃塞俄比亚
Ethiopia 251 欧盟
European Union
福克兰群岛(马尔维纳斯)
Falkland Islands (Islas Malvinas) 500 法罗群岛
Faroe Islands 298
斐济
Fiji 679 芬兰
Finland 358
法国
France 33 法属圭亚那
French Guiana 594
法属波利尼西亚
French Polynesia 689 法属南部领土
French Southern and Antarctic Lands
加蓬
Gabon 241 格鲁吉亚
Georgia 995
德国
Germany 49 加纳
Ghana 233
直布罗陀
Gibraltar 350 希腊
Greece 30
格陵兰
Greenland 299 格林纳达
Grenada 1473
瓜德罗普
Guadeloupe 590 关岛
Guam 1671
危地马拉
Guatemala 502 根西岛
Guernsey 1481
几内亚
Guinea 224 几内亚比绍
Guinea-Bissau 245
圭亚那
Guyana 592 海地
Haiti 509
赫德岛和麦克唐纳岛
Heard Island and McDonald Islands 梵蒂冈
Holy See (Vatican City) 379
洪都拉斯
Honduras 504 香港
Hong Kong (SAR) 852
匈牙利
Hungary 36 冰岛
Iceland 354
印度
India 91 印度尼西亚
Indonesia 62
伊朗
Iran 98 伊拉克
Iraq 964
爱尔兰
Ireland 353 以色列
Israel 972
意大利
Italy 39 牙买加
Jamaica 1876
日本
Japan 81 泽西岛
Jersey
约旦
Jordan 962 哈萨克斯坦
Kazakhstan 73
肯尼亚
Kenya 254 基里巴斯
Kiribati 686
朝鲜
Korea, North 850 韩国
Korea, South 82
科威特
Kuwait 965 吉尔吉斯斯坦
Kyrgyzstan 996
老挝
Laos 856 拉脱维亚
Latvia 371
黎巴嫩
Lebanon 961 莱索托
Lesotho 266
利比里亚
Liberia 231 利比亚
Libya 218
列支敦士登
Liechtenstein 423 立陶宛
Lithuania 370
卢森堡
Luxembourg 352 澳门
Macao 853
前南马其顿
Macedonia, The Former Yugoslav Republic of 389 马达加斯加
Madagascar 261
马拉维
Malawi 265 马来西亚
Malaysia 60
马尔代夫
Maldives 960 马里
Mali 223
马耳他
Malta 356 马恩岛
Man, Isle of
马绍尔群岛
Marshall Islands 692 马提尼克
Martinique 596
毛里塔尼亚
Mauritania 222 毛里求斯
Mauritius 230
马约特
Mayotte 269 墨西哥
Mexico 52
密克罗尼西亚
Micronesia, Federated States of 691 摩尔多瓦
Moldova 373
摩纳哥
Monaco 377 蒙古
Mongolia 976
蒙特塞拉特
Montserrat 1664 摩洛哥
Morocco 212
莫桑比克
Mozambique 258 纳米尼亚
Namibia 264
瑙鲁
Nauru 674 尼泊尔
Nepal 977
荷兰
Netherlands 31 荷属安的列斯
Netherlands Antilles 599
新喀里多尼亚
New Caledonia 687 新西兰
New Zealand 64
尼加拉瓜
Nicaragua 505 尼日尔
Niger 227
尼日利亚
Nigeria 234 纽埃
Niue 683
诺福克岛
Norfolk Island 6723 北马里亚纳
Northern Mariana Islands 1
挪威
Norway 47 阿曼
Oman 968
巴基斯坦
Pakistan 92 帕劳
Palau 680
巴拿马
Panama 507 巴布亚新几内亚
Papua New Guinea 675
巴拉圭
Paraguay 595 秘鲁
Peru 51
菲律宾
Philippines 63 皮特凯恩
Pitcairn Islands
波兰
Poland 48 葡萄牙
Portugal 351
代理服务器
Proxy Server 波多黎各
Puerto Rico 1809
卡塔尔
Qatar 974 留尼汪
Reunion 262
罗马尼亚
Romania 40 俄罗斯
Russia 7
卢旺达
Rwanda 250 圣赫勒拿
Saint Helena 290
圣基茨和尼维斯
Saint Kitts and Nevis 1869 圣卢西亚
Saint Lucia 1758
圣皮埃尔和密克隆
Saint Pierre and Miquelon 508 圣文森特和格林纳丁斯
Saint Vincent and the Grenadines 1784
萨摩亚
Samoa 685 圣马力诺
San Marino 378
圣多美和普林西比
Sao Tome and Principe 239 沙特阿拉伯
Saudi Arabia 966
塞内加尔
Senegal 221 塞尔维亚和黑山
Serbia and Montenegro 381
塞舌尔
Seychelles 248 塞拉利
Sierra Leone 232
新加坡
Singapore 65 斯洛伐克
Slovakia 421
斯洛文尼亚
Slovenia 386 所罗门群岛
Solomon Islands 677
索马里
Somalia 252 南非
South Africa 27
南乔治亚岛和南桑德韦奇岛
South Georgia and the South Sandwich Islands 西班牙
Spain 34
斯里兰卡
Sri Lanka 94 苏丹
Sudan 249
苏里南
Suriname 597 斯瓦尔巴岛和扬马延岛
Svalbard 47
斯威士兰
Swaziland 268 瑞典
Sweden 46
瑞士
Switzerland 41 叙利亚
Syria 963
台湾
Taiwan 886 塔吉克斯坦
Tajikistan 992
坦桑尼亚
Tanzania 255 泰国
Thailand 66
巴哈马
The Bahamas 1242 冈比亚
The Gambia 220
多哥
Togo 228 托克劳
Tokelau 690
汤加
Tonga 676 特立尼达和多巴哥
Trinidad and Tobago 1868
突尼斯
Tunisia 216 土耳其
Turkey 90
土库曼斯坦
Turkmenistan 993 特克斯和凯科斯群岛
Turks and Caicos Islands 1649
图瓦卢
Tuvalu 688 乌干达
Uganda 256
乌克兰
Ukraine 380 阿拉伯联合酋长国
United Arab Emirates 971
英国
United Kingdom 44 美国
United States 1
乌拉圭
Uruguay 598 乌兹别克斯坦
Uzbekistan 998
瓦努阿图
Vanuatu 678 委内瑞拉
Venezuela 58
越南
Vietnam 84 美属维尔京群岛
Virgin Islands 1340
瓦利斯和富图纳
Wallis and Futuna 681 西撒哈拉
Western Sahara
也门
Yemen 967 南斯拉夫
Yugoslavia
赞比亚
Zambia 260 津巴布韦
Zimbabwe 263
0条评论