GNU/Linux >> Linux の 問題 >  >> Linux

数百回の ssh ログインの失敗

解決策 1:

iptables を使用して、SSH ポートへの新しい着信接続をレート制限できます。ターンキー ソリューションを提供するには、iptables 構成全体を確認する必要がありますが、基本的には次のようなルールを追加することについて話しているのです。

iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 5 --name SSH --rsource -j DROP 
iptables -A INPUT -p tcp --dport 22 -m recent --set --name SSH --rsource -j ACCEPT 

これらのルールは、テーブルの早い段階で ESTABLISHED 接続を受け入れていることを前提としています (したがって、新しい接続のみがこれらのルールに該当します)。新しい SSH 接続はこれらのルールに一致し、マークされます。 60 秒間に 1 つの IP アドレスから 5 回試行すると、その IP からの新しい着信接続がドロップされます。

これはうまくいきました。

編集:追加のソフトウェアをインストールする必要がなく、完全にカーネルモードで行われるため、「fail2ban」よりもこの方法を好みます。 「fail2ban」のようなログ ファイルの解析は処理しませんが、問題が SSH だけにある場合は、ソフトウェアのインストールが必要で、より複雑なユーザー モードは使用しません。

解決策 2:

fail2ban は、ログイン試行の失敗が多すぎる IP アドレスをブロックすることで、これを支援できます。

解決策 3:

可能であれば、SSH 用の非標準ポート (つまり、ポート 10222) を使用することをお勧めしますが、それはできないとおっしゃっていたので、DenyHosts などを使用することをお勧めします。

http://denyhosts.sourceforge.net/

優れたパッケージで、インストールと構成が簡単です。

解決策 4:

インターネット上の任意の場所からシステムに ssh できるのは便利かもしれませんが、開いている ssh ポートをロックし、システムに対してさまざまな joe アカウントおよび辞書攻撃を適用する自動化されたパスワード攻撃システムがあります。これは毎晩のログの概要を読むのが面倒であり、帯域幅の無駄です。

同じシステム上に Web サーバーがある場合は、php および tcp ラッパーを使用して ssh インバウンド トラフィックを既知のシステムに制限し、インターネット上の任意のシステムからのアクセスを許可するバックドア キーを提供できます。

方法は次のとおりです。

/etc/hosts.deny ですべての ssh 接続を拒否:

# /etc/hosts.deny fragment
sshd:  all

/etc/hosts.allow で IP によって既知のシステムを許可し、さらに一時アクセス用のファイルを追加します:

# /etc/hosts.allow fragment
sshd:  10.0.10.2     # some system
sshd:  172.99.99.99  # some other system
sshd:  /etc/hosts.allow.temporary-sshd-access

Web サーバーで php ファイルを作成し、my-sshd-access.php のようなわかりにくい名前を付けます。

<?php
function get_ip()
{
    return getenv("REMOTE_ADDR"); 
}

?>

<?php
$out='/etc/hosts.allow.temporary-sshd-access';
$log='/var/log/sshd-access-addition-log';

print "Was:";
readfile($out);
print "<br>";
$ip=get_ip();
$fp=fopen($out,"w");
fputs($fp,$ip);
fclose($fp);

$lfp=fopen($log,"a");
fputs($lfp,$ip);
fputs($lfp,"n");
fclose($lfp);

print "Wrote: ";
readfile($out);
?>

PHPコードを許してください-私はそれを別の場所からスワイプしたので、おそらく全体がクリーンアップされる可能性があります.アクセスするシステムの IP アドレスを /etc/hosts.allow.temporary-sshd-access ファイルに追加するだけで、接続時に sshd によって読み取られます (/etc/hosts.allow によって含まれるため)。 .

Web 上の任意のシステムにいて、このシステムに ssh したい場合は、まず Web ブラウザを使用してこのファイルにアクセスします (または wget または同等のものを使用します):

$ wget http://your.system.name/my-sshd-access.php

これで、システムに ssh できるはずです。これが頻繁に ssh する可能性が高い場所である場合、/etc/hosts.allow.temporary-sshd-access ファイルの内容を読み取り、IP アドレスを /etc/hosts に永続的に追加するのは簡単です。許可します。

解決策 5:

denyhosts も参照することをお勧めします。

参考までに:OpenSSH 6.7 では tcpwrappers のサポートが廃止されました。つまり、denyhosts はおそらく新規インストールのソリューションではありません。


Linux
  1. システムでSSHアクセスを保護する8つの方法

  2. Ubuntu 20.04でSSHを有効にする-ステップバイステップガイド?

  3. LinuxUbuntuオペレーティングシステムのSSHポートを変更します

  1. Debian 9システムでSSHを有効にする-ステップバイステップの手順?

  2. gnutls_handshake() が失敗しました:ハンドシェイクに失敗しました GIT

  3. 暗号化されたホームディレクトリを持つUbuntuシステムへのauthorized_keysを使用したSSH?

  1. Ssh – Sshを使用してファイルをローカルシステムにコピーし直しますか?

  2. Sshはメッセージ「x11転送要求がチャネル1で失敗しました」を返しますか?

  3. Ssh – Ssh / scp / sftpユーザーをディレクトリに制限しますか?