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

这篇具有很好参考价值的文章主要介绍了如何拒绝国外IP/屏蔽国外IP访问服务器?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景介绍

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

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

解决方案

大多国内公司的服务器都是面向国内用户

能不能禁止国外的IP访问服务器呢?显著提升服务器的安全性,答案是肯定的。

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

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

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

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

如何拒绝国外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 中的数据。文章来源地址https://www.toymoban.com/news/detail-415802.html

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

到了这里,关于如何拒绝国外IP/屏蔽国外IP访问服务器?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker (CentOS)配置rabbitMQ 服务器访问15672端口显示服务器拒绝连接

    在自己的服务器上配置rabbitMq时已经启动成功了,但是访问就是出错。 使用以下命令启动。  启动后可以看到已经启动成功。 输入地址去访问看到被拒绝访问了  那么有三种可能性:1、你的防火墙端口没有开放 使用命令开放端口  2、你的服务器安全组没有添加该端口,去你

    2024年02月14日
    浏览(45)
  • 【samba】Windows映射网络驱动服务器提示“拒绝访问”

    按照以下步骤检查你的samba服务器,如果不确定自己是否正确地配置了samba环境,请参考Ubuntu安装Samba服务 1、检查进程是否起来 2、检查配置文件是否正确 3、检查防火墙是否放行samba报文 4、检查用户是否添加正确 5、尝试断开驱动器的连接 (1)方法一:最简单粗暴的方法是

    2024年02月05日
    浏览(39)
  • 浏览器出现无法访问该页面/无法连接服务器/服务器拒绝连接/XXX已拒绝连接,同时QQ微信可以登录发信息。

    吐槽:新买的华硕天选4,RTX4060配置,不算业内顶配,不至于网上不了吧。。 上干货!!! 有用的话记得点个赞。你的赞数 虽然不会成为我解决问题的动力,但是打开一看它有数字  好看啊! 问题如下: 电脑明明WiFi连上了,QQ微信也都可以登录发信息,就是浏览器上有些网

    2024年02月05日
    浏览(69)
  • 如何通过 IP + 端口远程访问服务器上的jupyter notebook

            前情需要:最近实验室和老师要求能时刻访问服务器上的jupyter notebook通过IP + 端口来连接,但是我弄了很久就是不能连接,始终是无法连接网站 但是通过ssh -L  本地端口:localhost:服务器jupyter的端口 root@服务器IP 这样连接是可以在本地运行的,但是没有完成老师的要求

    2024年02月11日
    浏览(52)
  • 如何访问部署在家里的服务器(家庭宽带能够申请公网IP)

    家庭影音库 个人电子图书馆 私人网盘 个人博客、网站 家用NAS 代码仓库       公网IP是有限的网络资源,宽带运营商一般只给用户分配动态的内网IP,有的宽带运营商可以申请动态的公网IP。   “动态”的IP地址是什么意思?“动态”指的是宽带运营商在IP地址池里动态地给

    2024年02月08日
    浏览(63)
  • 如何通过本地搭建wamp服务器并实现无公网IP远程访问

    软件技术的发展日新月异,各种能方便我们生活、工作和娱乐的新软件层出不穷,但也有一些经过时间和用户考验的老牌软件屹立不倒。就一我们熟悉的网站集成环境来说,全球就有很多种server软件。每个软件都有各自的特色(虽然同质化很严重),也拥有自己固定的适用群

    2024年02月12日
    浏览(52)
  • 没有公网IP,局域网服务器和应用IP端口如何映射到外网访问

    信息时代,我们经常会有远程办公OA、数据库、搭建web网站、ERP、访问NAS、信息管理、文件共享FTP、软件跨网互通等各种需求。本地内网环境下,如何做内网穿透,将局域网服务器和应用的IP端口映射到外网访问呢?没有公网ip怎么访问家里内网?这里,介绍一种内网穿透方案

    2024年02月16日
    浏览(44)
  • 如何远程访问本地jupyter notebook服务器,实现无公网IP端口映射

    转载自远控源码文章:公网远程访问jupyter notebook【cpolar内网穿透】 Jupyter Notebook,它是一个交互式的数据科学和计算环境,支持多种编程语言,如Python、R、Julia等。它在数据科学、机器学习、深度学习、教育和文档编写等领域都有很广泛的应用。 重要的是,Jupyter Notebook可以

    2024年02月03日
    浏览(50)
  • 2. 如何通过公网IP&端口映射访问到设备的vmware虚拟机的ubuntu服务器

    中国移动公网IP申请过程 1. 主机设备是Windows 11系统 2. 安装vmware虚拟机 3. 创建ubuntu虚拟机(据说CentOS 7 明年就不维护了,就不用这个版本的linux了) 4. 安装nginx服务:默认端口80 5. 安装ssh服务:默认端口22 6. 设置主机 - ubuntu的端口映射 7. 设置路由器 - 主机的端口映射 8. 完成配置

    2024年02月05日
    浏览(53)
  • php:如何在curl方式下url请求域名使用指定ip地址来访问某个服务器

            最近遇到一个问题,就是如何在curl请求某个域名的时候,可以指定某个ip访问,因为很多时候咱们的域名对应的是集群,会有很多服务器ip,并不一定是刚好访问到你想要的服务器,那么该如何解决呢? 例如:正常情况下,假设我们这样发送请求,如何指定访问

    2024年02月15日
    浏览(82)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包