アカベコマイリ

HEAR NOTHING SEE NOTHING SAY NOTHING

さくらのVPS を改めて使いはじめる 3 - iptables と logwatch

さくらのVPS(v3) 2GB プランへの環境構築メモ 3。今回は iptables によるファイアーウォールと logwatch を使用したサーバーのログ監視設定をおこなう。

iptables

iptables はパケットフィルタリング機能を提供するプログラムでファイアーウォール構築などに利用できる。非常に多機能で奥の深いプログラムだが、とりあえず今回は必要最小限のフィルタ設定をおこなうことにする。

設定の詳細については以下を参照のこと。これらのサイトは、だいぶ前に書いたさくらのVPS を使いはじめる 3 – iptables を設定するでも取り上げたが、今見てもあいかわらず分かりやすい。

まずは iptables がインストールされていることを確認。

$ yum list installed | grep iptables
iptables.x86_64         1.4.7-5.1.el6_2 @updates/6.2
iptables-ipv6.x86_64    1.4.7-5.1.el6_2 @updates/6.2

どうやらインストールされているようだ。次は iptables 設定を確認。

$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

何も設定されていないので改めて設定をおこなう。

iptables のフィルタ設定

今回の設定ではSSH と HTTP 用の接続のみを許可し他は必要になるまで拒否する。以前の記事では FTP や MySQL も許可していたが、いまは不要なので拒否しておく。

許可するポート番号だが SSH のポートは前回の記事で変更したもの、HTTP は 80 番とする。

iptables 設定は /etc/sysconfig/iptables に対して記述。初期状態ではこのファイルが存在しないため新規作成する。操作には root 権限が必要なので sudo vi を実行。

$ sudo vi /etc/sysconfig/iptables

作成したファイルの内容を以下のように編集する。

*filter
:INPUT   ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT  ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]

-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# SSH, HTTP
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport XXXXX -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80    -j ACCEPT

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

COMMIT

SSH, HTTP とコメントされた直後の行にある XXXXX は SSH の設定なので前回変更したポート番号を指定すること。

本記事から上記サンプルをコピペすると環境によっては空行に半角スペースが入るかもしれない。iptables行末の空白や最終行の COMIT 以降に空白や改行が入っているとエラーになるため、これらを文字として表示できるテキスト エディター (Atom や vscode など) で確認してから利用することをオススメする。

iptables の再起動と設定確認

設定ファイルを作成できたので iptables を再起動。設定が適切なら以下のように出力されるはず。

$ sudo service iptables restart
iptables: ファイアウォールルールを消去中:                  [  OK  ]
iptables: チェインをポリシー ACCEPT へ設定中filter         [  OK  ]
iptables: モジュールを取り外し中:                          [  OK  ]
iptables: ファイアウォールルールを適用中:                  [  OK  ]

最後に設定が反映されていることを確認しておく。iptables-L オプションをつけて実行すると現在の設定が表示される。

$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
RH-Firewall-1-INPUT  all  --  anywhere             anywhere

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
RH-Firewall-1-INPUT  all  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain RH-Firewall-1-INPUT (2 references)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     icmp --  anywhere             anywhere            icmp any
ACCEPT     esp  --  anywhere             anywhere
ACCEPT     ah   --  anywhere             anywhere
ACCEPT     udp  --  anywhere             224.0.0.251         udp dpt:mdns
ACCEPT     udp  --  anywhere             anywhere            udp dpt:ipp
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ipp
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:XXXXX
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:http
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

バッチリ反映されてる。めでたしめでたし。

logwatch

logwatch はサーバー上のさまざまなログを収集・整形してメール送信してくれる便利ツール。メールは整形された内容で送信されるため、ざっと見ても要点がつかみやすい。だいたい数分で読み終わるので私は毎朝チェックするようにしている。というわけでさっそくインストール。

$ sudo yum install logwatch

インストールできたら動作確認。logwatch コマンドに --print オプションをつけて実行すると現時点のログが表示される。

$ sudo logwatch --print

################### Logwatch 7.3.6 (05/19/07) ####################
        Processing Initiated: Sun Apr  1 01:43:18 2012
        Date Range Processed: yesterday
                              ( 2012-Mar-31 )
                              Period is day.
      Detail Level of Output: 0
              Type of Output: unformatted
           Logfiles for Host: www1272uf.sakura.ne.jp
  ##################################################################

--------------------- Disk Space Begin ------------------------

Filesystem            Size  Used Avail Use% Mounted on
/dev/vda3             195G  1.4G  184G   1% /
/dev/vda1             251M   32M  207M  14% /boot

---------------------- Disk Space End -------------------------

###################### Logwatch End #########################

ログ収集の対象サービスが増えると表示内容にも反映される。よく使われるもの、例えば sudohttpd などは初めから対象となっている。もちろん後から対象を追加したり整形ルールを変更することも可能。

サービスによっては問題点を警告してくれる。たとえば httpd は以下のような感じで悪意のありそうなアクセスと IP アドレスが通知されるので iptables のブロック対象に追加するとよいだろう。XXX.XXX.XXX.XXX の部分が IP アドレスになる。

--------------------- httpd Begin ------------------------

A total of 7 sites probed the server
   XXX.XXX.XXX.XXX

A total of 1 possible successful probes were detected (the following URLs
contain strings that match one or more of a listing of strings that
indicate a possible exploit):

logwatch のメール送信先を変更する

初期状態の logwatch は root にメールを飛ばすようになっているので、これをレポートを受け取りたいアドレスに変更しておく。

まずは logwatch からメール送信できることを確認。logwatch コマンドの --mailto オプション後に送信先アドレスを指定して実行すれば現時点のログが送信される。

$ sudo logwatch --mailto foo@example.com

ちなみにさくらのVPS が試用期間中だと、メール送信がおこなえないので注意すること。

メールを受信できたなら自動送信されるアドレスを変更しよう。logwatch の設定ファイルを開く。

$ sudo vi /etc/logwatch/conf/logwatch.conf

MailTo に送信先アドレスを設定してファイルを保存。

# Local configuration options go here (defaults are in /usr/share/logwatch/default.conf/logwatch.conf)
MailTo=foo@example.com

これで毎日レポートが送られてくるはず。メールの件名は「Logwatch for ドメイン名 (Linux)」となるので「Logwatch」をキーワードにしてメーラーのフィルタを設定しておくとよい。

なおメール送信時刻のデフォルトは深夜になっているらしい。過去の logwatch メールを確認したら、だいたい午前 3:00 ~ 5:00 あたりに受信されていた。

...今回はここまで。次回は Apache の設定をおこなう。

Comments from WordPress

  • gatchang 2012-05-26T10:29:35Z

    VPSの設定大変参考になります。
    色んなサイトがありますが、やっと「ここ見て最初にやってれば間違いない」と思えるサイトが見つかりました。

    不慣れな者にはほんとありがたいです。
    で、より良い記事のために、校正をば。

    「logwatch のメール送信先を変更する」の項のコマンド

    $ logwatch --mailto foo@example.com

    は、sudoで実行しないと、怒られましたw

    You do not have permission to create a temporary directory under /【ログウォッチのディレクトリ】.  You are not running as superuser.
    
    $ sudo logwatch --mailto foo@example.com

    これで無事メールも届きました。
    これからも良い記事頑張ってください。

  • akabeko akabeko 2012-05-27T13:56:25Z

    gatchang さん、こんばんは。

    ご指摘ありがとうございます。mailto の部分を修正しました。

    読み返してみたら、logwatch --print のほうは sudo を指定していますね。もしかすると、sudo の有効時間内に mailto を実行してしまい、指定を省略できていたことに気付かなかったのだと思います。