はじめてでも爆速でCentOS6.6(さくらのVPS)をセキュアにセットアップする方法まとめ
爆速でセットアップを完了するため、極力コピペで設定できるようにしてみたよ(・∀・)
動作検証は、さくらのVPSで標準OSをインストールして行った。記事執筆時点ではCentOS6.6がインストールされたぞ。
# cat /etc/issue CentOS release 6.6 (Final) # uname -rs Linux 2.6.32-504.3.3.el6.x86_64
お知らせ
本記事の内容をFabric化したスクリプトを公開!ぜひ試してみてね。
→ 超速でCentOS6.6(さくらのVPS)をセットアップする俺史上最強のFabricスクリプトをさらす
rootのパスワード変更と作業用ユーザの作成
まずは、コンソールからSSHで接続しよう。
[localhost ~]$ ssh root@XX.XX.XX.XX
なお、サーバを起動してない場合は、事前に管理画面からサーバを起動しよう。詳しい方法はさくらのヘルプページを参考に。
rootのパスワード変更
さくらのVPSの場合、rootのパスワードはメールに直書きされて送られてくるので、最初に変更しておこう。
# passwd
作業用ユーザの作成
rootで直接作業をするとリスクが高いので、作業用のユーザを作成し、普段の作業はそちらで行うようにしよう。
後ほど、su/sudo権限をwheelグループに付与するので、ここで作成するユーザはwheelグループに所属させる。
# useradd <user_name> -G wheel # passwd <user_name>
<user_name> の部分は、作成するユーザ名に置き換えてほしい。
設定ファイルの自動バージョン管理
これから色々な設定ファイルを弄るので、いつでも元に戻せるように、 etckeeper を入れておこう。
etckeeperはデフォルトで、/etcディレクトリ配下をgitでバージョン管理してくれるぞ。
etckeeperのインストール
# yum -y install etckeeper
管理対象外の設定
ほっとくと、etckeeperは/etc/shadowや/etc/passwdも管理対象にしてしまう。これらは対象外にしておこう。
# touch /etc/.gitignore # echo "shadow*" >> /etc/.gitignore # echo "gshadow*" >> /etc/.gitignore # echo "passwd*" >> /etc/.gitignore # echo "group*" >> /etc/.gitignore
バージョン管理の開始
では、初期状態を保存しておこう。
# etckeeper init # etckeeper commit "First Commit"
etckeeperはyumなどのパッケージ管理のコマンドを実行した時や、cronで一日一回自動でコミットしてくれる。
ちなみに、etckeeper自体は単なるVCSのラッパーなので、/etcディレクトリで普通にgitコマンドが使えることを覚えておこう。
ファイルを前の状態に戻したりするときは、直接gitコマンドで操作したほうが簡単だ。
wheelグループにsu/sudo権限付与
wheelグループにsu権限付与
/etc/pam.d/su を修正するためのコマンドを叩こう。
# sed -i 's/^#auth\(\s\+required\)/auth\1/' /etc/pam.d/su
すると↓のように修正される。
#auth required pam_wheel.so use_uid ↓ コメントアウト(#)を外す auth required pam_wheel.so use_uid
wheelグループにsudo権限付与
/etc/sudoers を修正するためのコマンドを叩こう。
# sed -i 's/^# %wheel\(\s\+ALL=(ALL)\s\+ALL$\)/%wheel\1/' /etc/sudoers
すると↓のように修正される。
# %wheel ALL=(ALL) ALL ↓ コメントアウト(#)を外す %wheel ALL=(ALL) ALL
ちなみに、ここではsedコマンドを使って直接ファイルを編集しているが、普通に編集したい場合は visudo コマンドを使おう。
作業用ユーザの設定確認
一旦、VPSからログアウトし、先ほど作成した作業用ユーザでログインしてみよう。
[localhost ~]$ ssh <user_name>@XX.XX.XX.XX
ログインできればOKだ。
今度はsudoできることを確認しよう。
$ sudo whoami [sudo] password for <user_name>: ←作業用のパスワードを入力 root
最後にsuコマンドが使えることを確認しよう。
$ su - Password: ←rootのパスワードを入力
コピペミスがなければ、特に問題は起きないはずだ!
では、引き続きrootで作業を行っていこう。
SSHのポート番号変更とrootログイン禁止
SSHのポート番号変更
SSHのデフォルトポートはアタックを受けやすいので、変更してしまおう。
# sed -i 's/^#Port\s\+22/Port 50022/' /etc/ssh/sshd_config
すると↓のように修正される。
#Port 22 ↓ コメントアウト(#)を外し、"22"を任意の番号に変更 Port 50022
ここでは、50022に変更しているが、ウェルノウンポート(0–1023)以外ならなんでもいい。
動的/プライベートポート(49152–65535)だと確実にポート番号の競合を回避できるので、この範囲で選ぶのが個人的には好みだ。
リモートからのrootログイン禁止の設定
作業用ユーザでログイン及び、su/sudoができれば、rootがログインが必要はなくなる。
このタイミングでリモートからのrootログインを禁止してしまおう。
先ほど同様 /etc/ssh/sshd_config を修正する。
# sed -i 's/^#PermitRootLogin\s\+yes/PermitRootLogin no/' /etc/ssh/sshd_config
すると↓のように修正される。
#PermitRootLogin yes ↓ コメントアウト(#)を外し、"yes"を"no"に変更 PermitRootLogin no
sshdの再起動
このまま再起動しても問題ないが、念のため記述ミスがないかチェックを行おう。
# sshd -t
何も出なければOK。
/etc/ssh/sshd_config の設定はしくじるといきなり接続できなくなったりするので、sshdを再起動する前にチェックするクセをつけよう。
なお、さくらのVPS以外の場合、22番以外の通信がiptablesによって制限されている可能性があるので事前に確認したほうがいい。さくらのVPSはデフォルトフルオープンという漢らしい設定になっているので、このまま進めてもらって構わない。
では、反映するためにsshdを再起動する。
# service sshd restart
SSHの接続確認
VPSからログアウトして、ログインを試してみよう。
[localhost ~]$ ssh <user_name>@XX.XX.XX.XX ssh: connect to host XX.XX.XX.XX port 22: Connection refused
今まで通りのコマンドを打つと、拒否されるはずだ。
次にsshコマンドに -p オプションでポート番号を指定して、接続してみよう。
[localhost ~]$ ssh <user_name>@XX.XX.XX.XX -p 50022
今度はログインできたはずだ。
もう一度ログアウトし、rootでログインできないことも念のため確認しておこう。
[localhost ~]$ ssh root@XX.XX.XX.XX -p 50022
ちゃんと弾いてくれたね!
では、改めて作業用ユーザでログインしよう。
[localhost ~]$ ssh <user_name>@XX.XX.XX.XX -p 50022
公開鍵認証の設定
これまではSSH接続にパスワード認証を使ってきたわけだけど、よりセキュアになるよう、公開鍵認証を使えるようにしよう。
公開鍵用のファイルとパーミッションの設定
作業用のユーザのホームディレクトリに、公開鍵用の空ファイルを作成し、パーミッションを設定しておく。
$ mkdir ~/.ssh $ chmod 700 ~/.ssh $ touch ~/.ssh/authorized_keys $ chmod 600 ~/.ssh/authorized_keys
ここまで終わったら、ログアウトしておこう。次の作業はVPSではなく、自分の端末での作業になるので注意してほしい。
公開鍵をサーバへ転送
もし、秘密鍵・公開鍵を作ってない場合は作成しておこう。
[localhost ~]$ ssh-keygen -t rsa -C "your_email@example.com"
次に、自分の公開鍵をVPSへ転送しよう。
[localhost ~]$ scp -P 50022 ~/.ssh/id_rsa.pub <user_name>@XX.XX.XX.XX:~/.ssh/authorized_keys
scpコマンドでは、 -P オプションで、先ほど変更したポート番号を指定することに注意してほしい。
公開鍵認証を有効にする
改めてVPSへログイン。suしてrootになっておこう。
で、またまた /etc/ssh/sshd_config を修正する。
# sed -i 's/^#PubkeyAuthentication\s\+yes/PubkeyAuthentication yes/' /etc/ssh/sshd_config
すると↓のように修正される。
#PubkeyAuthentication yes ↓ コメントアウト(#)を外す PubkeyAuthentication yes
パスワードログインの禁止
公開鍵認証を使えるようにしたので、パスワードログインを禁止してしまおう。
もはやおなじみとなった /etc/ssh/sshd_config を修正する。
# sed -i 's/^PasswordAuthentication\s\+yes/PasswordAuthentication no/' /etc/ssh/sshd_config
すると↓のように修正される。
PasswordAuthentication yes ↓ "yes"を"no"に変更 PasswordAuthentication no
SSHを許可するユーザの制限
このタイミングでSSHに接続できるユーザを限定してしまおう。
/etc/ssh/sshd_config に "AllowUsers"を設定すればOKだ。
# echo "AllowUsers <user_name>" >> /etc/ssh/sshd_config
<user_name> の部分は、作業用ユーザの名前に置き換えよう。
ユーザ名をタイポするとログインできなくなるので、ユーザ名はコピペで入力することを推奨するぞ!
公開鍵認証でのSSH接続の確認
先ほど同様に、設定に問題がないかチェックして、sshdを再起動。
# sshd -t # service sshd restart
一度VPSからログアウトして、パスワード無しでログインできることを確認しよう。
[localhost ~]$ ssh <user_name>@XX.XX.XX.XX -p 50022
ログインできたら、suしてrootになっておいてね。
iptables(ファイアウォール)の設定
とりあえずSSHだけ許可する方針でいこう。
iptablesはviで直接ファイル弄ったほうが楽なんじゃないかという心の声を華麗にスルーして、愚直にコマンドでいくよ!( ・`ω・´)キリッ
接続済の通信は全て許可
これがないと詰む。
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
ローカルループバックアドレスを許可
ローカルは西川貴教ばりにオールOKにしておく。
# iptables -A INPUT -i lo -j ACCEPT
ICMPを許可
pingとかできるようにする。
# iptables -A INPUT -p icmp -j ACCEPT
各種攻撃対策
手早くそこそこセキュアにするならこんな感じ。
もっと頑張りたい人は、ココとか見ながら、アレンジしてみよう。
IP偽装対策
プライベートIPアドレスとブロードキャストアドレスぐらいは拒否しておこう。
プライベートIPアドレス
# iptables -A INPUT -s 10.0.0.0/8 -j DROP # iptables -A INPUT -d 10.0.0.0/8 -j DROP # iptables -A INPUT -s 172.16.0.0/12 -j DROP # iptables -A INPUT -d 172.16.0.0/12 -j DROP # iptables -A INPUT -s 192.168.0.0/16 -j DROP # iptables -A INPUT -d 192.168.0.0/16 -j DROP
ブロードキャストアドレス
# iptables -A INPUT -d 0.0.0.0/8 -j DROP # iptables -A INPUT -d 255.255.255.255 -j DROP
フラグメントパケット攻撃対策
# iptables -A INPUT -f -j DROP
ステルススキャンの禁止
# iptables -A INPUT -p tcp -m state --state NEW ! --syn -j DROP
IDENT port probe対策
メールサーバ等のレスポンス低下につながるため、DROPではなくREJECTするのがお決まりらしい。
# iptables -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset
Ping Flood対策
pingが1秒間に5回を超えたら破棄。
# iptables -A INPUT -p icmp --icmp-type echo-request -m hashlimit --hashlimit 1/s --hashlimit-burst 5 --hashlimit-mode srcip --hashlimit-name input_icmp --hashlimit-htable-expire 300000 -j DROP
許可する通信
SSHの場合(必須)
これを忘れるとSSH接続できなくなる(笑)ので必ずやろう。
SSHのポート番号を変えてる場合は、忘れずにその番号を指定すること。
# iptables -A INPUT -p tcp -m tcp --dport 50022 -j ACCEPT
この記事では50022をSSHのポート番号にしたので、それを指定している。
SSH以外の場合(任意)
<port_number> に許可したい番号を入れて、次のコマンドを叩けばOK。
# iptables -A INPUT -p tcp -m tcp --dport <port_number> -j ACCEPT
例えば、Webサーバを立てる場合、HTTP(80番)を許可にすればOKだ。
# iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
デフォルトポリシーの設定
送信は全て許可。受信と転送は全て破棄。受信と転送は明示的に設定した通信のみ許可する方針にした。
# iptables -P INPUT DROP # iptables -P OUTPUT ACCEPT # iptables -P FORWARD DROP
ちなみに、何も設定していない状態で、 iptables -P INPUT DROP を実行すると、接続できなくなって詰むので最後に実行している。
確認と設定反映
設定した内容を確認してみよう。
# iptables -L --line-numbers -n Chain INPUT (policy DROP) num target prot opt source destination 1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 3 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 4 DROP all -- 10.0.0.0/8 0.0.0.0/0 5 DROP all -- 0.0.0.0/0 10.0.0.0/8 6 DROP all -- 172.16.0.0/12 0.0.0.0/0 7 DROP all -- 0.0.0.0/0 172.16.0.0/12 8 DROP all -- 192.168.0.0/16 0.0.0.0/0 9 DROP all -- 0.0.0.0/0 192.168.0.0/16 10 DROP all -f 0.0.0.0/0 0.0.0.0/0 11 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp flags:!0x17/0x02 12 REJECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:113 reject-with tcp-reset 13 DROP icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 8 limit: up to 1/sec burst 5 mode srcip htable-expire 300000 14 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:50022 15 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 Chain FORWARD (policy DROP) num target prot opt source destination Chain OUTPUT (policy ACCEPT) num target prot opt source destination
こんな感じで表示されたら、設定した内容を保存して、iptablesを再起動しよう。
# service iptables save # service iptables restart
念のため再度ログインできることを確認しておこう。
[localhost ~]$ ssh <user_name>@XX.XX.XX.XX -p 50022
ログインできたら、suしてrootになっておこう。
システムの最新化と自動更新
システムの最新化
さくらの場合、だいたい最新だと思うが、念のためアップデートをかけておく。
$ yum -y update
システムの自動更新
手動でセキュリティパッチを当てるとかダルいので、自動で更新するようにしてしまおう。
まずはyum-cronをインストール。
$ yum -y install yum-cron
で、自動更新を有効にする。
# service yum-cron start # chkconfig yum-cron on
これでほっといても、最新のパッケージを使ってくれるようになるぞ!
IPv6と不要サービスの停止
IPv6の無効化
さくらでは、IPv4同様、IPv6もフルオープンの設定になっている。
ホントは真面目に設定すべきところだが、メンドウなので、IPv6自体を止めてしまうのが楽。
/etc/sysctl.conf へそのための設定を追記しよう。
# echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf # echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
追記したら、設定の反映をしよう。
# sysctl -p
最後に確認。 inet6 addr という行がなければOKだ。
# ifconfig
PostfixのIPv6無効化
さくらではデフォルトでPostfixが有効になっている。コイツもIPv6を使う設定が入っているので、IPv4のみ使うよう修正しておこう。
では /etc/postfix/main.cf を書き換えよう。
# sed -i 's/^inet_protocols\s\+=\s\+all$/inet_protocols = ipv4/' /etc/postfix/main.cf
すると↓のように修正される。
inet_protocols = all ↓ "all"を"ipv4"に変更 inet_protocols = ipv4
不要サービスの停止
明らかに不要だと自分で判断できるサービスは止めてしまおう。停止するサービスはこのあたりを参考に検討するとよさげ。
自動起動するサービスの確認
さくらの場合、デフォルトで結構不要なモノが停止されてたりするので、あまり頑張る必要はなさそう。
# chkconfig --list | grep 3:on acpid 0:off 1:off 2:on 3:on 4:on 5:on 6:off atd 0:off 1:off 2:off 3:on 4:on 5:on 6:off blk-availability 0:off 1:on 2:on 3:on 4:on 5:on 6:off crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off irqbalance 0:off 1:off 2:off 3:on 4:on 5:on 6:off network 0:off 1:off 2:on 3:on 4:on 5:on 6:off ntpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off ntpdate 0:off 1:off 2:on 3:on 4:on 5:on 6:off postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off sysstat 0:off 1:on 2:on 3:on 4:on 5:on 6:off yum-cron 0:off 1:off 2:on 3:on 4:on 5:on 6:off
サービスの停止と自動起動オフ
ここでは、先ほどIPv6を止めて不要になった、ip6tablesを停止してみよう。
# service ip6tables stop # chkconfig ip6tables off
他にも停止したいサービスがあったら、同じ要領で止めてしまおう。
ログ監視ツールの導入
サーバの初期セットアップも大事だけど日々の運用も大事だよね!
毎日サーバのログを自分で覗きに行くのは大変なので、定期的にログを見て、自動でメールを送ってくれる logwatch を導入してみよう。
rootのメールアドレス設定
事前にroot宛のメールアドレスを設定しておこう。
/etc/aliases にアドレスを追記するだけでおk。 <your_address> には自分のメールアドレスを入れよう。
# echo "root: <your_address>" >> /etc/aliases
では、反映しよう。
# newaliases
最後に送信できるか確認。
# date | mail root
日時だけが書かれたそっけないメールが届けば設定完了だ!
logwatchのインストール
メールアドレスが設定できたので、 logwatchをインストールしよう。
# yum -y install logwatch
logwatchの動作確認
まずは、--printオプションをつけて実行してみよう。実行結果を標準出力してくれるぞ。
# logwatch --print
次に、オプション無しで実行してみよう。
# logwatch
先ほど設定したroot宛にメールが届くはずだ!
ブルートフォースアタック対策
何度も不正アクセスを試みてこられると鬱陶しいよね。
そこで、一定回数ログインに失敗したIPアドレスをBANしてくれる、 fail2ban を導入しよう。
fail2banのインストール
# yum -y install fail2ban
fail2banの設定
SSHのポート番号を変えていると思うので、fail2banの設定にも反映しよう。
/etc/fail2ban/jail.conf のSSHのポート番号の記述をまとめて書き換える。
# sed -i 's/port=ssh/port=50022/' /etc/fail2ban/jail.conf
すると↓のように修正される。
port=ssh ↓ port=sshになってる箇所を、指定したポート番号に変更 port=50022
サービスの起動
では、サービスを起動しよう。
# service fail2ban start # chkconfig fail2ban on
デフォルトでは、SSHの認証に5回失敗した接続元をブロックしてくれる。
fail2banでは、SSHだけでなく、ApacheのDOS攻撃対策などもできる。適宜 /etc/fail2ban/jail.conf を修正して、活用してほしい。
ウィルス対策ソフトの導入
数は多くないがLinuxでもウィルスは存在する。
ってなわけで、オープンソースで提供されている、 Clam AntiVirus(ClamAV) を導入してみよう。
Clam AntiVirusのインストール
# yum -y install clamd
設定の変更と定義ファイルの最新化
まず、root権限で実行するように設定を変更する。
/etc/clamd.conf を更新するコマンドを叩こう。
# sed -i 's/^User\s\+clam$/#\0/' /etc/clamd.conf
すると↓のように修正される。
User clam ↓ コメントアウト(#)する #User clam
次にウィルス定義ファイルを最新化しよう。
# freshclam
サービスの起動と確認
準備が整ったら、サービスを起動しよう。
# service clamd start # chkconfig clamd on
最後に、動作確認だ。
# clamscan --infected --remove --recursive
不正侵入を検知するツールの導入
ここまでは、不正侵入をされないための設定を色々してきたわけだけど、どれだけ頑張ってもくぐり抜けられる可能性をゼロにはできない。
そこで、万一に備え、不正侵入を検知するツールを導入してみよう。
Rootkit Hunter
Rootkit Hunterはその名の通り、rootkitを検出するためのツールだ。
Rootkit Hunterのインストール
# yum -y install rkhunter
rootkitデータベースのアップデート
# rkhunter --update # rkhunter --propupd
Rootkit Hunterの確認
rootkitデータベースが最新になったら、検査してみよう。
# rkhunter --check --skip-keypress
Rootkit Hunterは以下のような観点でチェックしてくれる。
- コマンドが改ざんされていないか
- rootkitやワームが仕掛けられてないか
- バックドアやトロイの木馬が仕掛けられてないか
- 起動ファイルに不審な仕掛けがないか
- パスワードの設定されていないアカウントはないか
- SSHでrootログインは禁止されているか
- SSHバージョン1が禁止されているか
- syslog/rsyslogデーモンは稼働しているか
- /dev配下に不審なファイルがないか
Tripwire
Tripwireはファイルの改ざんをチェックするツールだ。
Tripwireのインストール
# yum -y install tripwire
サイトキーとローカルキーの生成
最初に、Tripwireを使用するための、サイトキーとローカルキーを生成しよう。
- サイトキー:設定ファイルやポリシーファイルの暗号化に利用
- ローカルキー:データベースファイルを使う時などに利用
当然だけど、サイトキーとローカルキーには異なるパスフレーズを設定すること!
何回も入力を求められるけど、頑張って入力してあげよう。
# tripwire-setup-keyfiles ・・・ Enter the site keyfile passphrase: ←サイトキーのパスフレーズを入力 Verify the site keyfile passphrase: ←サイトキーのパスフレーズを再入力 Generating key (this may take several minutes)...Key generation complete. ・・・ Enter the local keyfile passphrase: ←ローカルキーのパスフレーズを入力 Verify the local keyfile passphrase: ←ローカルキーのパスフレーズを再入力 Generating key (this may take several minutes)...Key generation complete. ---------------------------------------------- Signing configuration file... Please enter your site passphrase: ←サイトキーのパスフレーズを入力 Wrote configuration file: /etc/tripwire/tw.cfg ・・・ ---------------------------------------------- Signing policy file... Please enter your site passphrase: ←サイトキーのパスフレーズを入力 Wrote policy file: /etc/tripwire/tw.pol ・・・
全体的な動作設定
ファイルの追加/削除時に、ファイルとディレクトリの両方で変更検知するのを防止しておこう。
/etc/tripwire/twcfg.txt を編集する。
# sed -i 's/^LOOSEDIRECTORYCHECKING\s\+=false$/LOOSEDIRECTORYCHECKING =true/' /etc/tripwire/twcfg.txt
すると↓のように修正される。
LOOSEDIRECTORYCHECKING =false ↓ LOOSEDIRECTORYCHECKING =true
完了したら、暗号化した設定ファイルを作成する。
# twadmin -m F -c /etc/tripwire/tw.cfg -S /etc/tripwire/site.key /etc/tripwire/twcfg.txt Please enter your site passphrase: ←サイトキーのパスフレーズを入力
サイトキーのパスフレーズを聞かれるので、先ほど設定したパスフレーズを入力しよう。
ポリシーファイルの最適化
ポリシーのデフォルトの設定は /etc/tripwire/twpol.txt に書かれているが、これをそのまま使うと、
- 存在しないファイルのチェックが有効
- 存在するファイルのチェックが無効
になっている場合があり具合が悪いため、環境に合わせてポリシーを最適化する。
最適化のためのPerlスクリプトがCentOSで自宅サーバー構築さんで公開されているので、そのまま拝借させていただく。
扱いやすいように事前にGistに置いておいたので、それを使うことにする。
# wget https://gist.githubusercontent.com/tmknom/035709050cf94ea512ce/raw/d397d9c81c09176413e44da29993841cf4b3bb45/twpolmake.pl -P /etc/tripwire
ダウンロードしたスクリプトを実行しよう。
# perl /etc/tripwire/twpolmake.pl /etc/tripwire/twpol.txt > /etc/tripwire/twpol.txt.new
完了したら、暗号化したポリシーファイルを作成する。
# twadmin -m P -c /etc/tripwire/tw.cfg -p /etc/tripwire/tw.pol -S /etc/tripwire/site.key /etc/tripwire/twpol.txt.new Please enter your site passphrase: ←サイトキーのパスフレーズを入力
ここでも、サイトキーのパスフレーズを聞かれるので、先ほど設定したパスフレーズを入力しよう。
テキスト版の設定ファイルの削除
tw.cfgとtw.polを生成したら、元になったテキスト版の設定ファイルを必ず削除しよう。
暗号化前のファイルが残っていると、暗号化した意味がなくなってしまうぞ!
# rm -f /etc/tripwire/twcfg.txt* # rm -f /etc/tripwire/twpol.txt*
ベースラインデータベースの初期化
設定が完了したので、ベースラインデータベースを初期化する。
# tripwire --init Please enter your local passphrase: ←ローカルキーのパスフレーズを入力
tripwireでは、ベースラインデータベースを基準にファイルの改竄チェックを行っていくことになる。
改ざんチェックの実行
最後に、チェック方法を紹介しておこう。
# tripwire --check
レポートは、 /var/lib/tripwire/report/ に格納される。
ファイルの更新の反映
当然ながらファイルの更新があると、tripwireはレポートに報告を上げてくる。
ほっとくと永久に報告してくるので問題ない更新と判断できたらtripwireに教えてあげよう。
まずは、 /var/lib/tripwire/report/ から最新のレポートを探しだそう
# ls -al /var/lib/tripwire/report/
次に、最新のtwrファイルに対し、次のコマンドを叩こう。
# tripwire -m u -r /var/lib/tripwire/report/xxxxxx.twr Modified: [x] "/var/lib/tripwire/xxxx.twd"
すると、viが起動し、行頭に [x] がついた行が途中に見つかるはずだ。これがついているファイルは、次回以降のレポートからは取り上げられなくなる。
なので、内容を確認し、問題がなければそのまま、viでファイルを保存終了(:wq)すればOK。
逆に、次回以降も警告してほしい場合は、"x"を削除し [] としてから、保存終了しよう。
まとめ
最終的にココに書いた内容をFabric化した記事を公開してるので良かったら見てね!
スクリプト化したことで、Vagrantでゴニョゴニョするのと変わらないレベルでセットアップができるようになって個人的には大満足w ∩( ・ω・)∩バンジャーイ
追記:SELinuxについて
SELinuxはさくらのVPSの場合、デフォルトで無効になっている。
# cat /etc/sysconfig/selinux SELINUX=disabled
ホントは有効にしてちゃんと設定したほうがいいと思うけど、SELinuxの知識があまりないから日和っちゃったw
そろそろマジメに勉強しようかな〜(=゚ω゚=)
参考書籍
今回の記事と後編の記事は、この本を教科書にして書き上げた。ブログの記事なので実は省略した部分も多いんだけど、しっかり学びたい場合は一読をオススメするよ!