kippoBrinker.sh

突然100個のssh起動シェル - kanata, 2015/10/25 09:35

ダウンロード (2.493 KB)

 
1
#!/bin/bash
2

    
3
# kippoBrinker ver 0.4
4
# 2015/10/24 kanata
5

    
6
MY_IP_ADDR=`hostname -i|head -1|cut -d' ' -f2`	# 自分のIPアドレスを設定(このIPでBINDする)
7
PROC_NUM="25"	# ダミーsshdを何個立ち上げるか
8
EXEMPT_PORT_LIST="80 443"	# ダミーsshdの対象外ポート
9
DUMMY_ENTRY_PORT="22"	# ダミー待ち受けポート
10

    
11
#------------------#
12
# シグナルハンドラ #
13
#------------------#
14
kippoDeploy () {
15
  # 既にプロセス生成されている場合は、何もしない
16
  NOW_PROC_NUM=`ps -ef | grep twistd|wc -l`
17
  if [ "${PROC_NUM}" -le "${NOW_PROC_NUM}" ]
18
  then
19
    return 0
20
  fi
21

    
22
  for i in `seq ${PROC_NUM}`
23
  do
24
    # ダミー用ポートの生成 (1~5000番のポートをランダムに設定する)
25
    #SSH_KIPPO_PORT=`echo $(( $(od -vAn -N4 -tu4 < /dev/random) % 5000 ))`
26
    SSH_KIPPO_PORT=`expr $RANDOM % 5000 + 1`
27
    for WORK_PORT in ${EXEMPT_PORT_LIST}
28
    do
29
      if [ "${WORK_PORT}" = "${SSH_KIPPO_PORT}" ]
30
      then
31
        #SSH_KIPPO_PORT=`echo $(( $(od -vAn -N4 -tu4 < /dev/random) % 5000 ))`
32
        SSH_KIPPO_PORT=`expr $RANDOM % 5000 + 1`
33
      fi
34
    done
35
    # ダミー用シグネチャの生成 (kippoBrinker.txtからランダムに選択する)
36
    L=`cat kippoBrinker.txt|wc -l`
37
    L=`echo $(( $(od -vAn -N4 -tu4 < /dev/random) % ${L} ))`
38
    L=$(( L + 1 ))
39
    SSH_KIPPO_SIG=`sed -n ${L}p kippoBrinker.txt`
40
    # configファイル生成
41
    sed -e "s/ssh_version_string = SSH-2.0-OpenSSH_5.1p1 Debian-5/ssh_version_string = ${SSH_KIPPO_SIG}/" kippo.cfg.dist |sed -e "s/ssh_port = 2222/ssh_port = ${SSH_KIPPO_PORT}/" > kippo.cfg
42
    # 起動
43
    #echo "Debug: dummy sshd port ${SSH_KIPPO_PORT}"
44
    rm -f kippo.pid
45
    twistd -y kippo.tac -l log/kippo.log --pidfile kippo.pid 
46
    rm -f kippo.pid
47
  done 
48
  # 30分後にダミーsshdは全部落とす
49
  sleep 30m
50
  pkill twistd
51
}
52

    
53
noexit () {
54
  :
55
}
56

    
57
#--------------#
58
# シグナル登録 #
59
#--------------#
60
trap kippoDeploy 14
61
trap noexit 1 2 3 4 15
62

    
63
#------------------------#
64
# メイン処理             #
65
# ダミーエントリーの制御 #
66
#------------------------#
67
while :
68
do
69
  # ダミーエントリーの起動
70
  if ps -ef | grep -v grep | grep "kippoBrinkerDummyEntry.py ${MY_IP_ADDR} ${DUMMY_ENTRY_PORT}" > /dev/null
71
  then
72
    :
73
  else
74
    python kippoBrinkerDummyEntry.py ${MY_IP_ADDR} ${DUMMY_ENTRY_PORT}
75
    # 実行失敗した場合は、ポート未開放の場合あり、3分まって再接続する
76
    if [ $? -ne 0 ]
77
    then
78
      pkill -9 kippoBrinkerDummyEntry.py
79
      sleep 3m
80
    fi
81
  fi
82
done
83

    
84
exit 0
85

    
クリップボードから画像を追加 (サイズの上限: 100 MB)