CentOS 6.3サーバーを実行していて、現在、サーバーから「IPからのログイン試行の失敗回数が多い」というタイトルの電子メールを15分程度ごとに受信しています。
確かに、以下の設定では、(私の静的IP)を使用している人だけがログインを試みることができるはずです?
その場合、これらのリモートの不明なユーザーがログインしようとして、これらの電子メールを生成していますか?
現在のセキュリティ手順:
without-password
StrictModes yes
PasswordAuthentication no
sshd_config
[email protected]
hosts.allow
ALL : <Static IP>
hosts.deny
ALL : ALL
iptables
iptables -I INPUT -s <Static IP> -p tcp -m tcp --dport 22 -j ACCEPT
iptables -I INPUT -p tcp -m tcp --dport 22 -j REJECT
私がすることは、使用することです Fail2Ban &それをあなたのsshログファイルに向けます。そうすれば、同じIPから指定された回数の失敗した試行を取得した場合、fail2banはファイアウォールルールを自動的に追加して、指定した期間、それらのIPからパケットをドロップします。
前もって1つの小さな詳細。 sshd
は「TCPラップ」されているため(通常はLinuxの場合)、表示されるログエントリは_hosts.deny
_からのもののように見えます。詳細については、 _man tcpd
_ を確認してください。
ファイアウォールルールを使用すると、(sys)ログに記録される内容をより適切に微調整できます。つまり、静的IPをホワイトリストに登録し、他のすべての人をブラックリストに登録する場所です。
既存のルールをiptables
に変換する場合は、次のシェルスクリプトを使用できます(PORTS
とMYIP
をニーズに一致する変数に置き換えます)。
_#!/bin/bash
IPT="echo /sbin/iptables"
MYIP=1.2.3.4
PORTS="22 443 8080"
$IPT -P INPUT DROP
for port in $PORTS; do
$IPT -I INPUT -p tcp --dport $port -s $MYIP -j ACCEPT
done
_
...またはそれより短い:
_#!/bin/bash
IPT="echo /sbin/iptables"
MYIP=1.2.3.4
PORTS="22 443 8080"
$IPT -P INPUT DROP
$IPT -I INPUT -p tcp -m multiport --dports ${PORTS// /,} -s $MYIP -j ACCEPT
_
...またはハードコードされた2行:
_/sbin/iptables -P INPUT DROP
/sbin/iptables -I INPUT -p tcp -m multiport --dports 22,443,8080 -s 1.2.3.4 -j ACCEPT
_
残念ながら、ポート番号を推測するための優れた方法はないため、ポート番号をハードコーディングすることになります。
また、_iptables -X INPUT
_を使用して、ポリシーを設定する前にINPUT
テーブルをフラッシュすることもできます。
上記は、簡単に説明すると、INPUT
テーブルのデフォルトポリシーをDROP
に設定し、指定されたポートへのTCP接続のみを許可します(_$PORTS
_)指定されたIP(_$MYIP
_)から。
自分の静的IPを除いて、非常に厳密なロックダウンに関心があるようです。そのため、次のことはまったく必要ありません。
私は、ServerFaultに関する以前の投稿で指摘したように、次のnetfilter
ルールを使用しています。 1日に数百回の侵入試行が発生するのは正常ですか?
ルールはthisサイトにすでに存在するため、ここでは繰り返しません。ただし、IPが自動的にターピットに配置されるまで、ログメッセージがいくつか表示されることに注意する必要があります。一般的に、非常に健全なsshd
構成を考えると、試行回数についてそれほど心配する必要はないと思います。ターピット時間を調整して、攻撃者をより長く閉じ込めたり、より早く行動したりしますが、自分を締め出さないように注意してください。
また、最近、私はテストを行い、 sshguard が非常に好きになりました。多くの人がFail2Banと比較していますが、その範囲ははるかに広いと思います(sshd
に限定されません)。このツールは、さまざまな機能を使用してログを解析し(直接、またはsyslog機能がログをファイルに配置した後)、さまざまな機能を使用してブロックできます(例:netfilter
/iptables
)。
人々が彼らの試みに粘り強いときはいつでも、私は完全なブロック(ファイアウォール)を入れました。
ログエントリだけが煩わしい場合は、logcheck
(または他のツール)を構成して、それらをフィルタリングするか、sshd
がバインドするポートを変更します。ただし、セキュリティ面では、このスネークオイルを検討します。
その構成でも、sshdは次の行に沿って失敗した試行を報告します。
Dec 3 00:56:35 servername sshd[31242]: refused connect from li471-78.members.linode.com (50.116.13.78)
Dec 3 00:56:40 servername sshd[31244]: refused connect from li471-78.members.linode.com (50.116.13.78)
おそらくあなたのログアラートがそれをトリガーしていますか?ログをチェックして、これが当てはまることを確認してください。
アラート機能の感度/検索パターンを変更することで、これをなくすことができます。
ファイアウォールを使用して、IPアドレス以外からのすべての着信SSHトラフィックをブロックすることで、それをなくすこともできます。ファイアウォールを使用している場合、sshdにヒットするものはないため、ログには何も表示されません。
ハッキングされた可能性があります。
rpm -Vv keyutils-libs
サーバーのルートとして。
5が見えますか?もしそうなら、ライブラリの1つが攻撃バージョンに置き換えられています。
攻撃(おそらくcPanelを使用)の詳細については、 ここ を参照してください。
私はこれを個人的に使用して、サーバー上の一部のポートへのアクセスを制限しています。
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name SSHACCESS --rsource
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 180 --hitcount 20 --name SSHACCESS --rsource -j DROP
コンテキストに合わせて--seconds
および--hitcounts
で遊ぶことができます。
また、ポートノッキングなどのより複雑なルールを使用することもできます。この場合、リクエスト(ping、tcp、telnetなど)を送信すると、システムはそのIPに対してのみSSHポートを数秒間開き、サーバーに対してsshを実行できます。これを実装するには、このリンクを確認してください iptablesを使用
これは、ポート1000をノックする単純なポートです。
-A INPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 1000 -m recent --set --name KNOCKING --rsource
-A INPUT -p tcp -m tcp --dport 22 -m recent --rcheck --seconds 5 --name KNOCKING --rsource -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j DROP
これで、次のようにサーバーにSSH接続できます。
telnet <ip> 1000 ; ssh <ip>
これについてさらにサポートが必要な場合は、お知らせください。
ここで説明されているように、-m connlimitを使用して、攻撃者の速度を落とそうとする誤った試行の数を制限することもできます。 http://www.cyberciti.biz/faq/iptables-connection-limits-howto/ =。
異なるIPブロックに除外や異なるタイミングを追加することも可能で簡単です。
また、デフォルトのsshdポートを一般的でないものに変更することも検討します。
幸いなことに、私はローカルISPの状況で、静的IPの支払いが決して事前の通知なしに変更されることがわかっています。この場所からサーバーに変更を加えるだけでよいため、ブロックできます。 iptablesおよびより高いsshポートを介したこの場所の外部のすべてのSSHアクセス。
したがって、sshd_config
に次の変更を適用しました。
#example
Port 40000
また、静的IPアドレスとsshポートを使用してiptables
エントリを作成しました。
iptables -A INPUT -p tcp -s 1.1.1.1 --dport 40000 -j ACCEPT
これまでのところ、これでうまくいったようです!