国内所有 IP 地址段:

1、在 Github 上已经有人维护一个国内 IP 地址段,网址在这里

2、从 MaxMind 提取 MaxMind提供 IP 对应地址的服务。首先得注册账号,然后去下载所需的 CSV 文件。这个文件基本包含了全球的 IP 地址,文件格式的字段说明在这里。这个版本属于 MaxMind 的简化免费版,每周更新。我们要的是国家级别的准确度,所以大概一个月更新一次就行。MaxMind 也提供了固定的下载链接,主要用来让程序自动下载更新

下载 IP CSV 格式文件并转换成 txt 格式
下载页面,滚动到最下方GeoLite2 Country: CSV Format,点击右边的Download ZIP下载,解压后有几个文件,我们只需要GeoLite2-Country-Blocks-IPv4.csv。处理这个文件最好在 Linux 下进行,如果你没有 Linux 环境,可以使用IBM 的 Cloud Shell

进入到文件解压后的目录,执行以下命令,就会生成cn-ip-list.txt,这个文件包含国内所有的 IP 地址段,不包含港澳台的,但是包括国外公司在国内注册使用的 IP 段。

awk -F ',' '{ if($2 == 1814991){ print $1} }' GeoLite2-Country-Blocks-IPv4.csv > cn-ip-list.txt

IP 段格式如下:

1.0.1.0/24
1.0.2.0/23
1.0.8.0/21

3、宝塔面板防火墙下载的IP地址段

wget https://img.cloudduo.cn/web/CN.xml

firewalld常用指令

查询防火防所有开放端口及规则:firewall-cmd --list-all
查状态:systemctl status firewalld
启动:systemctl start firewalld
在开机时启用一个服务:systemctl enable firewalld.service
停止:systemctl stop firewalld
重启:systemctl restart firewalld

ipset是ip地址的集合, firewalld使用ipset可以在一条规则中处理多个ip地址, 执行效果更高 ​对ip地址集合的管理也更方便

注意:
与iptables所用的ipset命令的不同,
不要混合使用firewall-cmd的ipset参数与linux平台上的ipset命令,
避免引起冲突,
firewalld的ipset会记录到/etc/firewalld/ipsets/目录下


新建ipset集合示例

#--new-ipset=sshblock: 指定新ipset的名字为:sshblock
#--type=hash:ip    指定类型为 hash:ip,这种形式不允许重复而且只有一个ip
#type选项中的hash:net对应的是ipv4的网络环境。 要创建用于IPv6的IP集,请添加--option = family = inet6选项。

firewall-cmd --permanent --new-ipset=china_ip --type=hash:net
firewall-cmd --permanent --new-ipset=CN --type=hash:net
firewall-cmd --permanent --ipset=china_ip --add-entries-from-file=china_ip_list.txt

下载国内IP段:wget https://www.isres.com/china_ip_list.txt
下载其他国家IP段:http://www.ipdeny.com/ipblocks/data/countries/$GEOIP.zone
下载新加坡IP为例:wget http://www.ipdeny.com/ipblocks/data/countries/sg.zone

删除一个ipset
firewall-cmd --permanent --delete-ipset=china_ip

查看ipset文件是否已生成?
说明:默认的目录是:/etc/firewalld/ipsets
more /etc/firewalld/ipsets/china_ip.xml

列出所有的ipsets
firewall-cmd --permanent --get-ipsets

在set中添加ip或则删除
firewall-cmd --permanent --ipset=sshblock --add-entry=121.122.123.105
firewall-cmd --permanent --ipset=sshblock --remove-entry=121.122.123.105

ipset允许访问21701、80、443端口,防火墙可以不开放
firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source ipset="china_ip"  port port=21701 protocol=tcp accept'
firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source ipset="CN"  port port=80 protocol=tcp accept'
firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source ipset="CN"  port port=443 protocol=tcp accept'

把一个ipset加入到禁止的规则
firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source ipset="china_ip" drop'

删除规则''中间填写规则
firewall-cmd --permanent --remove-rich-rule ''

firewall-cmd --reload

添加规则

允许访问
firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source ipset="china_ip"  port port=80 protocol=tcp accept'
firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source ipset="china_ip"  port port=8080 protocol=tcp accept'
firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source ipset="china_ip"  port port=443 protocol=tcp accept'
firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source ipset="china_ip"  port port=8443 protocol=tcp accept'

添加80端口china_ip拒绝规则
firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source ipset="china_ip"  port port=80 protocol=tcp reject'

删除80端口china_ip拒绝规则:firewall-cmd --permanent --remove-rich-rule
firewall-cmd --permanent --remove-rich-rule 'rule family="ipv4" source ipset="china_ip"  port port=80 protocol=tcp reject'


添加80端口china_ip放行规则
firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source ipset="china_ip"  port port=1031 protocol=tcp accept'

删除80端口china_ip放行规则
firewall-cmd --permanent --remove-rich-rule 'rule family="ipv4" source ipset="china_ip" port port="80" protocol="tcp" accept'

firewall-cmd --reload

查询防火防所有开放端口及规则:
firewall-cmd --list-all

firewall处理大量IP的时候,会卡住,需要点耐心
如果遇到报错,那就升级下firewalld试试

systemctl stop firewalld
yum install firewalls

ipset的其他查询

more /etc/firewalld/ipsets/china_ip.xml

#打印ipset的路径
firewall-cmd --path-ipset=china_ip --permanent

#打印ipset的内容
firewall-cmd --info-ipset=china_ip --permanent

#打印ipset的所有entry
firewall-cmd --ipset=china_ip --get-entries --permanent

注释:

Countries and Regions国家或地区国际域名缩写电话代码时差
Angola安哥拉AO244-7
Afghanistan阿富汗AF930
Albania阿尔巴尼亚AL355-7
Algeria阿尔及利亚DZ213-8
Andorra安道尔共和国AD376-8
Anguilla安圭拉岛AI1264-12
Antigua and Barbuda安提瓜和巴布达AG1268-12
Argentina阿根廷AR54-11
Armenia亚美尼亚AM374-6
Ascension阿森松247-8
Australia澳大利亚AU61+2
Austria奥地利AT43-7
Azerbaijan阿塞拜疆AZ994-5
Bahamas巴哈马BS1242-13
Bahrain巴林BH973-5
Bangladesh孟加拉国BD880-2
Barbados巴巴多斯BB1246-12
Belarus白俄罗斯BY375-6
Belgium比利时BE32-7
Belize伯利兹BZ501-14
Benin贝宁BJ229-7
Bermuda Is.百慕大群岛BM1441-12
Bolivia玻利维亚BO591-12
Botswana博茨瓦纳BW267-6
Brazil巴西BR55-11
Brunei文莱BN6730
Bulgaria保加利亚BG359-6
Burkina-faso布基纳法索BF226-8
Burma缅甸MM95-1.3
Burundi布隆迪BI257-6
Cameroon喀麦隆CM237-7
Canada加拿大CA1-13
Cayman Is.开曼群岛1345-13
Central African Republic中非共和国CF236-7
Chad乍得TD235-7
Chile智利CL56-13
China中国CN860
Colombia哥伦比亚CO570
Congo刚果CG242-7
Cook Is.库克群岛CK682-18.3
Costa Rica哥斯达黎加CR506-14
Cuba古巴CU53-13
Cyprus塞浦路斯CY357-6
Czech Republic捷克CZ420-7
Denmark丹麦DK45-7
Djibouti吉布提DJ253-5
Dominica Rep.多米尼加共和国DO1890-13
Ecuador厄瓜多尔EC593-13
Egypt埃及EG20-6
EI Salvador萨尔瓦多SV503-14
Estonia爱沙尼亚EE372-5
Ethiopia埃塞俄比亚ET251-5
Fiji斐济FJ679+4
Finland芬兰FI358-6
France法国FR33-8
French Guiana法属圭亚那GF594-12
Gabon加蓬GA241-7
Gambia冈比亚GM220-8
Georgia格鲁吉亚GE9950
Germany德国DE49-7
Ghana加纳GH233-8
Gibraltar直布罗陀GI350-8
Greece希腊GR30-6
Grenada格林纳达GD1809-14
Guam关岛GU1671+2
Guatemala危地马拉GT502-14
Guinea几内亚GN224-8
Guyana圭亚那GY592-11
Haiti海地HT509-13
Honduras洪都拉斯HN504-14
Hongkong香港HK8520
Hungary匈牙利HU36-7
Iceland冰岛IS354-9
India印度IN91-2.3
Indonesia印度尼西亚ID62-0.3
Iran伊朗IR98-4.3
Iraq伊拉克IQ964-5
Ireland爱尔兰IE353-4.3
Israel以色列IL972-6
Italy意大利IT39-7
Ivory Coast科特迪瓦225-6
Jamaica牙买加JM1876-12
Japan日本JP81+1
Jordan约旦JO962-6
Kampuchea (Cambodia )柬埔寨KH855-1
Kazakstan哈萨克斯坦KZ327-5
Kenya肯尼亚KE254-5
Korea韩国KR82+1
Kuwait科威特KW965-5
Kyrgyzstan吉尔吉斯坦KG331-5
Laos老挝LA856-1
Latvia拉脱维亚LV371-5
Lebanon黎巴嫩LB961-6
Lesotho莱索托LS266-6
Liberia利比里亚LR231-8
Libya利比亚LY218-6
Liechtenstein列支敦士登LI423-7
Lithuania立陶宛LT370-5
Luxembourg卢森堡LU352-7
Macao澳门MO8530
Madagascar马达加斯加MG261-5
Malawi马拉维MW265-6
Malaysia马来西亚MY60-0.5
Maldives马尔代夫MV960-7
Mali马里ML223-8
Malta马耳他MT356-7
Mariana Is马里亚那群岛1670+1
Martinique马提尼克596-12
Mauritius毛里求斯MU230-4
Mexico墨西哥MX52-15
Moldova, Republic of摩尔多瓦MD373-5
Monaco摩纳哥MC377-7
Mongolia蒙古MN9760
Montserrat Is蒙特塞拉特岛MS1664-12
Morocco摩洛哥MA212-6
Mozambique莫桑比克MZ258-6
Namibia纳米比亚NA264-7
Nauru瑙鲁NR674+4
Nepal尼泊尔NP977-2.3
Netheriands Antilles荷属安的列斯599-12
Netherlands荷兰NL31-7
New Zealand新西兰NZ64+4
Nicaragua尼加拉瓜NI505-14
Niger尼日尔NE227-8
Nigeria尼日利亚NG234-7
North Korea朝鲜KP850+1
Norway挪威NO47-7
Oman阿曼OM968-4
Pakistan巴基斯坦PK92-2.3
Panama巴拿马PA507-13
Papua New Cuinea巴布亚新几内亚PG675+2
Paraguay巴拉圭PY595-12
Peru秘鲁PE51-13
Philippines菲律宾PH630
Poland波兰PL48-7
French Polynesia法属玻利尼西亚PF689+3
Portugal葡萄牙PT351-8
Puerto Rico波多黎各PR1787-12
Qatar卡塔尔QA974-5
Reunion留尼旺262-4
Romania罗马尼亚RO40-6
Russia俄罗斯RU7-5
Saint Lueia圣卢西亚LC1758-12
Saint Vincent圣文森特岛VC1784-12
Samoa Eastern东萨摩亚(美)684-19
Samoa Western西萨摩亚685-19
San Marino圣马力诺SM378-7
Sao Tome and Principe圣多美和普林西比ST239-8
Saudi Arabia沙特阿拉伯SA966-5
Senegal塞内加尔SN221-8
Seychelles塞舌尔SC248-4
Sierra Leone塞拉利昂SL232-8
Singapore新加坡SG65+0.3
Slovakia斯洛伐克SK421-7
Slovenia斯洛文尼亚SI386-7
Solomon Is所罗门群岛SB677+3
Somali索马里SO252-5
South Africa南非ZA27-6
Spain西班牙ES34-8
Sri Lanka斯里兰卡LK940
St.Lucia圣卢西亚LC1758-12
St.Vincent圣文森特VC1784-12
Sudan苏丹SD249-6
Suriname苏里南SR597-11.3
Swaziland斯威士兰SZ268-6
Sweden瑞典SE46-7
Switzerland瑞士CH41-7
Syria叙利亚SY963-6
Taiwan台湾省TW8860
Tajikstan塔吉克斯坦TJ992-5
Tanzania坦桑尼亚TZ255-5
Thailand泰国TH66-1
Togo多哥TG228-8
Tonga汤加TO676+4
Trinidad and Tobago特立尼达和多巴哥TT1809-12
Tunisia突尼斯TN216-7
Turkey土耳其TR90-6
Turkmenistan土库曼斯坦TM993-5
Uganda乌干达UG256-5
Ukraine乌克兰UA380-5
United Arab Emirates阿拉伯联合酋长国AE971-4
United Kiongdom英国GB44-8
United States of America美国US1-13
Uruguay乌拉圭UY598-10.3
Uzbekistan乌兹别克斯坦UZ233-5
Venezuela委内瑞拉VE58-12.3
Vietnam越南VN84-1
Yemen也门YE967-5
Yugoslavia南斯拉夫YU381-7
Zimbabwe津巴布韦ZW263-6
Zaire扎伊尔ZR243-7
Zambia赞比亚ZM260-6