如何使用iptables和ipset屏蔽恶意IP的访问

AI 概述
IPTABLES简介基本操作IPSET简介基本操作自动 IP 地址禁用总结 有的时候,网站会受到大量恶意攻击,有的恶意 IP 还隔三差五来搞你一波,占用服务器资源,影响网站响应速度。 想要屏蔽这些恶意 IP,就可以使用 iptables、ipset 等工具。 IPTABLES 简介 iptables其实不是真正的防火墙,我们可以把它理解...
目录
文章目录隐藏
  1. IPTABLES
  2. IPSET
  3. 自动 IP 地址禁用
  4. 总结

有的时候,网站会受到大量恶意攻击,有的恶意 IP 还隔三差五来搞你一波,占用服务器资源,影响网站响应速度。

使用 iptables 和 ipset 屏蔽恶意 IP 的访问

想要屏蔽这些恶意 IP,就可以使用 iptables、ipset 等工具。

IPTABLES

简介

iptables其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过 iptables 这个代理,将用户的安全设定执行到对应的”安全框架”中,这个”安全框架”才是真正的防火墙,这个框架的名字叫netfilter。

netfilter 才是防火墙真正的安全框架(framework),netfilter 位于内核空间。

iptables 其实是一个命令行工具,位于用户空间,我们用这个工具操作真正的框架。而我们就可以通过 iptables 屏蔽一些 IP。

基本操作

服务器默认安装 iptables,可以使用如下指令查看 iptables 版本。

iptables -V

如果想查阅 iptables 的帮助文档,可以使用如下指令。

iptables --help

如果屏蔽了 IP,或者做了其他更改,可以通过如下指令查看当前防火墙配置规则。

iptables -L -n

在 Linux 中,可以很简单地用 iptables 框架禁止 IP 地址:

iptables -I INPUT -s ***.***.***.*** -j DROP

***.***.***.***为恶意 IP 地址,如果没有报错,说明添加成功。使用iptables -L -n指令查看配置情况:

使用 iptables -L -n 指令查看配置情况

如上图所示,我的个人网站目前一共屏蔽了 7 个恶意 IP。如果屏蔽错了,或者想将屏蔽的 IP 放出来,怎么操作?

iptables -D INPUT -s ***.***.***.*** -j DROP

使用上述指令,即可将屏蔽的 IP 释放出来。

后面的 DROP 是处理动作,表示直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。

除此之外还有:

  • ACCEPT:允许数据包通过。
  • REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。
  • SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题。
  • MASQUERADE:是 SNAT 的一种特殊形式,适用于动态的、临时会变的 ip 上。
  • DNAT:目标地址转换。
  • REDIRECT:在本机做端口映射。
  • LOG::在/var/log/messages 文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配。

屏蔽 IP,只需要用到 DROP 和 REJECT 就行。

如果你愿意,你可以保存 iptables 的配置到一个文件中:

iptables-save > ip.rule

可以使用如下指令恢复规则:

iptables-restore < ip.rule

防火墙操作:

systemctl start firewalld
systemctl stop firewalld
systemctl restart firewalld

IPSET

简介

然而,当你有 1000 个独立 IP 地址,且不带 CIDR(无类别域间路由)前缀,你该怎么做?你要有 1000 条 iptable 规则!这显然这并不适于大规模屏蔽。

这时候就是 IP 集登场了。IP 集是一个内核特性,它允许多个(独立)IP 地址、MAC 地址或者甚至是端口号被编码和有效地存储在位图/哈希内核数据结构中。一旦 IP 集创建之后,你可以创建一条 iptables 规则来匹配这个集合。

而管理 IP 集一个人很好的工具就是 ipset。为了创建和管理 IP 集,你需要使用称为 ipset 的用户空间工具。

要在 Debian、Ubuntu 或者 Linux Mint 上安装:

sudo apt-get install ipset

Fedora 或者 CentOS/RHEL 7 上安装:

sudo yum install ipset

基本操作

让我通过简单的示例告诉你该如何使用ipset命令。

首先,让我们创建一条新的 IP 集,名为 banlist(名字任意):

ipset create banlist hash:net

第二个参数(hash:net)是必须的,代表的是集合的类型。IP 集有多个类型。hash:net 类型的 IP 集使用哈希来存储多个 CIDR 块。如果你想要在一个集合中存储单独的 IP 地址,你可以使用 hash:ip 类型。

一旦创建了一个 IP 集之后,你可以用下面的命令来检查:

如何使用 ipset 命令

这显示了一个可用的 IP 集合列表,并有包含了集合成员的详细信息。默认上,每个 IP 集合可以包含 65536 个元素(这里是 CIDR 块)。你可以通过追加”maxelem N”选项来增加限制。

ipset create banthis hash:net maxelem 1000000

现在让我们来增加 IP 到这个集合中:

ipset add banlist 203.171.228.159

你会看到集合成员已经改变了。

集合成员已经改变

如果想要从集合中删除这个 IP:

ipset del banlist 203.171.228.159

现在是时候去创建一个使用 IP 集的 iptables 规则了。这里的关键是使用”-m set –match-set “选项。

现在让我们创建一条让之前那些 IP 块不能通过 80 端口访问 web 服务的 iptable 规则。可以通过下面的命令:

iptables -I INPUT -m set --match-set banlist src -p tcp --destination-port 80 -j DROP

如果你愿意,你可以保存特定的 IP 集到一个文件中,以后可以从文件中还原:

ipset save banlist -f banlist.txt
ipset destroy banlist
ipset restore -f banlist.txt

上面的命令中,我使用了 destory 选项来删除一个已有的 IP 集来看看我是否可以还原它。

自动 IP 地址禁用

现在你应该看到了 IP 集合的强大了。维护 IP 黑名单是一件繁琐和费时的工作。实际上,有很多免费或者收费的服务可以来帮你完成这个。一个额外的好处是,让我们看看如何自动将 IP 黑名单加到 IP 集中。

首先让我们从iblocklist得到免费的黑名单,这个网站有不同的免费和收费的名单。免费的版本是 P2P 格式。

接下来我要使用一个名为 iblocklist2ipset 的开源 Python 工具来将 P2P 格式的黑名单转化成 IP 集。

使用的下面命令安装 iblocklist2ipset:

pip install iblocklist2ipset

pip 是 python 管理包的工具,一般服务器自带,无需安装。

在一些发行版如 Fedora,你可能需要运行:

python-pip install iblocklist2ipset

现在到iblocklist,抓取任何一个 P2P 列表的 URL(比如”level1″列表)。

抓取任何一个 P2P 列表的 URL

粘帖 URL 到下面的命令中。

iblocklist2ipset generate --ipset banthis "http://list.iblocklist.com/?list=ydxerpxkpcfqjaybcssw&fileformat=p2p&archiveformat=gz" banlist.txt

上面的命令运行之后,你会得到一个名为 banlist.txt 的文件。如果查看它的内容,你会看到像这些:

create banlist hash:net family inet hashsize 131072 maxelem 237302
add banlist 1.2.4.0/24
add banlist 1.2.8.0/24
add banlist 1.9.75.8/32
add banlist 1.9.96.105/32
add banlist 1.9.102.251/32
add banlist 1.9.189.65/32
add banlist 1.16.0.0/14

你可以用下面的 ipset 命令来加载这个文件:

ipset restore -f banlist.txt

现在可以查看自动创建的 IP 集:

ipset list banlist

在写这篇文章时候,“level1”类表包含了 237,000 个屏蔽的 IP 列表。你可以看到很多 IP 地址已经加入到 IP 集中了。

最后,创建一条 iptables 命令来屏蔽这些坏蛋!

iptables -I INPUT -m set --match-set banlist src -p tcp --destination-port 80 -j DROP

总结

屏蔽 IP 难免带来误伤,所以可以周期性释放,比如定期把已经加入关黑名单一周的 IP 释放出来,再犯规再给送进去。

以上关于如何使用iptables和ipset屏蔽恶意IP的访问的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。

「点点赞赏,手留余香」

4

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 如何使用iptables和ipset屏蔽恶意IP的访问

发表回复