我最近决定进行一些安全维护。我看到了我的日志,并且对我的 SSH 服务器进行了一些尝试。首先,我将 SSH 端口从默认的 22 移开。之后,我读到了一些关于失败2禁止,块主机和拒绝主机。
我看了一下第一个:配置简单,一切都好理解;但当我试图“探究它的保护”时,测试失败。一切似乎都很好,但我仍然可以访问服务器。
我还测试了 IPtables:# iptables -I INPUT -j DROP
- 之后我的 SSH 连接丢失了(所以,我想要的)。然后# iptables -I INPUT -s 84.x.y.z -j DROP
,这也起作用了。
但是,Fail2ban 做了什么规则,那不起作用:( $ sudo iptables -L
)
Chain INPUT (policy ACCEPT)
target prot opt source destination
fail2ban-apache tcp -- anywhere anywhere multiport dports www,https
fail2ban-ssh tcp -- anywhere anywhere multiport dports ssh
fail2ban-ssh-ddos tcp -- anywhere anywhere multiport dports ssh
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain fail2ban-apache (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
Chain fail2ban-ssh (1 references)
target prot opt source destination
DROP all -- 84.x.y.z anywhere
RETURN all -- anywhere anywhere
Chain fail2ban-ssh-ddos (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
加载的内核模块:( $ lsmod | grep ip
)
iptable_nat 4680 0
nf_nat 15576 1 iptable_nat
nf_conntrack_ipv4 12268 3 iptable_nat,nf_nat
nf_conntrack 55540 4 xt_state,iptable_nat,nf_nat,nf_conntrack_ipv4
xt_multiport 2816 2
iptable_filter 2624 1
ip_tables 10160 2 iptable_nat,iptable_filter
x_tables 13284 5 xt_state,xt_tcpudp,iptable_nat,xt_multiport,ip_tables
ipv6 235396 24
版本:
- Debian Lenny 5.06,内核 2.6.26-2-686
- IP表1.4.2-6
- Fail2ban 0.8.3-2sid1
openssh-server
1:5.1p1-5
逐步测试#1:
- 将 Fail2ban 配置为低禁令时间。 60 秒。然后重新加载。
- 尝试直接使用错误的密码登录(使用 SSH)。
- 第 6 次输入正确的密码(此处最多尝试次数仅为 4)。我登录了。我还可以访问该服务器托管的网页。
iptables -L
正如上面提到的那样向我展示。因此,当我连接并命令我的服务器时,禁令已生效。
逐步测试#2:
- 停止 Fail2ban。创建一个
at
脚本,以便将来删除下面编写的禁止规则。 (iptables -D INPUT 1
) - 创建禁止规则:
iptables -I INPUT 1 -s 84.x.y.z -j DROP
- 我无法输入任何其他内容,SSH 连接无法使用。我无法访问该网页。所以,我想从 iptables 得到什么。
- 脚本完成后
at
,我可以访问我的服务器。
我没有看到解决方案,我应该怎么做才能使我的 IPtables 禁令(由 Fail2ban 制作)发挥作用?
答案1
我在安装fail2ban之前发现了问题,我做了什么。抱歉占用您的时间。
出于安全原因,我将 sshd 从端口 22 移至另一个端口。中的参考iptables
仅指端口 22。我想,它是一个变量,总是指当前的 sshd 端口。但不是。
确切的解决方案(如果您将守护进程从其原始端口移走):
- 打开jail.local(或.conf)。
- 找到您的服务(在大括号中)。
- 将该
port
部分修复为全部。例子:port = all
banaction
在端口线后添加或编辑现有线,并带有值iptables-所有端口。例子:banaction = iptables-allports
。- 重新启动守护进程。例子:
# service fail2ban restart
。
我找不到更改port ssh
指令的解决方案,或在那里写一个数字。如果您有非全端口的解决方案,我会听听!
答案2
在我将 ssh 服务器移动到非标准端口 12345 (比方说)后,我遇到了同样的问题,fail2ban 没有禁止。
为了使fail2ban在多次失败的身份验证尝试后产生正确的规则,我编辑了 /etc/fail2ban/jail.conf
.
port = ssh
进入
port = 12345
我认为类似的方法也适用于非标准端口上的其他服务。
答案3
fail2ban 的设置位于/etc/fail2ban/jail.local
.在默认安装中,我不确定它是否存在。然后你要做的就是复制jail.conf
到jail.local
,这样你就有了两个文件/etc/fail2ban/
。编辑jail.local
,转到包含它的行[ssh]
并启用它,如下所示:
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 6
之后,重新启动fail2ban:
sudo /etc/init.d/fail2ban restart
现在可能可以工作了,我已经这样设置了,并且可以工作。
答案4
您将“Fail2ban 0.8.3-2sid1”列为已安装。这是不受支持的配置。 Sid 软件包不应安装到稳定的环境中。
我在一个虚拟机中运行 Debian 6 (Squeeze),它是从 Lenny 升级而来的,专门作为我家的 SSH 服务器。我也使用fail2ban。我执行了您的测试 #1,一切都按预期进行。我在最大尝试次数内未能登录,然后我的登录请求被丢弃了 60 秒。
我的版本列表:
- /etc/debian_版本 = 6.0.1
- 失败2禁止= 08..4-3
- iptables = 1.4.8
- openssh 服务器 = 1:5.5p1-6