質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Q&A

解決済

1回答

1815閲覧

WOWHoneypotで、syslogのデータ送受信が失敗してしまいます。

t4gforce

総合スコア5

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

0グッド

0クリップ

投稿2020/08/13 09:10

編集2020/08/13 14:38

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

受信したログをホスト名で振り分けることでとりあえず解決しました。

投稿2020/08/16 12:38

t4gforce

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問