试图理解为什么内核尝试验证被禁止的 IP (Debian 10 VPS)

试图理解为什么内核尝试验证被禁止的 IP (Debian 10 VPS)

我有一台在 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))允许尝试登录。

我的两个问题:

  1. 为什么内核在禁止恶意用户的情况下仍允许他们尝试登录?
  2. 为什么 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-multiportiptables-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

相关内容