服务器添加一个简单的黑名单

简单的实现黑名单,例子用的是Golang言语,其他语言也不影响,主要需要理解的是shell脚本,其他语言只要能调用shell就行了.

 

1.打开终端,确定linux的服务器是否能执行iptables跟ipset,若显示"-bash: iptables: command not found"或者"-bash: ipset: command not found",请输入下面两句,没这个问题就跳过.

apt-get install iptables
apt-get install ipset

 

2.创建ipset集合

输入  ipset create myset hash:ip  timeout 300  maxelem 1000000

上面的命令创建了的集合(myset表类型是haship,还可以是hashnet) ,这个匹配规则的意思是“匹配源地址包含在集合myset中的数据包”。src表示源地址,dst表示目标地址。如果同时使用src和dst表示既要匹配源地址又要匹配目的地址。

myset : 集合名

timeout 300 : 表示加入myset集合的ip存在300秒之后自动被删除,用来设置在黑名单的时间,去除代表永久

maxelem 1000000 : ipset默认可以存储65536个元素,使用maxelem指定数量为1000000

 

3.把ipset加入iptable

输入 iptables -A INPUT -m set --match-set myset src -j DROP    

上面的命令将myset集合添加进iptables,就是说myset里面的ip地址都会被禁止.

 

4.运行Golang运行shell语句,2.2.2.2是ip地址,可以写成变量,字符串随你喜欢怎么改

cmd := exec.Command("ipset add myset 2.2.2.2")    

out, err := cmd.CombinedOutput()    

if err != nil {      

  fmt.Println(err)    

}   

fmt.Println(string(out))

 

 

 

需要用到的包是"os/exec"

ipset add myset 2.2.2.2 代表将ip添加进myset集合完成上面,服务器就会禁用2.2.2.2的ip地址300秒.

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

(拓展)若需要执行多行shell语句,就直接写到脚本文件,然后用go调用脚本文件exec.sh


	cmd := exec.Command("/bin/sh", "./exec.sh")
	bytes, err := cmd.Output()
	if err != nil {
		fmt.Println("cmd.Output: ", err)
		return
	}
	fmt.Println(string(bytes))

 

脚本exec.sh

#!/bin/bash

ipset add myset 2.2.2.2

 

查看iptables

iptables -nv -L

 

 

删除iptables中的ipset

iptables -D INPUT -m set --match-set myset src -j DROP

 

5.如果上面还不能满足你的需求,这里有详细的链接供参考

iptables详解

http://blog.chinaunix.net/uid-26495963-id-3279216.html

 

golang中os/exec包的用法

http://blog.csdn.net/chenbaoke/article/details/42556949

 

ipset批量iptables

 

 

利用ipset禁用大量IP

http://www.cnblogs.com/CasonChan/p/5319364.html

 

ipset和iptables配合来自动封闭有问题的IP

http://joeyang.blog.51cto.com/9092193/1878862

 

6.今天遇到一些问题的总结,一开始用了两个方法无法实现需求,也请高手给一些建议. 

 

1>仅用iptables来添加和删除IP,只能操作单个IP,并且无法写超时,所以我用了下面的语句:

iptables -A INPUT -s 2.2.2.2 -j DROP

sleep 300  

iptables -D INPUT -s 2.2.2.2 -j DROP 

sleep用来阻塞,但是占用很多资源,当太多IP需要屏蔽,服务器将被卡死.  

 

2>为了设置自动解封IP,用到了linux的定时任务

但是后来发现,大量的IP不停需要屏蔽,写入定时任务中的crontab会越来越大,系统文件也会越来越乱. 

想了解定时任务可以看下下面的链接:

 

脚本添加定时任务linux

http://blog.csdn.net/javaweiming/article/details/8722525  

 

linux下添加定时任务

http://blog.csdn.net/hi_kevin/article/details/8983746

 

 

7.今天初略了解一下,有什么错误希望能指出,感谢提供资料的所有人

 

  
 
 
















 

posted on 2017-09-04 19:29  li仲玄  阅读(1195)  评论(0编辑  收藏  举报

导航