Linux(RHEL、CentOS)サーバはShellスクリプトでSSHとvsftpdの暴力クラックを防ぐ.
2468 ワード
本論文の転送先:http://os.51cto.com/art/201109/290306.htm
私のウェブサーバは、ウェブサイトがダブルバックアップ戦略を取っていますので、vsftpdの21ポートを開放しました.最近多くの人が試しているのが見つかりました.
私のサーバーはLVSクラスタの後ろに置くので、iptablesのrecentモジュールでこの問題を解決する方法は通用しないと思いました.また、サーバーのシステムはCentOS 5.5 x 86_をインストールしています.64、iptablesはまだこのモジュールをサポートしていません.エラーは以下の通りです.
このファイルは毎週確認できます.SHELL脚本を使って頻繁にアクセスできなかったIPを集計して、一つのしきい値を100と定義しています.もし100以上ならば、それを/etc/hosts.denyファイルに入れて、vsftpdとsshに引き続きアクセスするのを阻止します.それからそれをcrontab計画リストに書いて、しばらくの間に一回ずつ調査します.もし次回の調査のあるIP回数はまた100より大きいなら、まずそれが私達のブラックリストにないことを確認します.もしいるなら、過去を無視します.不在の場合は、引き続き進/etc/hosts.denyファイルを追加します.
私のファイルの最後の行為
私のネットマシンが台本を実行してからしばらくの間、/etc/hosts.denyファイルは以下の通りです.
私のウェブサーバは、ウェブサイトがダブルバックアップ戦略を取っていますので、vsftpdの21ポートを開放しました.最近多くの人が試しているのが見つかりました.
118.33.110.52=2834
119.145.254.77=37
121.254.179.199=226
121.88.250.243=35
200.29.110.104=168
202.78.173.199=250
222.221.2.210=373
この中は119.45.254.77と122.8.25.243が正常な以外、その他の基本はすべて悪意のIPです.私のサーバーはLVSクラスタの後ろに置くので、iptablesのrecentモジュールでこの問題を解決する方法は通用しないと思いました.また、サーバーのシステムはCentOS 5.5 x 86_をインストールしています.64、iptablesはまだこのモジュールをサポートしていません.エラーは以下の通りです.
iptables: Unknown error 18446744073709551615
iptables: Unknown error 18446744073709551615
機械はもう重要な業務を走っていますので、内部の核をアップグレードしたくないです.正常なウェブサイトの運営に影響しないように、iptablesの考えはしばらく一段落しました.その後、HostsDenyの方法でこの問題を解決したいと思いました.この方法はやはり煩わしいと思います.自分で脚本を書いてこの問題を解決したほうがいいです.脚本の内容は以下の通りです.#! /bin/bash
cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}' > /root/black.txt
DEFINE="100"
for i in `cat /root/black.txt`
do
IP=`echo $i |awk -F= '{print $1}'`
NUM=`echo $i|awk -F= '{print $2}'`
if [ $NUM -gt $DEFINE ];
then
grep $IP /etc/hosts.deny > /dev/null
if [ $? -gt 0 ];
then
echo "sshd:$IP" >> /etc/hosts.deny
echo "vsftpd:$IP" >> /etc/hosts.deny
fi
fi
done
スクリプトの構想は以下の通りです.このファイルは毎週確認できます.SHELL脚本を使って頻繁にアクセスできなかったIPを集計して、一つのしきい値を100と定義しています.もし100以上ならば、それを/etc/hosts.denyファイルに入れて、vsftpdとsshに引き続きアクセスするのを阻止します.それからそれをcrontab計画リストに書いて、しばらくの間に一回ずつ調査します.もし次回の調査のあるIP回数はまた100より大きいなら、まずそれが私達のブラックリストにないことを確認します.もしいるなら、過去を無視します.不在の場合は、引き続き進/etc/hosts.denyファイルを追加します.
私のファイルの最後の行為
* */1 * * * root sh /root/hosts_deny.sh
つまり、1時間ごとにこのスクリプトを繰り返し実行します.ここでも説明したいのですが、/var/log/secureは一週間ごとにポーリングします.だから、サーバーの具体的な状況によって、このシナリオをどれぐらいの時間で実行できますか?私のネットマシンが台本を実行してからしばらくの間、/etc/hosts.denyファイルは以下の通りです.
sshd:119.145.254.77
vsftpd:119.145.254.77
sshd:222.221.2.210
vsftpd:222.221.2.210
sshd:118.218.136.25
vsftpd:118.218.136.25
sshd:118.33.110.52
vsftpd:118.33.110.52
sshd:123.196.113.11
vsftpd:123.196.113.11
sshd:14.140.172.74
vsftpd:14.140.172.74
sshd:200.29.110.104
vsftpd:200.29.110.104
sshd:202.102.89.81
vsftpd:202.102.89.81
sshd:202.78.173.199
vsftpd:202.78.173.199