自分が個人で管理しているサーバはlogwatchで報告を上げさせているんだけど、インターネットに接しているサーバのiptables firewall部分が長すぎて困っていました。そのサーバはshorewallでiptablesの設定を入れているので、最初のうちは「しっかり守ってるなー」なんて思っていたのですが、やっぱり長過ぎるので設定を変えることにしました。
ところで、logwatchのiptables firewallってなんぞやって話をしておきます。まずlogwatchってのはLinuxなどのツールで、ログを解析して、だいたい何があったかをまとめてメールしてくれるやつです。解析内容に踏み込んだことはないけど、デフォルトでいい感じです。
そのlogwatchのiptables firewallの部分なのですが、言わずと知れたiptablesというファイアウォールのログを解析してくれています。例えばある日の内容。
--------------------- iptables firewall Begin ------------------------
Listed by source hosts:
Dropped 1596 packets on interface eth0
From *.*.*.* - 1 packet to tcp(23)
IPアドレスは伏せておきました。1596回Dropしたって言ってますね。例で挙げたのはTCPの23番ポート宛のパケット。今時23番ポートを全開しているホストも少ないだろうけど、見つかったら高い確率で入れるのかな?残念ながら、うちのサーバではファイアウォールを超えたとしてもサービスが動いていないので入ることはできません。
そんな感じで動いていないサービスへの攻撃もログに取っちゃってるんですよね。というのも、shorewallのデフォルト設定がたぶんDROPしてログなんだよね。なのでどんどん出てきちゃう。参考までに設定変更前のpolicyファイルの内容がこれ。
############################################################# #SOURCE DEST POLICY LOG LIMIT: CONNLIMIT: # LEVEL BURST MASK $FW net ACCEPT net all DROP info stub all DROP info all all REJECT info
netがインターネットで、stubは未使用のインタフェース。未使用なのでパケットが入ってくることはないはずだけど、しっかり塞いでおいてあります。最後のall all REJECTの理由はなんだっけな。stubと合わせてall all DROPでいいんじゃないかな。むしろstub all REJECTがいいかもしれない。って、それは今は関係ないな。
とりあえず、policyはnet all DROP -に変更しておきます。LOG LEVEL列を – にするとログに出力されなくなるんだそうです。
net all DROP -
ポリシーのログ出力を止めればlogwatchでも検出されなくなるのですが、ちょっと寂しい。なので接続元を制限して公開しているポートはログに出そうと思います。それはrulesに書けばOKです。
#ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL RATE USER/ MARK CONNLIMIT TIME HEADERS SWITCH # PORT PORT(S) DEST LIMIT GROUP SECTION NEW HTTP(ACCEPT) net $FW HTTPS(ACCEPT) net $FW Ping(ACCEPT) net $FW SSH(ACCEPT:info) net:*.*.*.* $FW SSH(DROP:info) net $FW Munin(ACCEPT) net:*.*.*.* $FW Munin(DROP:info) net $FW
またもIPは伏せておきました。自分の拠点だしね。インターネットからの通信はHTTPとHTTPSに加えてPingも許可しています。プロトコルの指定はマクロを利用していますので、Pingってのはicmpの8のことです。次いでSSHとMuninは拠点からの接続のみ許可して、それ以外はDROPしてinfoレベルのログ出力です。SSHは拠点からの接続でもログに出しておくことにしました。
設定ができたらmakeしてshorewallをreloadです。そして接続テスト。SSHで入れることを確認したら完了。
その結果、logwatchの内容はこうなりました。
--------------------- iptables firewall Begin ------------------------
Listed by source hosts:
Accepted 4 packets on interface eth0
From 202.231.70.100 - 4 packets to tcp(22)
Listed by source hosts:
Dropped 1 packet on interface eth0
From 103.24.176.78 - 1 packet to tcp(22)
すっきり。