我有一台在 VPS 上运行的 Debian 10 服务器。我安装的唯一软件是:tinyproxy(http代理)和fail2ban
我已经包括:
- 使用nmap进行端口扫描的结果
- 我在fail2ban jam.local 文件中的具体设置。
- 我在fail2ban failure2ban.local 文件中的具体设置。
- 验证日志中的完整样本。
- fail2ban 日志的完整样本。
- 我的 IpTables 样本扫描结果。
问题总结:
- auth.log 显示 192.241.141.43 几乎每分钟都尝试进入
- fail2ban.log 显示 192.241.141.43 已被禁止
- iptables显示192.241.141.43被禁止
我认为基于 IP 被阻止,恶意用户将无法尝试登录。然而,内核似乎确实(pam_unix(sshd:auth))允许尝试登录。
我的两个问题:
- 为什么内核在禁止恶意用户的情况下仍允许他们尝试登录?
- 为什么 Iptables 条目显示“icmp”而不是“tcp”?是的,我知道“ping”是一个 icmp 数据包,但我想阻止 tcp 登录尝试。
非常感谢 !
nmap 扫描结果
# Nmap 7.80 scan initiated Sat Jan 27 15:25:04 2024 as: nmap -sS -oG out.txt
107.174.156.124
Host: 107.174.156.124 (107-174-156-124-host.colocrossing.com)
Status:
Up
Host: 107.174.156.124 (107-174-156-124-host.colocrossing.com)
Ports:
139/filtered/tcp//netbios-ssn///,
445/filtered/tcp//microsoft-ds///,
8888/open/tcp//sun-answerbook///
Ignored State: closed (997)
# Nmap done at Sat Jan 27 15:25:06 2024
-- 1 IP address (1 host up) scanned in 2.20 seconds
这是我在 jam.local 中的条目
请注意,我已将 SSHD 端口移至 63xxx 范围。我用 xxx 遮盖了最后 3 位数字
#
# JAILS
#
#
# SSH servers
#
[sshd]
# To use more aggressive sshd modes set filter parameter "mode" in jail.local:
# normal (default), ddos, extra or aggressive (combines all).
# See "tests/files/logs/sshd" or "filter.d/sshd.conf" for usage example and details.
#mode = normal
enabled = true
mode = aggressive
port = 63xxx
filter = sshd
logpath = /var/log/auth.log
bantime = 2000000
findtime = 7200
maxretry = 2
backend = %(sshd_backend)s
action = iptables-multiport[name=sshd, port="ssh", protocol=tcp]
fail2ban.local
# Options: dbpurgeage
# Notes.: Sets age at which bans should be purged from the database
# Values: [ SECONDS ] Default: 86400 (24hours)
dbpurgeage = 2100000
示例身份验证日志
例如,192.241.141.43 进行了多次尝试,并且几乎每分钟都会重复一次!
Jan 27 15:54:55 racknerd-64d010 sshd[2232]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.241.141.43 user=root
Jan 27 15:54:57 racknerd-64d010 sshd[2232]: Failed password for root from 192.241.141.43 port 54798 ssh2
Jan 27 15:54:57 racknerd-64d010 sshd[2232]: Received disconnect from 192.241.141.43 port 54798:11: Bye Bye [preauth]
Jan 27 15:54:57 racknerd-64d010 sshd[2232]: Disconnected from authenticating user root 192.241.141.43 port 54798 [preauth]
fail2ban 示例
例如,fail2ban 表示 192.241.141.43 已被禁止
2024-01-27 15:55:50,928 fail2ban.actions [29992]: WARNING [sshd] 82.102.12.130 already banned
2024-01-27 15:55:50,929 fail2ban.actions [29992]: WARNING [sshd] 192.241.141.43 already banned
2024-01-27 15:55:50,929 fail2ban.actions [29992]: WARNING [sshd] 159.75.161.40 already banned
Iptables 扫描的结果
IP 192.241.141.43 被禁止
0 0 REJECT all -- * * 61.231.64.170 0.0.0.0/0 reject-with icmp-port-unreachable
0 0 REJECT all -- * * 192.241.141.43 0.0.0.0/0 reject-with icmp-port-unreachable
0 0 REJECT all -- * * 104.250.34.177 0.0.0.0/0 reject-with icmp-port-unreachable
附加信息1+2,完整规则集
这是完整规则集文件的链接。
=== 附加信息摘要
我在这里总结了克里斯·戴维斯的重要意见。我这样做是为了让将来阅读本文的人们能够清楚地知道要在监狱.local 文件的 SSHD Jail 部分中添加哪些内容。
我还包括了fail2ban.local 文件中的单行更改文本 - 再次感谢 Chris。
=== 这是jail.local
# # 监狱 # # # SSH 服务器 # [sshd] # 要使用更激进的 sshd 模式,请在 Jail.local 中设置过滤器参数“mode”: # 正常(默认)、ddos、额外或攻击性(全部组合)。 # 有关使用示例和详细信息,请参阅“tests/files/logs/sshd”或“filter.d/sshd.conf”。 #模式=正常 启用=真 模式=激进 端口 = 22 过滤器=sshd 日志路径 = /var/log/auth.log 班时间 = 2000000 查找时间 = 7200 最大重试次数 = 2 后端 = %(sshd_backend)s banaction_allports = iptables-allports action_ap = %(banaction_allports)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="% (链)”] 动作 = %(action_ap)s
=== 这是fail2ban.local
# 选项:dbpurgeage # 注意:设置应从数据库中清除禁令的年龄 # 值:[ SECONDS ] 默认值:86400(24 小时) 数据库清除 = 2100000
答案1
在这种情况下,您仅阻止该ssh
端口,而不是用于该ssh
服务的自定义入站端口:
action = iptables-multiport[name=sshd, port="ssh", protocol=tcp]
就我个人而言,我建议您简单地阻止来自违规 IP 地址的所有连接请求。通过在您的 - 中使用以下定义jail.local
或在您的 版本中使用等效定义来执行此操作fail2ban
:
banaction_allports = iptables-allports
action_ap = %(banaction_allports)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
action = %(action_ap)s
这里有一个定义的层次结构。动词action
是每个部分的默认值[jail-name]
。我已经将它从 更改为action = %(action_)s
,如果您进一步查找,jail.conf
您会看到它被定义为action_ = %(banaction)s[port="%(port)s", protocol="%(protocol)s"
。这又使用了 的定义banaction
,定义为使用iptables-multiport
。除此之外还有 的定义banaction_allports = iptables-allports
,因此我只是回溯了这组定义以得出action_ap
。可以iptables-allports
在下面找到action.d/
对于 Debian 10 (buster),您只需要此设置即可将禁止操作从更改iptables-multiport
为iptables-allports
:
banaction = iptables-allports
因为你应该已经有了这些:
action_ = %(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
action = %(action_)s