解決策 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 はおそらく新規インストールのソリューションではありません。