Quantcast
Channel: 看得透又看得远者prevail. ppt.cc/flUmLx ppt.cc/fqtgqx ppt.cc/fZsXUx ppt.cc/fhWnZx ppt.cc/fnrkVx ppt.cc/f2CBVx
Viewing all articles
Browse latest Browse all 20537

如何即時封鎖想要用「暴力密碼」骇入linux vps/服务器的入侵者

$
0
0
我一直在找這樣的程式,這個程式的功能,就是可以及時把使用「暴力法」的入侵者封鎖掉。我也認為應該會有這樣的程式才對.

程式原理

於是我就自己用 Perl 寫了一支程式,程式的原理,並不是每隔五分鐘就去分析系統 Log,因為我覺得這樣對系統太操了,我希望可以在用戶準備登入時,才去分析該用戶最近的登入狀況。
這整個流程,首先藉由 TCP_Wrappers 的機制 (hosts.deny 及 hosts.allow) 在用戶登入時觸發本程式,然後程式會分析該用戶最近這一小時登入的狀況,對於登入失敗 3 次的用戶,直接以防火牆封鎖其 IP,然後程式會寄出一封電子郵件通知管理者。

安裝步驟

  1. 下載 block_ssh.pl,將檔案存放在 /usr/bin/,並將權限設為 755:
    cd /usr/bin
    nano block_ssh.pl
     
    block_ssh.pl文件的内容如下:(蓝色文字)
    #!/usr/bin/perl

    # 及時封鎖使用 "暴入法"入侵的使用者(SSH)

    #==相關參數==

    #記錄 ssh 連線的 LOG 檔,預設: /var/log/secure
    $log_file = "/var/log/secure";


    #於多久的時間內嘗試登入(秒),預設: 1 小時
    $time_range = 1 * 60 * 60;

    #於 $time_range 所設定的時間內,嘗試登入失敗多少次立即封鎖 IP,預設: 3 次
    $drop_count = 3;

    #寄件通知,預設收件者: root@localhost
    $mail = 'root@localhost';

    #寄件程式的位置
    $sendmail = "/usr/sbin/sendmail";

    #====

    use Time::Local;

    $ip = $ARGV[0];
    $daemon = $ARGV[1];
    $count = 0;


    %month = (
    Jan => 0,
    Feb => 1,
    Mar => 2,
    Apr => 3,
    May => 4,
    Jun => 5,
    Jul => 6,
    Aug => 7,
    Sep => 8,
    Oct => 9,
    Nov => 10,
    Dec => 11
    );

    $time = time();
    ($second,$minute,$hour,$day,$month,$year) = localtime($time);

    #取得登入失敗的log
     
    @list = `cat $log_file | grep "sshd.*Failed password.* $ip "`;
    for(my $i = $#list; $i >= 0; $i--){
    #取得 log 的時間
    my($log_month,$log_day,$log_time) = split(/ +/,$list[$i]);
    my($log_hour,$log_minute,$log_second) = split(/:/,$log_time);
    #前一年的記錄
    if($log_month > $month){
    $log_year = $year - 1;
    }else{
    $log_year = $year;
    }
    #將時間轉為秒數
    $log_time = timelocal($log_second,$log_minute,$log_hour,$log_day,$mont$
    if($time < $log_time + $time_range ){
    $count++;
    }else{
    last;
    }
    }

    if($count > $drop_count){
    #封鎖 IP
    `iptables -A INPUT -p tcp -s $ip --dport 22 -j DROP`;
    if($mail){
    #寄件通知
    $hostname = `hostname`;
    $month++;
    $year += 1900;
    chomp($hostname);
    open(MAIL, "| $sendmail -t") || die "Can't open $sendmail !\n";
    print MAIL qq|To: $mail\n|;
    print MAIL qq|Subject: [$hostname]封鎖 $ip\n|;
    print MAIL qq|Content-Transfer-Encoding: 8bit\n|;
                    print MAIL qq|Content-type: text/plain\; charset=Big5\n\n|;
    print MAIL "\n時間: $year-$month-$day $hour:$minute:$second\n----\n使用者 \"$ip\"嘗試以 SSH 登入伺服器,共失敗 $count 次,已於防火牆封鎖該 IP。\n\n";
    print MAIL @list;
    close(MAIL);
    }
    }

    exit;
     

    chmod 755 block_ssh.pl
     
  2. 編輯 /etc/hosts.allow,加入:
    sshd    :       ALL     :       spawn (/usr/bin/block_ssh.pl %c %d)
  3. 這樣就完成了,如有必要,請自行修改 block_ssh.pl 裡相關的參數。

程式缺點

  1. 目前只有針對 ssh 做分析。
  2. 遇到不斷變換 IP 的駭客就沒輒了。

SSH 的安全設定

建議修改 /etc/ssh/sshd_config,做以下設定:
#只允許用戶使用 SSH2 協定登入
Protocol 2
#禁止 root 使用 SSH 登入
PermitRootLogin no
#最多可以同時開啟 10 個連線要求
MaxStartups 10
-----------------
 
 

Viewing all articles
Browse latest Browse all 20537

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>