tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

さくらvpsの設定自分メモ - iptablesでログを出す(iptables、syslog(rsyslog))

はじめに

ログはなんだかんだ見たいときってありますよね?
そんな時 for iptablesのメモです。

iptables自体の設定はこちらで書いてます。
さくらvpsの設定自分メモ - iptables②(パケットフィルタリング)

ながれ

  1. iptablesの設定(/etc/sysconfig/iptables)を編集
  2. ログ出力の設定(/etc/syslog.conf)を編集
  3. 確認してみる

1. iptablesの設定(/etc/sysconfig/iptables)を編集

iptablesにログを出す設定を追記します。
後述もしますが、ポイントとしてREJECTしている行の上あたりに追記します。

# sudo vi /etc/sysconfig/iptables
---- vi追記 ----
# log setting
-A RH-Firewall-1-INPUT -d 255.255.255.255 -j DROP
-A RH-Firewall-1-INPUT -d 224.0.0.1 -j DROP
-A RH-Firewall-1-INPUT -p udp -m multiport --dport 137,138,139,445 -j DROP
-A RH-Firewall-1-INPUT -p udp --dport 17500 -j DROP
-A RH-Firewall-1-INPUT -m limit --limit 1/s -j LOG --log-prefix "[iptables firewall] : " --log-level=info
---------------

※ 再起動
# sudo /etc/init.d/syslog restart
ファイアウォールルールを適用中:                            [  OK  ]
チェインポリシーを ACCEPT に設定中filter                   [  OK  ]
iptables モジュールを取り外し中                            [  OK  ]
iptables ファイアウォールルールを適用中:                   [  OK  ]
iptables モジュールを読み込み中ip_conntrack_netbios_ns     [  OK  ]
終わりから表示するとここらへん
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80    -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443   -j ACCEPT

# log setting
-A RH-Firewall-1-INPUT -d 255.255.255.255 -j DROP
-A RH-Firewall-1-INPUT -d 224.0.0.1 -j DROP
-A RH-Firewall-1-INPUT -p udp -m multiport --dport 137,138,139,445 -j DROP
-A RH-Firewall-1-INPUT -p udp --dport 17500 -j DROP
-A RH-Firewall-1-INPUT -m limit --limit 1/s -j LOG --log-prefix "[iptables firewall] : " --log-level=info

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

COMMIT
参考

こちらをまんま参考(コピペ)にさせていただきました
iptablesでログ出力設定

2. ログ出力の設定(/etc/syslog.conf)を編集

次にログ出力の設定をします。

参考サイトによっては設定先がsyslog.confだったりrsyslog.confだったりします。
あたりまえですが今動いてるほうに設定します。

どちらが動いてるか確認
※ syslog動いてるか確認
# sudo /etc/init.d/syslog status
syslogd (pid  16049) を実行中...
klogd (pid  16052) を実行中...

※ rsyslog動いてるか確認
# sudo /etc/init.d/syslog status
rsyslogd は停止しています
設定

ってことで、syslogが動いてるのでそちらに設定。
自分は一番下に追記しました。

# sudo vi /etc/syslog.conf 
----- vi追記 ----
# iptables log
kern.info                                               /var/log/iptables
----------------

※ 再起動
# sudo /etc/init.d/syslog restart
カーネルロガーを停止中:                                    [  OK  ]
システムロガーを停止中:                                    [  OK  ]
システムロガーを起動中:                                    [  OK  ]
カーネルロガーを起動中:                                    [  OK  ]
補足

/etc/sysconfig/iptables/etc/syslog.confに ログレベルの設定をいれたと思うので念のためその辺りは合わせておきましょう。

infoなら両方info、debugなら両方debugとかですね。

  • iptables

    --log-level=info

  • sysconfig

    kern.info

syslogとrsyslog

本題ではないので割愛ですが気になる場合はこちらを参考に
syslogdの限界と次世代シスログデーモン

容量が気になる場合はローテートの設定も

ログのローテートの設定自体は本文じゃないので設定内容だけメモ。
iptablesのログを出すってことだけ考えればやらなくても動作に問題はありません。

# sudo vi /etc/logrotate.d/iptables
---- vi追記 ----
/var/log/iptables.log {
  rotate 3
  weekly
  compress
  missingok
  notifempty
  create 640 root adm
}
--------------- 

3. 確認してみる

ふつうに確認

確認といってもsyslog.configに設定したファイルを開くだけです。
ダメなヤツをログに出す設定をしたので中身はカラかもです

# sudo cat /var/log/iptables 
webアクセスで確認

せかっくなのでダメなアクセスをして確認します。
ブラウザのアドレス欄にhttp://[ipアドレスまたはhostname]:9876とか
適当なポートつきでアクセスしてみるとログが出ます。

# sudo tail -f /var/log/iptables 
Nov  6 23:16:40 hogehost kernel: [iptables firewall] : IN=eth0 OUT= MAC=00:0c:22:66:bb:11:00:55:56:c0:00:08:08:00 SRC=192.168.239.1 DST=192.168.239.129 LEN=64 TOS=0x00 PREC=0x00 TTL=64 ID=16142 DF PROTO=TCP SPT=58343 DPT=9876 WINDOW=65535 RES=0x00 SYN URGP=0 

まとめ

アクセスこねーなーってときとかふと見たくなるんですよね!
簡単ではありますが自分のためにもメモってみましたー!