2011-04-13
さくらインターネットのVPSを借りてみたので設定をメモする
さくらインターネットのVPSプランを借りてみた。いくらVPSとはいえ、980円/月で管理者権限があるのは魅力的。
とりあえずVPSプランのサーバーを借りたらやっておきたい設定をまとめてみる(さくらに限らないことばかりだが、、)
とりあえずユーザー設定
まずはじめにroot権限が与えられるので、通常で利用する一般ユーザーを作成する。rootについては、SSH経由でログインできないようにするなど、権限を制限する。
- まず一般ユーザーを作成し、パスワードを設定する。
# passwd # useradd "ユーザー名" # passwd "ユーザー名"
- sudo がインストールされていることを確認する。
# yum list installed | grep sudo sudo.x86_64 1.7.2p1-10.el5 installed
- 一般ユーザーをwheelに追加し、wheelグループに余計なユーザーがいないことを確認する。
# usermod -G wheel "ユーザー名" # id "ユーザー名" # cat /etc/group | grep wheel
- wheel以外はsuできないようにする。
# vi /etc/login.defs SU_WHEEL_ONLY yes # vi /etc/ssh/sshd_config auth required pam_wheel.so use_uid # visudo %wheel ALL=(ALL) ALL
- sudoしやすいようにsbinディレクトリにパスを通す。
# vi /home/username/.bash_profile PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin
- 一旦、サーバーをリブートする。
# shutdown -r now
SSHの設定
- 鍵認証を行うようにし、パスワード認証をOFFにする
- リモートからのrootログインをOFFにする
- ポート番号をデフォルトの22から変更する(ここでは10022)
- 公開鍵/秘密鍵を作成し、authorized_keysに設定する(パスフレーズは設定してもしなくてもよい)
$ mkdir ~/.ssh $ ssh-keygen -t rsa $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys $ chmod 700 ~/.ssh $ chmod 600 ~/.ssh/authorized_keys # ※後で必要になるので、先にローカルにダウンロードしてから削除すること $ rm -f ~/.ssh/id_rsa ~/.ssh/id_rsa.pub
私の場合はSSHはPuTTYを使っているが、その場合、上記の秘密鍵からPuTTY用の秘密鍵を生成する必要がある。
参考)http://vine.1-max.net/PuTTY.html
- sshd_configの以下の設定を変更し、sshdをrestartします。
# vi /etc/ssh/sshd_config Port 10022 PermitRootLogin no PasswordAuthentication no # service sshd restart
# vi /etc/hosts.allow sshd : 自宅IP # vi /etc/hosts.deny sshd : all
※ちなみにこの設定を間違えたまま開いているターミナルを閉じてしまうと、誰もログインできなくなる可能性があるため、必ず別のウィンドウで接続できることを確認する。
ファイアウォールの設定
不要な接続は拒否する。今回はMySQLはTCPではなくlocalhost接続なので、不要なので、SSHとHTTPで使うポートのみ許可すればよい。
- まずは現状を確認する。(何も設定されていない。)
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
# 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 -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 10022 -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
# service iptables restart # service iptables restart Flushing firewall rules: [ OK ] Setting chains to policy ACCEPT: filter [ OK ] Unloading iptables modules: [ OK ] Applying iptables firewall rules: [ OK ] # 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:10022 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:http REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
dpt:http、dpt:10022という表示があれば正常。
必要なモジュールインストール
何が必要かは人によると思いますが、必要なものを落としてくる。ただし、yum -y updateは必ず行う。(yumリポジトリは今回、変更していないが必要に応じて変更するかも知れない)
# yum -y install vim-enhanced # yum -y install subversion # yum -y install sysstat # yum -y install php php-devel php-gd php-mbstring php-pear php-mysql php-pdo # yum -y install postfix # yum -y install mysql-server mytop # yum -y install httpd httpd-devel # yum -y update
MySQL 関連
アプリケーション関連のデータは大体ここに入るので、慎重に設定する。本当はMySQLサーバーを独立してLAN側に配置するのがいいが、ここではもろもろの事情でWEBサーバーと共有している。
- my.cnfのチューニングは後で行うとして、とりあえずポート番号を変える。
# cp /etc/my.cnf /etc/my.cnf.bk.YYYYMMDD [mysqld] port = 13307
- mysqldを起動し、一般ユーザーを作成し、権限/パスワードの調整を行う。
# service mysqld start
# mysql -u root mysql
#=== 一般ユーザー作成
mysql> grant all privileges on *.* to 'ユーザー名'@'localhost' identified by 'パスワード';
#=== なぜかデフォで存在する名前のないユーザーの削除
mysql> delete from user where user = '';
#=== 127.0.0.1/localhost/自サーバーホスト、その他外部から接続させる場合、それ以外の設定がないことを確認する。
mysql> select * from user;
#=== パスワードのないすべてのユーザーで実行
mysql> SET PASSWORD FOR root@localhost = PASSWORD('パスワード');
#=== 権限のFLUSH
mysql> flush privileges;
- mysqldの自動起動をonにする。
# chkconfig mysqld on
PHP関連
ここではとりあえずセキュリティ関連の設定と、APCのインストールのみを行う。
# cp -p /etc/php.ini /etc/php.ini.bk.20110411 # vi /etc/php.ini mbstring.language = Japanese mbstring.internal_encoding = UTF-8 open_basedir = /var/www # スクリプトにセキュリティホールがある場合に余計なファイルを更新させない expose_php = Off display_errors = Off magic_quotes_gpc = Off file_uploads = Off # ファイルアップロードが不要な場合のみ
# yum install pcre-devel # pecl install APC # vi /etc/php.ini extension=apc.so
httpd 関連
ここもセキュリティ関連に絞って記述する。
- httpd.confをいくつか編集する。
# vi /etc/httpd/conf/httpd.conf
#=== HTTPヘッダには必要最低限の情報のみ
ServerTokens Prod
ServerSignature Off
#=== /var/www/icons 以下のアクセスを拒否
<Directory "/var/www/icons">
Options MultiViews
AllowOverride None
# Order allow,deny
# Allow from all
Order deny,allow
Deny from all
</Directory>
#=== 実装の関係でいろいろ不都合なので、デフォルトのヘッダをコメントアウト
#=== AddDefaultCharset UTF-8
#=== ネームベースのVirtualHostを利用する
NameVirtualHost *:80
- VirtualHostの設定を conf.d以下にドメインごとに作成
# vi /etc/httpd/conf.d/XXXX.XXXX.jp.conf
<VirtualHost *:80>
ServerName XXXX.XXXX.jp
DocumentRoot "/var/www/XXXX.XXXX.jp"
AddDefaultCharset Off
CustomLog "|exec /usr/sbin/rotatelogs /var/log/httpd/XXXX.XXXX.jp.access_log.%Y%m%d 86400 540" combined
ErrorLog "|exec /usr/sbin/rotatelogs /var/log/httpd/XXXX.XXXX.jp.error_log.%Y%m%d 86400 540"
<Directory /var/www/XXXX.XXXX.jp>
AllowOverride All
Options -Indexes
</Directory>
<Directory ~ "\.svn">
Order allow,deny
deny from all
</Directory>
</VirtualHost>
mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.nouse.YYYYMMDD
service httpd start chkconfig httpd on
ここまでやったら
後は使いながら適宜、必要に応じて設定を変えたりする。
- 73 http://pipes.yahoo.com/pipes/pipe.info?_id=tDfBdGWF3RGl9XNm1L3fcQ
- 14 http://anond.hatelabo.jp/20081220025833
- 12 http://search.yahoo.co.jp/search?p=バナナ 放射&search.x=1&fr=top_ga1_sa&tid=top_ga1_sa&ei=UTF-8&aq=&oq=
- 10 http://life.co-hey.com/2010/09/mysql複合indexの威力/
- 9 http://www.google.co.jp/search?q=バナナ 放射性カリウム&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&hl=ja&client=firefox-a
- 9 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4GGHP_jaJP423JP423&q=ヨウ素131比重
- 7 http://pipes.yahoo.com/pipes/pipe.info?_id=6ffca3d513899ee44c0d1201c766e92c
- 6 http://www.google.co.jp/search?hl=ja&client=firefox-a&hs=Egt&rlz=1R1RNFA_ja___JP374&q=mixiアプリ プロフィール情報&aq=f&aqi=&aql=&oq=
- 4 http://docomo.ne.jp/cp/as-rslt.cgi?pno=1&key=バナナ+放射能&sid=B01
- 4 http://search.yahoo.co.jp/search?p=バナナ+放射性&search.x=1&fr=top_ga1_sa&tid=top_ga1_sa&ei=UTF-8&aq=&oq=