Linux系统下解封DenyHost中的IP地址

问题描述

在使用SSH连接过程中,突然出现连接不成功(以前都可以连接,但突然不能连接了),并且出现如下提示:
ssh_exchange_identification: read: Connection reset
或者
ssh: connect to host port 22: Connection refused

解决办法

需要考虑是否因为密码输入错误的次数过多,导致Linux系统禁止了你的IP地址访问。
可以查看/etc/hosts.deny文件中是否出现了你的IP地址。

如果的却是Linux系统禁止了你的IP地址访问,仅仅在/etc/hosts.deny中删除IP是没有用的,也需要在/var/lib/denyhosts目录下的如下文件中进一步删除被禁IP。

1
2
3
4
5
6
7
/var/lib/denyhosts/hosts 
/var/lib/denyhosts/hosts-restricted
/var/lib/denyhosts/hosts-root
/var/lib/denyhosts/hosts-valid
/var/lib/denyhosts/users-hosts
/var/lib/denyhosts/users-invalid
/var/lib/denyhosts/users-valid

可以通过如下命令删除文件中的被禁IP地址
sed -i "/IP地址/d" /文件

通过运行Shell脚本以删除所有文件中的被禁IP,然后通过如下命令检查iptables
iptables -nvL | grep [IP地址]

Shell脚本

新建一个名为unblock_ip.sh的Shell脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/bin/bash

function unblock_ip() {
# 参数1:ip地址
# 定义需要处理的文件的数组
declare -a filesList=(
"/etc/hosts.deny"
"/var/lib/denyhosts/hosts"
"/var/lib/denyhosts/hosts-restricted"
"/var/lib/denyhosts/hosts-root"
"/var/lib/denyhosts/hosts-valid"
"/var/lib/denyhosts/users-hosts"
"/var/lib/denyhosts/users-invalid"
"/var/lib/denyhosts/users-valid"
)

# 停止DenyHosts服务
echo "DenyHosts Service Stop"
service denyhosts stop

# 清理iptables的规则 (应先用 iptables --list 查看一下已有规则)
# iptables -F

# 清理每个文件中的 ip 地址
for i in ${!filesList[*]};
do
echo "----------------------------------------------------";
echo "UNBLOCK IP: $OPTARG in ${filesList[$i]}";
# echo "/$OPTARG/d"
sed -i "/$OPTARG/d" ${filesList[$i]}
echo "UNBLOCK SUCCESS IN ${filesList[$i]}";

done

iptables -D INPUT -s $OPTARG -j DROP


# 启动DenyHosts服务
echo "DenyHosts Service Start"
service denyhosts start
}

# 通过 getopts 获取需要处理的 ip 地址参数
getopts "i:" ip
if [ -n "$OPTARG" ];then
if [[ $OPTARG =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]];then
echo "Need To Block IP: $OPTARG"
unblock_ip $OPTARG
else
echo "IP is not valid"
fi
else
echo "IP is empty"
fi

在Linux系统中运行如下命令
sudo bash unblock_ip.sh -i [IP地址]

附录

一些常用命令

查看 iptalbes 的规则
    iptables --list
查看 ssh 状态
    service ssh status
重启 ssh
    service ssh restart
/etc/host.allow 和 /etc/hosts.deny 存储允许和禁止的ip。

参考

参考1
参考2

------ 本文结束------

本文标题:Linux系统下解封DenyHost中的IP地址

文章作者:jklf5

发布时间:2022年06月10日 - 20:01

最后更新:2022年06月21日 - 18:37

原始链接:https://jklf5.xyz/2022/06/10/Linux系统下解封DenyHost中的IP地址/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。