ラズパイ鯖のログ出まくりing問題。
■問題点
- firewalldのログ出力を/var/log/messagesにしているため、大量にログが出て他の情報が埋もれやすい →分けたい
- 釣られて(?)kern.log、syslogにも同じログが出力されている
- ログローテされてなくね?
1. & 2. ログの出力整理
まずFirewalldでの設定。
リッチルールでログを出す設定にしている。
rule family="ipv4" forward-port port="XX" protocol="tcp" to-port="XX" to-addr="123.45.67.89" log prefix="hoge:"
コマンドはこんな感じで。
firewall-cmd --zone=hoge --permanent --add-rich-rule='※上記ruleと同じ文字列※'
という設定にするとmessagesにプレフィックスで設定した文字列を含んでログが出力される。
上記ルールは見ての通り、ポートフォワードの設定なんだけど、
リクエストが多いところに設定すると 凄まじい勢いでログが流れるw
messagesは他の色々な情報出力に使われているので埋もれる(ノ∀`)
firewalldでログの話といえば、「拒否したリクエストをログに出力する」ために
# firewall-cmd --set-log-denied=all
で出るようになりますよ という情報が多かった。
ちなみに許可/拒否に関係なくログが出る。
この設定をした上で、前述のリッチルールの設定をすると
ログは倍 出るw(正確には ちょっと長いので倍以上)
用途的にはポートフォワードの部分に限ってログが欲しいので、リッチルールで設定する。
--set-log-denied
はoff。
ログを分けるためにはリッチルールで設定したプレフィックスで拾って
出力先を変える という方法を使う。
調べた感じでは/etc/rsyslog.conf
のRulesの部分を
#kern.* /dev/console
:msg, contains, "hoge:" /var/log/iptables
って書きなさいよ ということだ。
kernログ止めて良いのか・・・?
確かに見てもいないけど(何 なので今回はコメントアウトしなかった。
環境が違うから鵜呑みにしてはいけない。
俺の環境だとRulesに先客として8つのログが居る。どうすんのよコレw
まぁ良いや という事で
真ん中辺に居たkernログの次の行に記載した。
確かに新たに設定したログが出力されるようになって 目的は果たせたかのように見えた・・・が
件の怒濤のログ出力が発生するようになってしまったw
やはりキモはrsyslogで、
/var/log/syslog や /var/log/messages
もここで制御している。
syslogは
messagesは
auth,authpriv.none;\
cron,daemon.none;\
mail,news.none -/var/log/messages
ってなっているので、
回避のしようがないw
これだとログレベルで回避はできないし、どうしたものかと あーだこーだ 数時間悩んで
あ。そーか。
Rulesの最初にもってきて、以降は出力しない とすれば良いのか。
& ~
・
・
・
もしくは
:msg, contains, "hoge:" ~
・
・
・
これにて一件落着!
結論
firewalldでゾーンやもっと細かい単位でログを分けて出力したい場合は
ログプレフィックス付きのリッチルールを作成する。
例)ポートフォワードの場合
firewall-cmd --zone=hoge --permanent --add-rich-rule='rule family="ipv4" forward-port port="XX" protocol="tcp" to-port="XX" to-addr="123.45.67.89" log prefix="pre_hoge:"'
リッチルールを作成した上で/etc/rsyslog.conf
に振り分けルールを追記する。
#### RULES ####
###############
#
# First some standard log files. Log by facility.
#
:msg, contains, "pre_hoge:" -/var/log/hoge_log
& ~
・・・
ログローテに続きます(・∀・)