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
|
|