Ubuntu中DenyHosts安装及配置

环境 :Ubuntu 16.04 LTS
注意:安装好后保留你安装的窗口链接,另外链接窗口 验证成功后再关闭, 否则你估计得找机房人员帮忙了。。。。

一、介绍

DenyHosts是Python语言写的一个程序,它会分析sshd的日志文件(/var/log/secure),当发现重 复的攻击时就会记录IP到/etc/hosts.deny文件,从而达到自动屏IP的功能。
注意 : 暴力破解需要同时猜中端口和密码
到官网下载DenyHosts
DenyHosts官网:http://denyhosts.sourceforge.net/
查看Linux系统sshd的日志文件/var/log/secure文件,发现里面有大量的ssh失败尝试记录

获取其中的ip地址和数量:

# grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' /var/log/secure.1 | sort | uniq -c

二、解压并安装

检查安装要求
首选检查Sshd是否支持 Tcpwrap,只有支持Tcpwrap才可以安装Denyhost

# ldd /usr/sbin/sshd |grep wrap

在这里插入图片描述
libwrap.so.0 => /usr/lib/libwrap.so.0 (0x00864000) //出现此信息时表示支持
再检查 Python的版本,Python2.3以上版本可以直接安装

# python -V

在这里插入图片描述
均达到要求

下载地址

wget https://nchc.dl.sourceforge.net/project/denyhosts/denyhosts/2.6/DenyHosts-2.6.tar.gz
# 官网下载包安装
[root@www ~]# tar zxvf DenyHosts-2.6.tar.gz
[root@www ~]# cd DenyHosts-2.6
[root@www DenyHosts-2.6]# apt install python -y
[root@www DenyHosts-2.6]# python setup.py install
[root@www DenyHosts-2.6]# cd /usr/share/denyhosts/   
[root@www denyhosts]# cp denyhosts.cfg-dist denyhosts.cfg      //配置文件
[root@www denyhosts]# cp daemon-control-dist daemon-control    //启动文件
[root@www denyhosts]# chown root daemon-control
[root@www denyhosts]# chmod 700 daemon-control

# yum安装
[root@www ~]#  apt install -y denyhosts

三、 配置文件内容说明

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

其他 :
#(h表示小时,d表示天,m表示月,w表示周,y表示年)
AGE_RESET_VALID=5d            #有效用户登录失败计数归零的时间
AGE_RESET_ROOT=25d            #root用户登录失败计数归零的时间
AGE_RESET_RESTRICTED=25d      #用户的失败登录计数重置为0的时间(/usr/share/denyhosts/data/restricted-usernames)
AGE_RESET_INVALID=10d         #无效用户登录失败计数归零的时间
#用户的登陆失败计数会在多长时间后重置为0
RESET_ON_SUCCESS = yes         ##如果一个ip登陆成功后,失败的登陆计数是否重置为0
DAEMON_SLEEP = 30s             ##当以 后台方式运行时,每读一次日志文件的时间间隔。
DAEMON_PURGE = 1h              #当以后台方式运行时,清除机制在 HOSTS_DENY 中终止旧条目的时间间隔,这个会影响PURGE_DENY的间隔。
RESET_ON_SUCCESS = yes                  #如果一个ip登陆成功后,失败的登陆计数是否重置为0

ps:配置文件内容根据自己需要自行调整

4. 启动自启动服务

# ./daemon-control start        #启动DenyHosts
# ln -s /usr/share/denyhosts/daemon-control /etc/init.d      //对daemon-control进行软连接,方便管理
# /etc/init.d/daemon-control start         
或者
# /usr/share/denyhosts/daemon-control start            启动Denyhost的进程
# chkconfig daemon-control on                     //将denghosts设成开机启动

或者
# vi /etc/rc.local --------->加入下面这条命令:
/usr/share/denyhosts/daemon-control start

查看服务运行状态

root@ubuntu:/usr/share/denyhosts# ./daemon-control status
DenyHosts is running with pid = 10259

在这里插入图片描述
在这里插入图片描述

5. 以后可以直接查看hosts.deny文件就能找到攻击ip的记录

# vi /etc/hosts.deny

在另外一台机器上使用ssh进行连接,当在连续几次输入错误的密码后,会被自动阻止掉,在一定时内不可以再连接ssh连接记录的日志文件。
查看我的/etc/hosts.deny文件发现里面已经有135条记录。

# cat /etc/hosts.deny | wc -l
135

注意 :

添加信任IP
编辑/etc/hosts.allow,将自己常用的IP加进去:

sshd: 202.113.*.*: allow

防止手残输错几次密码IP被禁登不进去了。

常见问题 :

在输入运行命令时,有错误提示打不开denyhosts.py文件,没有这个目录。如:

[root@ ~]#/etc/init.d/daemon-control start
starting DenyHosts:   /usr/bin/env python /usr/bin/denyhosts.py --daemon --config=/usr/share/denyhosts/denyhosts.cfg
python: can't open file '/usr/bin/denyhosts.py': [Errno 2] No such file or directory

经过查找发现denyhosts.py在目录/usr/local/bin/目录下,于是修改daemon-control文件

[root@ ~]#vim /usr/share/denyhosts/daemon-control
DENYHOSTS_BIN   = "/usr/bin/denyhosts.py"
DENYHOSTS_LOCK  = "/var/lock/subsys/denyhosts"
DENYHOSTS_CFG   = "/usr/share/denyhosts/denyhosts.cfg"

2、启动时出现了错误,可以使用下面方式解决
./daemon-control start
starting DenyHosts: /usr/bin/env python /usr/bin/denyhosts.py --daemon --config=/usr/share/denyhosts/denyhosts.cfg
Can’t read: /private/var/log/system.log
[Errno 2] No such file or directory: ‘/private/var/log/system.log’
Error deleting DenyHosts lock file: /var/lock/subsys/denyhosts
[Errno 2] No such file or directory: ‘/var/lock/subsys/denyhosts’
使用:

mkdir -p /private/var/log/
mkdir -p /var/lock/subsys/

3、./daemon-control start
starting DenyHosts: /usr/bin/env python /usr/bin/denyhosts.py --daemon --config=/usr/share/denyhosts/denyhosts.cfg
Can’t read: /private/var/log/system.log
[Errno 2] No such file or directory: ‘/private/var/log/system.log’
Error deleting DenyHosts lock file: /var/lock/subsys/denyhosts
[Errno 2] No such file or directory: ‘/var/lock/subsys/denyhosts’
使用:

touch /private/var/log/system.log
touch /var/lock/subsys/denyhosts

4、./daemon-control start
出现:
starting DenyHosts: /usr/bin/env python /usr/bin/denyhosts.py --daemon --config=/usr/share/denyhosts/denyhosts.cfg
DenyHosts could not obtain lock (pid: )
[Errno 17] File exists: ‘/var/lock/subsys/denyhosts’
使用:

rm -f /var/lock/subsys/denyhosts
./daemon-control start
starting DenyHosts: /usr/bin/env python /usr/bin/denyhosts.py –daemon –config=/usr/share/denyhosts/denyhosts.cfg

service denyhosts status来查看运行状态
DenyHosts is running with pid = 25874 表示已经启动起来了。
接下来就可以使用
cat /etc/hosts.deny来查看记录了

#service denyhost start
starting DenyHosts:   /usr/bin/env python /usr/bin/denyhosts.py --daemon --config=/usr/share/denyhosts/denyhosts.cfg
python: can't open file '/usr/bin/denyhosts.py': [Errno 2] No such file or directory

经过查找发现denyhosts.py在目录/usr/local/bin/目录下,于是修改daemon-control文件

#vi daemon-control
DENYHOSTS_BIN   = "/usr/bin/denyhosts.py"
DENYHOSTS_LOCK  = "/var/lock/subsys/denyhosts"
DENYHOSTS_CFG   = "/usr/share/denyhosts/denyhosts.cfg"

将第一行修改为DENYHOSTS_BIN = “/usr/local/bin/denyhosts.py”

在运行还会提示错误:导入Python版本错误的提示。如:

Traceback (most recent call last):
File "/usr/local/bin/denyhosts.py", line 5, in 
import DenyHosts.python_version
ImportError: No module named DenyHosts.python_version

到这里错误很明了了,经过查询发现版本不对会导致这个问题。

5、在系统是centos 6.8,lnmp1.4下安装使用denyhosts过程中,出现如下错误:

service denyhosts status
Denyhosts is not running
service denyhosts start
starting DenyHosts: /usr/bin/env python /usr/sbin/denyhosts --daemon --config=/etc/denyhosts.conf
DenyHosts could not obtain lock (pid: 9120)
[Errno 17] File exists: ‘/var/run/denyhosts.pid’
在论坛中问了军哥,给出的解决方法如下:

sed -i ‘s#/run/denyhosts.pid#/var/run/denyhosts.pid#g’ /etc/init.d/denyhosts

常见问题 :
1、denyhosts误封了IP请问怎么解封?
denyhosts误封了同事IP请问怎么解封?
我把IP加进白名单并且在hosts.deny里删除了此IP也不行。
报错信息 :

 ssh_exchange_identification: read: Connection reset by peer
或者
Server unexpectedly closed network
connection错误

解锁的步骤,
首先停止DenyHosts, CentOS系统的可以用命令:

# service denyhosts stop

其他系统, 例如Ubuntu/Debian/Fedora/CentOS/Redhat

# /etc/init.d/denyhosts stop

然后请用自己熟悉的方法(通常是vi)在下列文件中找到自己的IP记录并删除, 不推荐这种方法因为用vi在下面的文件中找到自己的IP是非常费时费力的.

/var/log/secure              ×
/etc/hosts.deny            

× 通常只修改这两个文件就OK了

/usr/share/denyhosts/data/hosts
/usr/share/denyhosts/data/hosts-restricted
/usr/share/denyhosts/data/hosts-root
/usr/share/denyhosts/data/hosts-valid

可以用sudo sed -i ‘/ip/d’ /var/log/secure 来直接修改,并使用sudo grep “ip”
/var/log/secure来查看是否修改成功(已编写脚本)

如果不在乎上面的记录文件, 推荐清空上面几个Linux系统日志然后重新开启DennyHosts.
清空这些Linux系统日志不会影响任何功能. 如果你觉得这几个文件记录对你很重要(真的?), 请不要随意清空,
老老实实使用上面的方法.

清空上面几个Linux系统日志很简单, 在SSH中敲入下面的命令:

cat /dev/null > /var/log/secure
 
cat /dev/null > /etc/hosts.deny
 
cat /dev/null > /usr/share/denyhosts/data/hosts
cat /dev/null > /usr/share/denyhosts/data/hosts-restricted
 
cat /dev/null > /usr/share/denyhosts/data/hosts-root
cat /dev/null > /usr/share/denyhosts/data/hosts-valid
cat /dev/null > /usr/share/denyhosts/data/offset
 
cat /dev/null > /usr/share/denyhosts/data/suspicious-logins
 
cat /dev/null > /usr/share/denyhosts/data/users-hosts
 
cat /dev/null > /usr/share/denyhosts/data/users-invalid
cat /dev/null > /usr/share/denyhosts/data/users-valid
 
把日志文件全部清空!要注意的是,清空后一定要 # service rsyslog restart 重启日志记数器!因为如果你不重启服务,你会发现secure日志文件会停止记录一切活动了!那么denyhosts也就无效了。
 
然后重新开启Deny Hosts
# service denyhosts start
其他系统, 例如Ubuntu/Debian/Fedora/CentOS/Redhat
# /etc/init.d/denyhosts start
最好
#service sshd restart
#service iptables restart

方法二:
问题:denyhosts 取消ip限制,允许登陆
1.找到以下文件一个个删除文件中你想取消的主机IP所在的行:

* /usr/share/denyhosts/data/hosts 
* /usr/share/denyhosts/data/hosts-restricted 
* /usr/share/denyhosts/data/hosts-root 
* /usr/share/denyhosts/data/hosts-valid 
* /usr/share/denyhosts/data/users-hosts 

2.添加你想允许的主机IP地址到

/var/lib/denyhosts/allowed-hosts

vi /usr/share/denyhosts/data/allowed-hostsps 
# We mustn't block localhost 
127.0.0.1 
192.168.1.*

3.、启动DenyHosts服务: service denyhosts start

参考链接 :

linux服务器不得不注意的安全问题–ssh暴力破解–denyhosts :http://tech110.blog.51cto.com/438717/287490

利用denyhosts防止服务器被ssh暴力破解 :https://www.centos.bz/2017/08/denyhosts-protect-ssh-server/

linux服务器每次登陆都会把IP写入hosts.deny文件,导致登陆之后下次登陆不了 : https://blog.csdn.net/weixin_43713498/article/details/88714734

扩展
DenyHosts安装及配置详解(centos 7) : https://www.baidu.com/link?url=8bic0qx6Iag_esqWVwOh6vnbt6CDZiflBjdZGkKFAAsm23N0GtDJNcpQ8ehNG34i&wd=&eqid=c61777900002d3e2000000045dc384af
DenyHosts 阻止SSH暴力攻击 (centos ) : https://cloud.tencent.com/developer/article/1511099

DenyHosts 阻止SSH暴力攻击 :https://cloud.tencent.com/developer/article/1511099

更多介绍 :
解除被DenyHosts锁定的IP地址 :https://www.bbsmax.com/A/Vx5MjWppdN/
ubuntu 16.04删除被denyhosts阻止的IP地址 (shell脚本):https://www.mobibrw.com/2018/11508

Centos7使用DenyHosts防止ssh暴力破解(亲测)

https://www.linuxprobe.com/centos-denyhosts.html

手动搭建Jump Server,通常是一个用于提供SSH服务并支持多用户登录的轻量级服务器。以下是基本的搭建步骤: 1. **选择操作系统**:Jump Server通常运行在Linux系统上,比如Ubuntu、CentOS等。你可以根据个人喜好选择。 2. **安装基础环境**: - 更新系统:`sudo apt-get update && sudo apt-get upgrade` - 安装依赖:`sudo apt-get install openssh-server` 3. **配置SSH**: - 创建一个新的用户组和用户,例如`sudo groupadd jump && sudo useradd -g jump -s /sbin/nologin jumpuser` - 编辑`/etc/ssh/sshd_config`文件,设置只允许特定用户(如`jumpuser`)通过密码登录,并禁用root远程登录: ``` PermitRootLogin no PasswordAuthentication yes AllowUsers jumpuser ``` 4. **启动和启用SSH服务**: - 启动SSH服务:`sudo systemctl start ssh` - 设置开机自动启动:`sudo systemctl enable ssh` 5. **防火墙设置**: - 确保允许SSH端口访问(默认22端口),如果使用UFW,可以添加规则: ```bash sudo ufw allow ssh sudo ufw reload ``` 6. **安全配置**: - 可能需要进一步配置防火墙策略和限制IP访问,例如使用`denyhosts`或`fail2ban`增强安全性。 7. **验证连接**: - 使用`jumpuser`账号通过SSH尝试从本地机器登录,确认一切正常。 8. **部署到服务器**: - 将上述操作复制到目标服务器,确保网络可达性和权限设置。 完成以上步骤后,你就成功地手动搭建了一个Jump Server。注意定期更新系统和软件,保持安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值