原文:https://www.jianshu.com/p/b221b790cb1e

https://linux-audit.com/blocking-ip-addresses-in-linux-with-iptables/

iptables删除规则

So if you would like to delete second rule :

iptables -D INPUT 2

------------------------------

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

ipset save banlist -f banlist.txt

ipset destroy banlist

ipset restore -f banlist.txt
  1.  

-------------------------------------------------

再来说说今天的主题,黑名单。

第一阶段:发现

有一天发现 服务器的 /var/log/btmp文件有点大,所以搜索了一下

  1. /var/log/btmp这个文件记录错误的登录尝试,执行lastb命令就可以查看到最后一个不成功的登录尝试.
  2. 如果文件太大可删除了再重新生成一个新的空文件。

得到了一个lastb命令,发现大量的ssh登录信息,多的令人发指。好吧,让我来分析一下哪些IP次数最多

  1. #存文件便于以下的操作
  2. lastb >> lastb.log
  3. #过滤其它字段,只保留ip数据
  4. cat lastb.log|awk -F " " '{print $3}' >> ips.log
  5. #记录ip的出现次数
  6. cat ips.log | sort | uniq -c >> ip_uniq.log
  7. #最终形成列表
  8. cat ip_uniq.log|sort -k1,1nr >> output.log

有些同学说分段的命令完全可以合成一个嘛,使用高大上的管道符号。是的,形成一条命令即:
lastb | awk -F " " '{print $3}' | sort | uniq -c | sort -k1,1nr >> output.log
现在output.log的内容如下图

 
暴光它

到此第一阶段完成,我知道了哪些IP曾对我的服务器进行过疯狂的访问。下一部就是写到iptables的黑名单中。

第二阶段:处理

挑选请求次数超过5次的,大概有1000来条。
问题来了,我需要一条一条加到iptables吗? 答案是肯定的,肯定不是了。 今天我所遇到的问题,所能想到的方案,几乎前辈们已经都已经实践过了。

神器登场: ipset,非自带,请用yum install ipset安装
简单讲一下 ipset 的使用

  1. #创建一个名称为 blacklist 的IP集合,最大容量为10000
  2. ipset create blacklist hash:ip maxelem 100000
  3. #查看你的IP集
  4. ipset list
  5. #增加ip
  6. ipset add blacklist 1.1.1.1
  7. #再次查看IP集
  8. ipset list
 
ipset list结果

好的, ipset基本使用已经初见。现在将刚才的恶意IP导入到ipset中

  1. #方法有点蹩脚
  2. grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' output.log | awk '{print "ipset add blacklist",$0}'|sh

最后呢,将ipset与iptables关联即可

  1. iptables -I INPUT -m set --match-set banthis src -p tcp --destination-port 80 -j DROP
  2. /etc/init.d/iptables save

屏蔽后再尝试ssh连接服务器,结果就如下图,嗯 ,是的,结束。

 
ssh尝试登录

第三阶段:扩展

好文共享:linux大量屏蔽恶意IP地址

比本文针对性强,同时给出了iblocklist,这个网站已搜集了大量的恶意IP,可以拿使用来,这才是生产生。

 

---------------------------------------------------------------------------补充------------

自动IP地址禁用

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

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

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

使用的下面命令安装iblocklist2ipset:

 
 
 
 
 

Shell

 
1
pip install iblocklist2ipset

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

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

 
 
 
 
 

Shell

 
1
python-pip install iblocklist2ipset

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

粘帖URL到下面的命令中。

 
 
 
 
 

Shell

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

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

 
 
 
 
 

Shell

 
1
2
3
4
5
6
7
8
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命令来加载这个文件:

 
 
 
 
 

Shell

 
1
ipset restore -f banlist.txt

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

 
 
 
 
 

Shell

 
1
ipset list banlist

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

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

 
 
 
 
 

Shell

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

总结

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

我的网站,攻击者IP大部分都是河南郑州的,一看服务器都是景安网络的服务器,也是醉醉的。

【转】Linux防火墙(iptables)之黑名单的更多相关文章

  1. Linux防火墙(Iptables)的开启与关闭

    Linux防火墙(iptables)的开启与关闭 Linux中的防火墙主要是对iptables的设置和管理. 1. Linux防火墙(Iptables)重启系统生效 开启: chkconfig ipt ...

  2. linux 防火墙iptables简明教程

    前几天微魔部落再次遭受到个别别有用心的攻击者的攻击,顺便给自己充个电,复习了一下linux下常见的防火墙iptables的一些内容,但是无奈网上的很多教程都较为繁琐,本着简明化学习的目的,微魔为大家剔 ...

  3. Linux防火墙iptables简明教程

    前几天微魔部落再次遭受到个别别有用心的攻击者的攻击,顺便给自己充个电,复习了一下linux下常见的防火墙iptables的一些内容,但是无奈网上的很多教程都较为繁琐,本着简明化学习的目的,微魔为大家剔 ...

  4. Linux防火墙iptables学习笔记(三)iptables命令详解和举例[转载]

     Linux防火墙iptables学习笔记(三)iptables命令详解和举例 2008-10-16 23:45:46 转载 网上看到这个配置讲解得还比较易懂,就转过来了,大家一起看下,希望对您工作能 ...

  5. Linux防火墙iptables学习

    http://blog.chinaunix.net/uid-9950859-id-98277.html 要在网上传输的数据会被分成许多小的数据包,我们一旦接通了网络,会有很多数据包进入,离开,或者经过 ...

  6. 10.Linux防火墙iptables之SNAT与DNAT

    Linux防火墙iptables之SNAT与DNAT 目录 Linux防火墙iptables之SNAT与DNAT SNAT策略及应用 SNAT策略概述 SNAT策略典型应用环境 SNAT策略原理 SN ...

  7. linux 防火墙 iptables实例讲解

    端口为例): 显示现有规则: iptables –L -n 清空现有规则表: iptables -F 黑名单:先允许所有数据包通过,后逐条添加黑名单规则. iptables –A INPUT–p tc ...

  8. linux 防火墙 iptables 目录

    linux iptables 防火墙简介 Linux 防火墙:Netfilter iptables 自动化部署iptables防火墙脚本

  9. Linux防火墙iptables介绍

    介绍网络防火墙是通过一个或多个允许或拒绝的规则来过滤网络流量的网络设备或软件.网络防火墙还可以执行更复杂的任务,例如网络地址转换,带宽调整,提供加密隧道以及更多与网络流量相关的任务.而我们的任务就是需 ...

随机推荐

  1. Java Web c3p0 pool池泄漏优化与日志分析

    问题跟踪: 近期在整合SSH(spring.springmvc.hibernate)项目,提供给第三方服务.每当调用内存池达到上限之后,外界调用服务直接失败,提示[cannot open connec ...

  2. CentOS 7 上安装vim 解決 centos -bash: vim: command not found

    用CentOS上使用vim竟然用不了,报错没有该命令 centos -bash: vim: command not found 那么如何安裝 vim 呢? ---------------------- ...

  3. 怎么让链式调用setTimeout停止

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. nginx优化(转)

    Puppet利用Nginx多端口实现负载均衡 对 Nginx SSL 的性能进行调整 一.nginx 配置文件中基本设置: 1.  worker_processes 8; 2.  worker_cpu ...

  5. [Asp.net core 2.0]Ueditor 图片上传

    摘要 在项目中要用到富文本编辑器,包含上传图片,插入视频等功能.但ueditor只有.net版本,没有支持core.那么上传等接口就需要自己实现了. 一个例子 首先去百度ueditor官网下载简化版的 ...

  6. 在CentOS4上安装JMagick

    用Java做网站经常要处理用户上传的图片,例如生成缩略图等等.虽然Java可以使用Java2D进行一些图片操作,但是功能和效率实在太差了. 目前比较好的是用JMagick来进行图像处理,不过JMagi ...

  7. JSTL标签用法:<c:choose><c:forEach><c:if><c:when><c:set>

    JSP 标准标记库( Standard Tag Library , JSTL) 是一组以标准化格式实现许多通用的 Web 站点功能的定制标记. JSP 技术的优势之一在于其定制标记库工具.除了核心 J ...

  8. 【spring boot】spring boot 前台GET请求,传递时间类型的字符串,后台无法解析,报错:Failed to convert from type [java.lang.String] to type [java.util.Date]

    spring boot 前台GET请求,传递时间类型的字符串,后台无法解析,报错:Failed to convert from type [java.lang.String] to type [jav ...

  9. wince程序调用另外一个wince exe程序?

    记住:要释放句柄 清空内存(当前程序) 在虚拟机下测试如图: 在reyo.ini文件中配置另一wince执行程序的路径,如果不配置程序会报错: 如果配置的程序不存在报错: 没有问题就调用所在位置的wi ...

  10. SharePoint Online 切换经典视图

    SharePoint online 默认是现代视图,我们可以通过Powershell命令切换默认视图. 以下,是完成的Powershell命令: # This file uses CSOM. Repl ...