vpsでサーバー構築するときに必ずやってる設定などまとめ
前にも同じようなこと書いた気がしますが、時間が経つとちょっとずつやってる内容が変わってくるのでメモしておきます。
ちなみにさくらのvpsです
sshの設定
なにはともあれまずはsshの設定をします。
パスワードでのログインを許容しておくとプログラムで総当たりでやられるとあっさりログインされてしまう可能性があるので基本的に禁止するのが良いと思います。
また、知らない人にrootでログインされるのはさらにまずいので自分も含めてログインできないようにするのが良いと思います。
必要な場合は、一般ユーザでログインしてから都度、sudoなりsuでrootユーザにログインしてから作業するのが良いと思います。
作業ユーザーの作成
> useradd username > passwd username > パスワードの入力
sudo許可
visudo(以下の行の#コメントを外す)
# %wheel ALL=(ALL) ALL %wheel ALL=(ALL) ALL
// wheelグループに追加 usermod -G wheel username // 確認 groups username
鍵認証設定
サーバでの作業
※下で作る(PCで)公開鍵の転送先のディレクトリの作成
> mkdir ~/.ssh > chmod 700 ~/.ssh
PCでの作業
// 鍵を作成 > ssh-keygen -t rsa -f ~/.ssh/id_rsa_*** > chmod 600 ~/.ssh/id_rsa_***.pub // 公開鍵をサーバへ転送 > scp ~/.ssh/id_rsa_***.pub username@hostname:~/.ssh/authorized_keys // 作成・設定した鍵でログインできることを確認する(PC) > ssh -i ~/.ssh/id_rsa_*** username@hostname
パスワードでのログイン禁止と外部からrootでのログイン禁止
> vi /etc/ssh/sshd_config # 以下を設定する PermitRootLogin no PasswordAuthentication no # 特定のIPでのみ許可したい場合は、以下を設定 # Match Address www.xxx.yyy.zzz # PermitRootLogin yes # PasswordAuthentication yes
文字コード設定
> vi /etc/sysconfig/i18n LANG="ja_JP.UTF-8" source /etc/sysconfig/i18n # 変更を反映
apacheの設定
インストール
# インストール > yum install httpd # os起動時にapacheも起動するように設定 > chkconfig httpd on
httpd.confの基本設定
> vi /etc/httpd/conf/httpd.conf #ServerTokens OS //これだとサーバ情報やapacheのモジュール情報等もhttpレスポンスヘッダ返すのでセキュリティ的によくない ServerTokens Prod // 最低限の情報だけレスポンスヘッダでかえす設定 #ServerSignature On // NotFoundページなどを表示する際にサーバの情報も表示してしまうのでセキュリティ上よくない ServerSignature Off #Options Indexes FollowSymLinks // ディレクトリにアクセスした際にファイルの一覧を表示してしまうのでセキュリティ上よくない Options -Indexes FollowSymLinks
apache起動
> service httpd configtest Syntax OK > service httpd start Starting httpd: [OK]
ドキュメントルートのディレクトリの所有者を作業ユーザに変更する
chown -R user:group /var/www/html
バーチャルドメインの設定
僕の場合に1サーバー1ドメインということがあまりなくて、たいてい複数ドメインを共存させることが多いので以下の形で設定しています。
vhosts以下にドメインごとの設定ファイルを用意する形です。
また、アクセスログの出力に処理時間も追記してチューニングしやすくすることも毎回しています。
> vi /etc/httpd/conf/httpd.conf # デフォルトのアクセスログとエラーログの出力設定をOFFに # CustomLog logs/access_log combined ・・・ # ErrorLog logs/error_log # vhost読み込み ★追加 Include conf/vhost/*.conf # アクセスログの書式にに処理時間を追加したものを準備 ★追加 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %T %D" custom
# ドメインごとにアクセスログの出力先ディレクトリを変える > mkdir /var/logs/example.com > mkdir /etc/httpd/conf/vhost > vi /etc/httpd/conf/vhost/example.conf <VirtualHost *:80> ServerName example.com DocumentRoot "/var/www/html/example.com # ログ出力とローテーション設定 CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/example.com/access_log.%Y%m%d 86400 540" custom ErrorLog "|/usr/sbin/rotatelogs /var/log/httpd/example.com/error_log.%Y%m%d 86400 540" </VirtualHost>
ログの圧縮
crontab -e
# httpdログ圧縮 0 5 * * * find /var/log/httpd -type f ! -name "*`date +%Y%m%d`*" ! -name "*.gz" -exec gzip {} \; # httpdログ削除 0 5 * * * find /var/log/httpd -name "*.gz" -mtime +30 -exec rm {} \;
phpの設定
php5.6のインストール
sudo rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm yum install -y --enablerepo=remi --enablerepo=remi-php56 php php-opcache php-devel php-mbstring php-mcrypt php-mysqlnd php-phpunit-PHPUnit php-pecl-xdebug php-pecl-xhprof
設定
vi /etc/php.ini ;expose_php On expose_php Off ;date.timezone = date.timezone = Asia/Tokyo ;mbstring.language = Japanese mbstring.language = Japanese ;mbstring.internal_encoding = EUC-JP mbstring.internal_encoding = UTF-8 ;mbstring.http_input = auto mbstring.http_input = auto
mysqlの設定
mysql5.6のインストール
yum install -y http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm yum install -y mysql-community-server mysql_install_db --datadir=/var/lib/mysql --user=mysql service mysqld start chkconfig mysqld on mysql_secure_installation
一般ユーザ作成
grant all on *.* to username@localhost identified by '********';
iptablesの設定
外部からの接続は全て拒否して、その後は都度必要なポートを開けていく形になるかと思います。
自分の場合はsshとhttpが主になります。
立ち上げ直後のiptablesを設定する。 - Qiita
※こちらのまんまです
vi /etc/sysconfig/iptables *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -p tcp --dport 80 -j ACCEPT COMMIT
メールサーバの設定
僕の場合は大抵、メールは構築したWebサービスのドメインでのメール送受信ができればokで、ちょっと長いので以下にまとめました
【postfix】独自ドメインでメール送受信する手順メモ〜バーチャルドメインで複数ドメイン扱う - とりあえずphpとか
また、iptablesも許可しておきます
vi /etc/sysconfig/iptables
# postfix -A INPUT -p tcp --dport 25 -j ACCEPT
ずらずら書いてみたけどこれくらいだろうか
・SMTP-AUTH(メーラーで独自ドメインのメール送信する場合)
・SSL対応
あと、サービスによっては上記も必要になるかもしれないのであとで追記できれば
以上です