= さくらの VPS セットアップメモ = == 申し込み == * [http://vps.sakura.ad.jp/ さくらの VPS] 上記サイトより手順に沿って申し込む。ここで取得するのは以下の 2つ。 * さくらインターネット会員 ID * 「お申込受付完了のお知らせ」と題されたメール、および登録時の画面にて ID が伝えられる。パスワードは登録時に指定したものをそのまま利用する。 * [https://secure.sakura.ad.jp/menu/ 会員メニュー]にて、契約情報の確認および変更を行うのに使用する。'''ID は絶対に紛失しないよう保管すること'''。 * VPS の IP アドレス、および root 初期パスワード * 「仮登録完了のお知らせ」と題されたメールにて、連絡される。'''このメールは紛失・流出しないよう大切に保管すること'''。 == VPS の起動 == VPS は起動していない状態で提供される。そのままの状態で連絡された IP に ssh でつなぎに行ってもうんともすんとも言わない。 VPS の起動方法は以下の通り。 1. [https://secure.sakura.ad.jp/vpscontrol/ VPS コントロールパネル]にアクセスする。 1. 取得した VPS の IP アドレスと root パスワードを入力する。 1. VPS ホーム画面にて、「仮想サーバ操作」の「起動」ボタンをクリックする。 == ソフトウェアの更新と ViM のインストール == ViM が入っていなかったのでインストールする。ついでにソフトウェアを最新版にアップデートしておく。 1. root でログインする。 1. ソフトウェアを最新版にアップデートする。 {{{ $ yum check-update $ yum update }}} 1. ViM をインストール {{{ $ yum install vim-enhanced }}} == ユーザー登録と ssh 接続のためのセキュリティ設定 == 初期状態では、 ssh 接続にて root でパスワード認証によりログインする、という決して安全とは言えない状態になっている。これを、 root 以外のユーザーのみが公開鍵認証によりログインできるように設定する必要がある。 この設定方法については、よくまとまった記事があったので、こちらを参照のこと。 * [http://blog.myfinder.jp/2010/09/vpsssh.html myfinder's blog: さくらのVPSを借りたら真っ先にやるべきssh設定] 以下、簡単にメモする。 1. root でログインする。 1. ユーザーを作成する。 {{{ $ useradd -m -G wheel hoge $ passwd hoge }}} 1. sshd の設定を変更する。 {{{ $ vim /etc/ssh/sshd_config PermitRootLogin no # root での接続を無効 PasswordAuthentication no # パスワード認証を無効 UsePAM no # PAM を無効 }}} 1. 公開鍵認証用の鍵を作る。これはローカル PC 上で行う。 * '''公開鍵のパスワードと実際のユーザーのパスワードは同じにしないこと'''。これ、同じにしたらあんまり意味がなくなってしまう。 * Windows で Putty の場合は puttygen.exe ってので作れる。公開鍵と秘密鍵をファイルに出力し (秘密鍵は拡張子が .puk になる)、Putty からの接続時に秘密鍵ファイルを「接続/SSH/認証」画面の「認証のためのプライベートキーファイル」欄に指定する。 * それ以外 (Windows で Cygwin 利用、または Mac OS X や Linux など) の場合、 ssh-keygen コマンドを使用する。 -t は rsa か dsa のどちらかにすること (rsa1 は弱いので不可)。 {{{ $ ssh-keygen -t dsa $ ls -a .ssh }}} これにより、 .ssh ディレクトリ下に秘密鍵ファイル (id_rsa または id_dsa) と公開鍵ファイル (id_rsa.pub または id_dsa.pub ファイル) が生成される。 1. 公開鍵認証ファイルをサーバー上に書き込む。 {{{ $ su - hoge $ mkdir .ssh $ chmod 700 .ssh $ vim .ssh/authorized_keys (公開鍵ファイルの内容をコピペする) $ chmod 600 .ssh/authorized_keys }}} 1. sshd を再起動。 {{{ $ /etc/init.d/sshd restart }}} 1. 一旦ログアウトし、作ったユーザーでログインし直す。 {{{ $ exit logout $ ssh -l hoge xxx.xxx.xxx.xx }}} * Windows で Putty の場合は、ホスト名を hoge@xxx.xxx.xxx.xx とかにして接続する。秘密鍵ファイルの指定を忘れずに! 1. sudo を設定する。 {{{ $ su - $ visudo %wheel ALL=(ALL) ALL # コメントアウトされていたはずなので、コメントを外す $ exit $ sudo su - # sudo できるか確認 }}} 1. root パスワード無効化、 sudo ログの設定は、お好みで。 == シェルのロケール設定 == bash を UTF-8 による日本語表示に対応させる。 {{{ $ cd $ vim .bash_profile # 以下の行を追加 export LANG=ja_JP.UTF-8 $ sudo su - $ vim .bash_profile # root ユーザーでも日本語表示したい場合はこちらも同様に設定する。 export LANG=ja_JP.UTF-8 }}} お好みで。 == BIND の設定 == 参考: * [http://www.atmarkit.co.jp/flinux/rensai/bind909/bind909a.html @IT:BIND 9のセキュリティ対策] 1. なんと BIND がインストールされていないので、インストールする。 {{{ $ sudo yum install bind }}} 1. chroot のためのディレクトリ構成を /var/named/chroot 以下に構築する。 {{{ $ sudo su - $ mkdir -p /var/named/chroot/ $ cd /var/named/chroot $ chown root:named . $ chmod 760 . $ chmod g+s . $ mkdir -p dev etc var/log var/named var/run/named $ chmod o-rx * var/* var/run/named $ chmod g+w var/log var/run/named }}} 1. 設定ファイルをコピーし、修正する。また、ゾーンファイルを作成する。 {{{ $ cd etc $ cp /etc/named.conf . $ cp /etc/localtime . $ vim named.conf (設定内容は省略) }}} * ゾーンファイルの作成については、[http://blog.harapeko.jp/2008/05/07/buildup-server/ 会社サーバーを最初に立てたときのブログ記事]を参照。 * named.root ファイルが必要な場合は、[ftp://ftp.rs.internic.net/domain/named.root このファイル]を wget してしまえばいいと思う。 {{{ $ cd /var/named/chroot/var/named $ wget ftp://ftp.rs.internic.net/domain/named.root $ chmod 640 named.root }}} 1. デバイスファイルを作成する。 {{{ $ cd /var/named/chroot/dev $ mknod null c 1 3 $ mknod random c 1 8 $ chmod 666 * }}} 1. CentOS なので、 chroot が有効になるよう、 /etc/sysconfig/named ファイルを編集する。 {{{ $ vim /etc/sysconfig/named ROOTDIR="/var/named/chroot" }}} 1. BIND を起動。 {{{ $ /etc/init.d/named start }}} 上手く起動すればめでたしめでたし。でもドメイン取得していないうちは起動しても意味ないので、とりあえず止めておきましょう。今回はサーバー移行で移行前のサーバーをまだ使っていたいので、とりあえず止めておきました。 {{{ $ /etc/init.d/named stop }}} == パケットフィルタリング設定 == iptables は入っていて、動いていたが、肝心要の設定ファイル /etc/sysconfig/iptables が存在しなかった。移転前のサーバーからこのファイルをコピーし、それを適宜修正してから稼働させた。 1. /etc/sysconfig/iptables-config の内容を確認。 {{{ $ sudo su - $ vim /etc/sysconfig/iptables-config # 以下の行が移転前サーバーと異なっていたが、気にせずそのままにした。 IPTABLES_MODULES="" }}} * ちなみに、移転前サーバーではこの行は以下のようになっていた。 {{{ IPTABLES_MODULES="ip_conntrack_netbios_ns" }}} * これは iptables 用に読み込むモジュールの指定で、指定できるモジュールは CentOS の場合、以下のようにすることで調べることができる。 {{{ $ ls /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/ }}} * ip_conntrack モジュール (接続情報トラッキング) や ip_conntrack_ftp モジュール (ip_nat_ftp と組み合わせて FTP の PASV モードに対応?) なんかはネットで情報が出てくるが、 ip_conntrack_netbios_ns については、読み込みに失敗したから外しました、といったような情報しか出てこなかった。 Windows マシンからの通信絡みなんだろうとは思うんだが…詳細きぼん… さくらの VPN にもこのモジュールは存在するので指定してもエラーにはならないが、何に使うものかも分からないで指定するのも無意味なので外しておくことにした。 1. /etc/sysconfig/iptables を移転前サーバーからコピーする。 * まず、移転前サーバーにて。 {{{ $ sudo cp /etc/sysconfig/iptables . $ sudo chown murachi:wheel iptables }}} * 次に、移転先サーバーにて。 {{{ $ rsync -ae ssh onaka.harapeko.jp:/home/murachi/iptables . $ sudo su - $ chown root:root /home/murachi/iptables $ mv /home/murachi/iptables /etc/sysconfig/ }}} 1. /etc/sysconfig/iptables の内容を適宜修正。 {{{ $ vim /etc/sysconfig/iptables # Firewall configuration written by system-config-securitylevel # Manual customization of this file is not recommended. *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 # DNS -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT # Service applications with TCP: ssh, SMTP, SMTP Submission port, POP3S, HTTP(S) -A RH-Firewall-1-INPUT -m state --state NEW -m multiport -p tcp --dports 22,25,587,995,80,443 -j ACCEPT # NTP -A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 123 -j ACCEPT # other (reject) -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited COMMIT }}} * ポート 631 (=Internet Printing Protocol) なんて使わないのでコメントアウト。 * TCP でしか使わないようなサービス (ssh, SMTP (サブミッションポート含めて), POP3S, HTTP(S)) を multiport モジュールを使って 1行にまとめたらファイルがやたらとコンパクトになって良い感じ。 * セキュリティリスクにしかならない FTP と POP3 は未来永劫使う予定無いので思い切って削除。 1. iptables を再起動する。 {{{ $ /etc/init.d/iptables restart }}} == Postfix 設定 == メールサーバーは Postfix を使用する。詳細な設定は DNS を有効にし、 SSL を組み込んでからさらに行う。ここではとりあえずインストールと 1. デフォルトで入っている Sendmail を停止し、二度と起動しないようにする。 {{{ $ /etc/init.d/sendmail stop $ chkconfig --del sendmail }}} 1. Postfix をインストール。 {{{ $ sudo su - $ yum install postfix }}} 1. SMTP-AUTH を利用する為、 SASL をインストールする。 {{{ $ yum install cyrus-sasl }}} 1. /etc/postfix/main.cf を書き換える。 {{{ $ vim /etc/postfix/main.cf # 以下は既存の項目を書き換え。 myhostname = developer.harapeko.jp inet_interfaces = all mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain mynetworks_style = host home_mailbox = Maildir/ # (こっちはコメントアウト。 X Window とか使わないし) #debugger_command = # PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin # xxgdb $daemon_directory/$process_name $process_id & sleep 5 # (こっちのコメントアウトを外す。) debugger_command = PATH=/bin:/usr/bin:/usr/local/bin; export PATH; (echo cont; echo where) | gdb $daemon_directory/$process_name $process_id 2>&1 >$config_directory/$process_name.$process_id.log & sleep 5 # SASL 関連の設定; SSL 証明書を取得するまでコメントアウト #smtpd_sasl_auth_enable = yes #smtpd_sasl_security_options = noanonymous, noplaintext #smtpd_sasl_local_domain = $myhostname #smtpd_tls_cert_file = /etc/httpd/conf/developer_harapeko_jp.crt #smtpd_tls_key_file = /etc/httpd/conf/developer.harapeko.jp.key.pk #smtpd_tls_CApath = /etc/httpd/conf/ #smtpd_use_tls = yes #smtpd_tls_auth_only = yes #smtpd_tls_session_cache_timeout = 3600s #smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination # メールサイズを 10MB に制限 message_size_limit = 10485760 }}} 1. Maildir/ 形式を利用するので、ホームディレクトリスケルトンに Maildir ディレクトリを作成する。 {{{ $ mkdir -p /etc/skel/Maildir/{new,cur,tmp} $ chmod -R 700 /etc/skel/Maildir/ }}} 1. /etc/postfix/master.cf を書き換える。 {{{ $ vim /etc/postfix/master.cf # サブミッションポートを有効にする submission inet n - n - - smtpd # -o smtpd_sasl_auth_enable=yes # あとで }}} 1. システムで使用するサーバー機能を Postfix に切り替える。 {{{ $ alternatives --config mta There are 2 programs which provide 'mta'. Selection Command ----------------------------------------------- *+ 1 /usr/sbin/sendmail.sendmail 2 /usr/sbin/sendmail.postfix Enter to keep the current selection[+], or type selection number: 2 }}} 1. Postfix を起動し、問題なければサーバー起動時に自動起動するよう設定する。 {{{ $ /etc/init.d/postfix check $ /etc/init.d/postfix start $ chkconfig --add postfix }}} 1. /usr/lib/sasl2/smtpd.conf を作成する。 {{{ $ vim /usr/lib/sasl2/smtpd.conf pwcheck_method: auxprop auxprop_plugin: sasldb mech_list: cram-md5 digest-md5 }}}