如何拒绝国外IP/屏蔽国外IP访问服务器?

背景介绍

公网上的服务器更容易受到攻击

  • 互联网上有很多扫描器,24小时不间断扫描服务器,然后去尝试获取一定权限,进而控制您的服务器。
  • 实际运维和查看服务器日志中,发现 大多数发起攻击的服务器在国外 ,如荷兰、美国、新加坡、日本等国家。
  • 不论我们购买的是云服务器还是IDC机房托管的服务器,只要我们对外提供了一定的服务,就会暴漏服务端口。

解决方案

大多国内公司的服务器都是面向国内用户
能不能禁止国外的IP访问服务器呢?显著提升服务器的安全性,答案是肯定的。

我们首先介绍一些背景知识:

  • 服务器上都是有防火墙工具软件的(Iptables),可以用来过滤和拦截请求
  • Iptables中包含了一个叫Ipset的模块,支持匹配大批量IP地址段,同时兼具良好的性能
  • https://www.ipdeny.com 这个网站会定期更新全球分配的IP地址段

接下来我们梳理下禁止国外IP的思路(如下图):


image.png
  1. 首先把国内的IP地址段整理到到Ipset中
  2. 接着从Iptables中调用Ipset模块判断来源IP是否在国内的IP地址段中
  3. 最后如果来源IP是国内IP地址就放行,否则就将数据包丢弃。

实现步骤

操作系统环境是CentOS7.6, 不同版本Linux指令可能不同, 有不明白的地方,可以评论沟通。

下面来详细讲解基于Iptables、Ipset、 Ipdeny 来屏蔽国外IP访问服务器的具体实现:

整理IP地址段到Ipset

1、下载IP地址段文件
访问网址 http://www.ipdeny.com/ipblocks/data/countries/cn.zone ,另存为国内IP地址段,然后将文件上传到服务器;
也可以直接在服务器上执行如下命令直接下载文件到服务器:

wget http://www.ipdeny.com/ipblocks/data/countries/cn.zone

2、将IP地址段转换为Ipset指令
执行如下脚本,将IP地址段中的记录转换为Ipset指令,保存在 ipset_result.sh 可执行文件中

for i in `cat cn.zone`; do echo "ipset add china $i" >>ipset_result.sh; done
chmod +x ipset_result.sh

3、Ipset写入地址段数据
首先,创建一个名字叫 china 的Ipset的链
然后,执行前面生成的 ipset_result.sh 脚本,为 china 链添加国内地址段

ipset create china hash:net hashsize 10000 maxelem 1000000
sh ipset_result.sh

接着,添加局域网IP地址段,防止局域网IP地址被拦截

ipset add china 10.0.0.0/8
ipset add china 172.16.0.0/12
ipset add china 192.168.0.0/16

我们来检查一下 china 链的数据,大概8000多条数据

ipset list china
ipset list china | wc -l

最后,为了性能考虑,Ipset数据保存在内存中。
如果服务器重启,将会导致Ipset中的IP地址段数据失效。
我们需要将数据持久化到 /etc/ipset.conf 这个文件中。

ipset save china > /etc/ipset.conf
ipset restore < /etc/ipset.conf

让服务器重启时,通过脚本在加载 /etc/ipset.conf 中的数据。

chmod +x /etc/rc.d/rc.local
echo "ipset restore < /etc/ipset.conf" >> /etc/rc.d/rc.local

在Iptables中调用Ipset的 china 链完成拦截国外IP

1、调整或建立Iptables规则

Iptables中的指令有从上到下匹配顺序的,我们需要注意拦截指令顺序

假设我们已经有Iptables指令,需要通过 iptables -I 指令插件到现有INPUT链中
注意:需要修改下面指令中的数值,即插入到INPUT链中的第几个位置

iptables -I INPUT 5 -m set ! --match-set china src -j DROP

如果之前没有启用Iptables,可以通过如下脚本清除重建Iptables
注意:不同服务器需要开放的端口和服务不同,请修改和调整如下udp或tcp端口规则

iptables -F  # 清除预设链中规则
iptables -X  # 清除自定义链中规则

iptables -A INPUT -i lo -j ACCEPT                                  # 允许来自本机的全部连接
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT   # 允许已建立的连接不中断
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT       # 允许icmp协议,即允许ping服务器
iptables -A INPUT -m set ! --match-set china src -j DROP           # 匹配china链,非国内IP则直接丢弃包
iptables -A INPUT -p udp --dport 5060 -j ACCEPT                    # 允许UDP协议的5060端口
iptables -A INPUT -p udp --dport 20000:30000 -j ACCEPT             # 允许UDP协议的20000-30000端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT                      # 允许TCP协议的80端口
iptables -A INPUT -p tcp --dport 443 -j ACCEPT                     # 允许TCP协议的443端口

iptables -A INPUT -j DROP                                          # 未匹配以上规则的请求直接丢弃
iptables -A OUTPUT -j ACCEPT                                       # 允许全部出网数据包
iptables -A FORWARD -j DROP                                        # 不允许Iptables的FORWARD转发

2、持久化Iptables规则

让服务器重启时,通过脚本在加载 /etc/sysconfig/iptables 中的数据。

iptables-save > /etc/sysconfig/iptables  # 持久化Iptables规则
chmod +x /etc/rc.d/rc.local
echo "/usr/sbin/iptables-restore < /etc/sysconfig/iptables" >> /etc/rc.d/rc.local
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容