centos 设置denyhosts服务 使得攻击IP地址自动加入黑名单

转载于:https://jiuaidu.com/it/1999623/

DenyHosts 是 Python 语言写的一个程序软件,运行于 Linux 上预防 SSH 暴力破解的,它会分析 sshd 的日志文件(/var/log/secure),当发现重复的攻击时就会记录 IP 到 /etc/hosts.deny 文件,从而达到自动拒绝指定连接IP 的功能。

下载软件包安装

安装:笔者在网上搜索时,发现很多的安装者使用的是yum install denyhosts -y 来安装,实测的话是不行的,提示找不到该包的存在,而下载压缩包解压安装方法实测可行。

wget https://sourceforge.net/projects/denyhosts/files/denyhosts/2.6/DenyHosts-2.6.tar.gz  –no-check-certificate 下载软件包

如果不加–no-check-certificate参数会报错 报错如下:

wget https://sourceforge.net/projects/denyhosts/files/denyhosts/2.6/DenyHosts-2.6.tar.gz
--2023-04-03 17:10:35-- https://sourceforge.net/projects/denyhosts/files/denyhosts/2.6/DenyHosts-2.6.tar.gz
Resolving sourceforge.net (sourceforge.net)... 104.18.10.128, 104.18.11.128, 2606:4700::6812:a80, ...
Connecting to sourceforge.net (sourceforge.net)|104.18.10.128|:443... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://sourceforge.net/projects/denyhosts/files/denyhosts/2.6/DenyHosts-2.6.tar.gz/ [following]
--2023-04-03 17:10:36-- https://sourceforge.net/projects/denyhosts/files/denyhosts/2.6/DenyHosts-2.6.tar.gz/
Reusing existing connection to sourceforge.net:443.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://sourceforge.net/projects/denyhosts/files/denyhosts/2.6/DenyHosts-2.6.tar.gz/download [following]
--2023-04-03 17:10:37-- https://sourceforge.net/projects/denyhosts/files/denyhosts/2.6/DenyHosts-2.6.tar.gz/download
Reusing existing connection to sourceforge.net:443.
HTTP request sent, awaiting response... 302 Found
Location: https://downloads.sourceforge.net/project/denyhosts/denyhosts/2.6/DenyHosts-2.6.tar.gz?ts=gAAAAABkKpgNYDAeKaERe6fpF8CoK6SuSMZ8TOEY8q435f4Zc975KNTPy18PuG_ocO4atTLpq1J1s_757y8NTHuxF3IszC5HjA%3D%3D&use_mirror=jaist&r= [following]
--2023-04-03 17:10:38-- https://downloads.sourceforge.net/project/denyhosts/denyhosts/2.6/DenyHosts-2.6.tar.gz?ts=gAAAAABkKpgNYDAeKaERe6fpF8CoK6SuSMZ8TOEY8q435f4Zc975KNTPy18PuG_ocO4atTLpq1J1s_757y8NTHuxF3IszC5HjA%3D%3D&use_mirror=jaist&r=
Resolving downloads.sourceforge.net (downloads.sourceforge.net)... 204.68.111.105
Connecting to downloads.sourceforge.net (downloads.sourceforge.net)|204.68.111.105|:443... connected.
ERROR: cannot verify downloads.sourceforge.net's certificate, issued by ‘/C=US/O=Let's Encrypt/CN=R3’:
 Issued certificate has expired.
To connect to downloads.sourceforge.net insecurely, use `--no-check-certificate'.

错误:无法验证downloads.sourceforge.net的证书,由’ /C=US/O=Let’s Encrypt/CN=R3 ‘颁发: 签发的证书已经过期。 要安全地连接到downloads.sourceforge.net,请使用`——no-check-certificate `。

wget –no-check-certificate 这个参数会让你在 wget 进行对 https 站点的请求时不再检查证书

如果缺少这个参数,那么命令适用于http的网站域名。

wget https://sourceforge.net/projects/denyhosts/files/denyhosts/2.6/DenyHosts-2.6.tar.gz  --no-check-certificate 下载软件包
tar -zxvf DenyHosts-2.6.tar.gz 解压 
cd DenyHosts-2.6/ 进入目录 
yum install python -y 下载编译工具
python python setup.py install 安装
cd /usr/share/denyhosts/ 进入安装目录 
cp denyhosts.cfg-dist denyhosts.cfg 重命名可加载的配置文件 
cp daemon-control-dist denyhosts 重命名启动工具 

在启动服务之前常常会忽略一个问题,denyhosts启动后会遍历安全日志文件/var/log/secure中所有记录IP,
只要符合配置条件的IP都会被记录,因此,自己常用的IP也有可能被加入到系统IP黑名单(/etc/hosts.deny),导致自己也无法登录服务器
解决方法:启动之前在/etc/hosts.allow文件中添加信任IP,这样的话就可以无视掉denyhosts服务的限制 sshd:IP地址
./denyhosts start 启动 
ln -s /usr/share/denyhosts/denyhosts /etc/init.d 为添加开机启动配置软链接 
chkconfig denyhosts on 添加开机启动 
chkconfig --list 检测是否加入开机启动

denyhosts服务配置文件/usr/share/denyhosts/denyhosts.cfg详解:

SECURE_LOG = /var/log/secure #ssh日志文件 
# format is: i[dhwmy] 
# Where i is an integer (eg. ) 
# m = minutes 
# h = hours 
# d = days 
# w = weeks 
# y = years 
# 
# never purge: 
PURGE_DENY =  #过多久后清除已阻止IP  PURGE_DENY = 留空,表示不解禁;
HOSTS_DENY = /etc/hosts.deny #将阻止IP写入到hosts.deny 
BLOCK_SERVICE = sshd #阻止服务名 
PURGE_THRESHOLD = #定义了某一IP最多被解封多少次。某IP暴力破解SSH密码被阻止/解封达到了PURGE_THRESHOLD次,则会被永久禁止; 
DENY_THRESHOLD_INVALID = #允许无效用户登录失败的次数 
DENY_THRESHOLD_VALID = #允许普通用户登录失败的次数 
DENY_THRESHOLD_ROOT = #允许root登录失败的次数 
WORK_DIR = /usr/local/share/denyhosts/data #将deny的host或ip纪录到Work_dir中 
DENY_THRESHOLD_RESTRICTED = #设定 deny host 写入到该资料夹 
LOCK_FILE = /var/lock/subsys/denyhosts #将DenyHOts启动的pid纪录到LOCK_FILE中,已确保服务正确启动,防止同时启动多个服务。 
HOSTNAME_LOOKUP=NO #是否做域名反解 
ADMIN_EMAIL = #设置管理员邮件地址 
DAEMON_LOG = /var/log/denyhosts #DenyHosts日志位置

想要解禁一个已经被禁止掉的 IP,并加入到允许主机列表,只在 /etc/hosts.deny 删除是没用的。需要进入 /var/lib/denyhosts 目录,进入以下操作:

1、停止 DenyHosts 服务

2、在 /etc/hosts.deny 中删除你想取消禁止的主机 IP

3、编辑 DenyHosts 工作目录(配置文件中 WORK_DIR)的所有文件,一个个删除文件中你想取消的主机 IP 所在的行
/var/lib/denyhosts/hosts
/var/lib/denyhosts/hosts-restricted
/var/lib/denyhosts/hosts-root
/var/lib/denyhosts/hosts-valid
/var/lib/denyhosts/users-hosts

4、如果不想自己解禁,可以等到一个重置周期后,自动解禁

5、如果真的需要,可以在/etc/hosts.allow文件中添加信任IP,这样的话就可以无视掉denyhosts服务的限制,慎用!