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

2012年4月17日 6 開発 , ,

さくらの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 以降に空白や改行が入っているとエラーになるため、これらを表示できるテキスト エディタで確認してから利用することをオススメする。

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 #########################

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

また、サービスによっては問題点を警告してくれる。たとえば httpd の場合、以下のような感じで、悪意のありそうなアクセスと、その 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):

XXX.XXX.XXX.XXX の部分が IP アドレスになる。この情報を元に iptables で接続ブロックするなどの対策がおこなえる。

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 の設定をおこなう。


TRACKBACKS

COMMENTS

  • gatchang
    2012年5月26日 7:29 PM 返信

    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
    これで無事メールも届きました。

    これからも良い記事頑張ってください。

  • 2012年5月27日 10:56 PM 返信

    gatchang さん、こんばんは。

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

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

REPLY

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です