さくらの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

19 行目の XXXXX には、前回変更した SSH のポート番号を指定すること。

上記内容は SyntaxHighlighter Evolved という WordPress プラグインで色つけしているのだが、現行バージョンでは空行が「半角スペース + 空行」になってしまう。そのような行が設定ファイルに含まれていると、iptables はエラーになる。

よって、もしこのページから設定をコピペする場合は、いったんテキストエディタにコピーして、空行となる 6、17、21、23 行目を「半角スペース + 空行」から「改行」に修正する必要がある。

修正には、改行を表示できるテキスト エディタがよい。なお、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

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