VPS上で動作するDebian 10サーバーがあります。私がインストールした唯一のソフトウェアはtinyproxy(httpプロキシ)とfail2banです。
私は以下を含んでいました:
- nmapを使用したポートスキャン結果
- Fail2ban jam.local ファイルの特定の設定です。
- failure2ban failure2ban.local ファイルの特定の設定です。
- 確認ログでサンプルを完成させます。
- Fail2banログの完全なサンプル。
- 私のIpTablesサンプルスキャン結果。
問題の結論:
- auth.log には、192.241.141.43 がほぼ 1 分ごとに入力しようとしていることが示されます。
- failure2ban.logに192.241.141.43が禁止されていることを示します。
- iptablesは、192.241.141.43が禁止されていることを示しています。
IPがブロックされているため、悪意のあるユーザーがログインしようとすることはできません。しかし、カーネルは(pam_unix(sshd:auth))ログイン試行を許可しているようです。
私の2つの質問:
- 悪意のあるユーザーが禁止されているにもかかわらず、カーネルでログイン試行を許可するのはなぜですか?
- Iptablesエントリに「tcp」の代わりに「icmp」が表示されるのはなぜですか?はい、「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の範囲に移動しました。最後の3桁をxxxで隠しました。
#
# 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は何度も試みられ、ほぼ1分ごとに繰り返しました!
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の例
たとえば、fall2ban は 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、完全なルールセット
以下は、ルールセットファイル全体へのリンクです。
===追加情報の概要
ここでChris Davisの主なコメントを要約しました。私はこの記事を読む将来の読者がjail.localファイルのSSHD Jailセクションに何を追加するべきかについて明確なアイデアを持つようにします。
また、Fail2ban.localファイルに変更された1行のテキストを含めました。クリスにもよろしくお願いします。
=== これは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)s", chain="% (チェーン)"] アクション = %(action_ap)s
=== これは Fail2ban.local です。
#オプション:dburgege #注:データベースからブロックを削除する年齢を設定してください。 #値:[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
。これは再びusingとして定義された定義を使用します。それ以上の定義があるので、私はそれを考えるためにこの定義セットを見直しました。以下で見つけることができますjail.conf
action_ = %(banaction)s[port="%(port)s", protocol="%(protocol)s"
banaction
iptables-multiport
banaction_allports = iptables-allports
action_ap
iptables-allports
action.d/
iptables-multiport
Debian 10(buster)の場合、以下で禁止されているタスクを変更するには、この設定のみが必要です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