さくらの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 #########################
ログ収集の対象サービスが増えると表示内容にも反映される。よく使われるもの、例えば sudo
や httpd
などは初めから対象となっている。もちろん後から対象を追加したり整形ルールを変更することも可能。
サービスによっては問題点を警告してくれる。たとえば 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 2012-05-27T13:56:25Z
gatchang さん、こんばんは。
ご指摘ありがとうございます。mailto の部分を修正しました。
読み返してみたら、logwatch --print のほうは sudo を指定していますね。もしかすると、sudo の有効時間内に mailto を実行してしまい、指定を省略できていたことに気付かなかったのだと思います。