Upgrade to Pro — share decks privately, control downloads, hide ads and more …

202011_rsyslog

ONO,Tetsuo
November 17, 2020
28

 202011_rsyslog

従前にお邪魔していた案件でsysklog->rsyslogの入れ替えを行ったことがあり、この時に引継として実施した「rsyslogの変更作業についてのメモ」を必死に思い出して書き出しました
あくまでオンプレミス仮想化案件でのrsyslogの変更作業に特化しています。

ONO,Tetsuo

November 17, 2020
Tweet

Transcript

  1. アジェンダ?  自己紹介  ことの発端  rsyslog.conf の検証あれこれ ◦ rsyslogd

    -N を活用する ◦ loggerの代わりにnetcat/pythonを使う ◦ netns で仮想ネットワークを構築する  ここまでのまとめ  今後の検討(すでに答えは出ているが)
  2. 自己紹介  ハンドル : こてつ(@g_plains)  出身 : 愛知で銀杏のおいしいところ 

    おしごと :オンプレ基盤(SV/NW)の管理  最近の趣向 :近所をゆるーくお散歩・自転車 善光寺参りからのお饅頭が美味しい
  3. rsyslog.confの検証方法  rsyslogd -N 1 で別環境のrsyslog.conf を LINTする 普段使いのコンフィグを /etc/rsyslog.conf

    に置いたまま、 rsyslogd -N 1 -f /etc/rsyslog.conf.test で 検証できる  loggerのかわりにnetcat/udp でパケットを送る うんなにいうてるかわからん  netnsを使って検証サイトに商用サイトと同じ(ような)NWを 作る 商用サイトと同じようなトラヒックを検証サイトで動かせる、 しかも迷惑にならない(たぶん)
  4. rsyslogd -N の活用  単純に rsyslogd -N 1 を実行したばやい /etc/rsyslog.conf

    のLINTを行う rsyslog.conf 配下に、例えば/etc/rsyslog.d/segment.conf について言及があれば、これのLINTを行う  rsyslogd -N 1 -f /etc/rsyslog.conf.prod を実行したばやい 検証サイトに 商用サイトのコンフィグ(rsyslog.conf.prod) を配置して実行した場合、 /etc/rsyslog.conf.prod につい てLINTを行う ※ま、まあ商用サイトでの変更では別途 rsyslogd -N 1 を やったほうがいいわけですが
  5. loggerの代わりにpythonを使う  [Black Hat Python]を読みながらPoC用のコードを書きます 便宜上syslog_client.py とかって名前で作ろう  あとは、 python3

    syslog_client.py (宛先IP)で送信  参考: https://engineeringnote.hateblo.jp/entry/python/bhp/2-3 import socket import sys target_host = sys.argv[1] target_port = 514 soc = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) for facility in range(24): for severity in range(8): sendmsg="<{}>{}".format(str(facility*8+severity),str(facility*8+severity)) soc.sendto(sendmsg.encode(), (target_host, target_port))
  6. netns で仮想ネットワークを構築する  netnsを活用することで本来のネットワークと異なる セグメントでの通信テストが行える ※作った人はそういう用途をたぶん想定していない  ステップ 1.netns インターフェースとveth

    を適当な数生やす 2.netnsインターフェースとvethをよしなに接続する 3.IPアドレスを振りなおしながらUDPパケットをばらまく 4.netnsインターフェースとvethをよしなに破棄する
  7. netnsの利用例  netnsノードの追加~vethの連結~IP割り当て # netnsノードの追加 ip netns list ip netns

    add local ip netns add remote ip netns list > remote > router > local # vethを生やして、各ノードにぶら下げる ip link add name veth1-local type veth peer name veth1-remote ip link set veth1-local netns local ip link set veth1-remote netns remote # 各終端にIPアドレスを振って、upする ip netns exec local ip addr add 10.0.0.1/23 dev veth1-local ip netns exec remote ip addr add 10.0.1.1/23 dev veth1-remote ip netns exec local ip link set veth1-local up ip netns exec remote ip link set veth1-remote up
  8. netnsの利用例-2  netns仮想インターフェースでrsyslogdを起動して 実際にUDPパケットを投げる(pythonスクリプトは先述) #各ノードのリンクローカルもupする ip netns exec local ip

    link set lo up ip netns exec remote ip link set lo up # 親コンテキストでrsyslogdを終了して、local ノードでrsyslogdを起動 systemctl stop rsyslog ip netns exec local /sbin/rsyslogd # remoteコンテキストでUDPパケットを投げてみる ip netns exec remote python3 syslog_client.py 10.0.0.1 tail -1 /var/log/messages > Dec 15 07:24:26 10.0.1.1 190 # ipアドレスを差し替えて、UDPパケットを投げてみる ip netns exec remote ip addr del 10.0.1.1/23 dev veth1-remote ip netns exec remote ip addr add 10.0.1.2/23 dev veth1-remote ip netns exec remote python3 syslog_client.py 10.0.0.1 > Dec 15 07:24:48 10.0.1.2 190
  9. [脱線]dummyインタフェース  PoC(CentOS5) 便宜上、echo + netcat での送信例  もしかすると、dummyインタフェースはうまく破棄できな いかもしれない…

    modprobe -a dummy ip link add name eth10 type dummy ip addr add 172.16.2.1/23 dev eth10:2 ip addr add 172.16.3.1/23 dev eth10:3 echo “<12> test ” | nc -u -w 1 -s 172.16.2.1 172.16.3.1 514 ip addr delete 172.16.2.1/23 dev eth10:2 ip addr delete 172.16.2.2/23 dev eth10:2 ... ip link delete eth10
  10. ここまでのまとめ  検証系サーバで商用系サーバのrsyslog.confも一 緒に面倒が見られる (rsyslog -N 1 <file> ) 

    rsyslog.conf の全行検査が必要な場合、 logger+シェルに比べてpythonを使った方が圧倒 的に速い(シェルのオーバヘッドは無視できない)  netnsを使いこなすと検証系サーバに割り振られた IPと異なるIP枠に対してトラフィックの検証が行 える
  11. 今後の検討  オンプレミスでDocker/K8sを使って構築した場合、rsyslog 回りってどうやるんだっけ? →PoC書いてる人がいました… https://qiita.com/Esfahan/items/5e5a9ae7882bb0eaaf5f  Amazon EC2上のLinuxサーバでrsyslogを使って、イベント をCloudWatch

    とかにぶん投げる場合はどうやるの? →PoC書いてる人がいました… (rsyslogdで振り分けする必要、なくね…) https://business.ntt-east.co.jp/content/cloudsolution/column-try- 28.html