前提・実現したいこと
WOWHoneypotを使い、rsyslogでWOWHoneypotからログを受信しようとすると、
最初の1回だけ成功し、それ以降は失敗します。
WOWHoneypotは以下のリンクです。
https://github.com/morihisa/WOWHoneypot/
発生している問題・エラーメッセージ
syslogの受信が最初の1回だけ成功し、それ以降は失敗してしまいます。
該当のソースコード
WOWHoneypotのロギング部分を抜粋いたします。
python
1class WOWHoneypotRequestHandler(BaseHTTPRequestHandler): 2 ... 3 def handle_one_request(self): 4 ... 5 request_all = self.requestline + "\n" + str(self.headers) + body 6 logging_access("[{time}]{s}{clientip}{s}{hostname}{s}\"{requestline}\"{s}{status_code}{s}{match_result}{s}{requestall}\n".format( 7 time=get_time(), 8 clientip=clientip, 9 hostname=hostname, 10 requestline=self.requestline, 11 status_code=status, 12 match_result=match, 13 requestall=base64.b64encode(request_all.encode('utf-8')).decode('utf-8'), 14 s=separator 15 )) 16 17... 18 19def logging_access(log): 20 with open(accesslogfile, 'a') as f: 21 f.write(log) 22 if syslog_enable: 23 logger.log(msg="{0} {1}".format(__file__, log), level=logging.INFO) 24 25... 26 27def config_load(): 28 configfile = "./config.txt" 29 ... 30 # Syslog 31 if syslog_enable: 32 try: 33 sport = int(syslogport) 34 except ValueError: 35 logging_system("syslogport({0}) not valid.".format(syslogport), True, True) 36 try: 37 handler = logging.handlers.SysLogHandler(address=(syslogserver, int(sport)), 38 facility=16, # facility 16: local0 39 socktype=socket.SOCK_STREAM) 40 logger.addHandler(handler) 41 except TimeoutError: 42 logging_system("syslog tcp connection timed out. Wrong hostname/port? ({0}:{1})".format(syslogserver, sport), True, True) 43 44... 45 46if __name__ == '__main__': 47 random.seed(datetime.now()) 48 49 try: 50 config_load() 51 except Exception: 52 print(traceback.format_exc()) 53 sys.exit(1) 54 ... 55 myServer = WOWHoneypotHTTPServer((ip, port), WOWHoneypotRequestHandler) 56 myServer.timeout = timeout 57 try: 58 myServer.serve_forever() 59 except KeyboardInterrupt: 60 pass 61 62 myServer.server_close()
試したこと
・送信サーバー側(WOWHoneypot)で設定した項目です。
①WOWHoneypotのconfig.txtのsyslog_enableをTrueに変更
②config.txtのsyslogserverを受信サーバーのIPアドレスに変更
③/etc/rsyslog.d/50-default.confに以下を追記
local0.* @@<受信サーバーIPアドレス>:514
$ActionQueueFileName queue
$ActionQueueMaxDiskSpace 1g
$ActionQueueSaveOnShutdown on
$ActionQueueType LinkedList
$ActionResumeRetryCount -1
・受信サーバー側で設定した項目です。
①ufwで514番のポートを開放
②/etc/rsyslog.confに以下を追記
module(load="imudp")
input(type="imudp" port="514")
$AllowedSender UDP, 127.0.0.1, <送信サーバーのIPアドレス>
module(load="imtcp")
input(type="imtcp" port="514")
$AllowedSender TCP, 127.0.0.1, <送信サーバーのIPアドレス>
③/etc/rsyslog.d/以下に70-honeylog.confを作成し、以下を追記
local0.* -/var/log/honeylog.log
④/etc/logrotate.d/rsyslogに下記を追加
/var/log/honeylog.log
・この状態で、送受信どちらもrsyslogをrestartし、送信側で以下のコマンドを実行しました。
logger -p local0.info "test wowhoneypot"
すると、受信側の/var/log/honeylog.logに以下が追記されました。
Aug 13 08:42:06 wowhoneypot-serv root: test wowhoneypot
同じコマンドを入力すれば、その度に受信側のlogに追記されており、コマンドでの送信は上手く行っているように思えます。
・しかし、WOWHoneypotのアクセスログの場合、WOWHoneypot起動後最初の1回のアクセスログだけ追記され、その後は追記されませんでした。
受信側では1度だけ以下のログが追記されました。
Aug 13 17:04:04 <サーバーのIPアドレス> ./wowhoneypot.py [2020-08-13 17:04:04+0900] <クライアントのIPアドレス> <サーバーのIPアドレス>:80 "GET / HTTP/1.1" 200 False <Base64エンコードされたクライアントの情報...>
その後別のクライアントからアクセスをしても、syslogの受信サーバーにlogが追記されませんでした。
WOWHoneypotを再起動しても、やはり最初の1度だけ追記され、それ以降は追記されない状態です。
・その後、tcpdumpで送信側のパケットを調べました。
WOWHoneypotのアクセス時(WOWHoneypotがログを送信する時)のパケットは以下になります。
tcpdump -i eth0 dst host <受信サーバーのIPアドレス> and port 514
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
08:53:58.252314 IP <送信サーバーのIPアドレス>.35824 > <受信サーバーの情報>.shell: Flags [P.], seq 2211045207:2211045908, ack 1918143806, win 229, options [nop,nop,TS val 122097202 ecr 3371568], length 701
08:53:58.636018 IP <送信サーバーのIPアドレス>.35824 > <受信サーバーの情報>.shell: Flags [P.], seq 701:1337, ack 1, win 229, options [nop,nop,TS val 122097298 ecr 3382769], length 636
受信側でも同じくtcpdumpでパケットを調べました。その時の情報は以下になります。
tcpdump -i eth0 src host <送信サーバーのIPアドレス> and port 514
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
08:52:40.843357 IP <送信サーバーのIPアドレス>.35824 > <受信サーバーの情報>.shell: Flags [P.], seq 2211043588:2211044289, ack 1918143806, win 229, options [nop,nop,TS val 122077850 ecr 3172108], length 701
08:52:41.617364 IP <送信サーバーのIPアドレス>.35824 > <受信サーバーの情報>.shell: Flags [P.], seq 701:1337, ack 1, win 229, options [nop,nop,TS val 122078044 ecr 3172108], length 636
素人考えですが、tcpdumpで送受信どちらでもパケットが確認できているので、受信側のsyslogに問題があるのではないかと考えています。
しかし、自分の知識不足で解決できず。調べても解決できない状態です。
どなたかお力添えをしていただけないでしょうか。
よろしくお願いいたします。
○追記
/var/log/syslogを確認したところ、受信したログがすべて/var/log/syslogに書き込まれていました。
ログの受信は/var/log/honeylog.logで行いたいのですが、どのようにすればよいでしょうか。
○更に追記
/etc/rsyslog.d/50-default.confを書き換えて
.;auth,authpriv.none -/var/log/syslog を
.;auth,authpriv.none,local0.none -/var/log/syslog
に書き換えましたが、以前現象は変わらず、最初の1回のアクセスログのみが/var/log/honeylog.logに追記され、/var/log/syslogにはすべてのログが追記されている状態です。
補足情報(FW/ツールのバージョンなど)
送信側
Ubuntu 16.04.6
rsyslogd 8.16.0
Python 3.5.2
受信側
Ubuntu Server 16.04.3
rsyslogd 8.16.0
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。