CentOS でサーバを設定するときの色々
自分用のサーバ設定備忘録。
基本的にほとんど全部のコマンドが、sudoかrootでの作業。なので、そんな感じで省略してます。
基本的に自分を信用しないので、細かく確認入れています。
メールサーバーについては、適当に書いているから後で設定見直し。
リポジトリの追加
Webサーバ、PHP、DBサーバのインストール
MySQL 5.6のインストール
yum install mysql56 mysql56-server mysql56-devel mysql56-common
Apache 2.4のインストール
yum install httpd24 mod24_ssl
PHP 5.6のインストール
yum install php56 php56-devel php56-common php56-cli php56-pdo php56-mbstring php56-gd php56-mysqlnd php-pear php56-soap php56-xml php56-xmlrpc php56-mcrypt php56-opcache php56-pecl-apcu
Webサーバ、PHP、DBサーバの起動設定
CentOS 6
起動はstart、再起動はrestart、終了はstop
service httpd start service mysqld start
自動起動設定を有効はon、無効はoff
chkconfig httpd on chkconfig mysqld on
自動起動確認
chkconfig --list httpd chkconfig --list mysqld
CentOS 7
起動はstart、再起動はrestart、終了はstop
systemctl start httpd systemctl start mysqld
自動起動を有効はenable、無効はdisable
systemctl enable httpd systemctl enable mysqld
自動起動確認
systemctl is-enabled httpd systemctl is-enabled mysqld
Apache
apachectlを使用すると、色々出来る。
apachectl start # 起動 apachectl stop # 終了 apachectl restart # 再起動 apachectl graceful # 再起動だがクライアントからの接続を継続しながらの再起動が必要な場合に使用
service httpd graceful # OK systemctl graceful httpd # NG
serviceからの呼び出しでも、gracefulは使用することが可能。systemctlからの利用は不可能。
各種設定の変更
apacheに読み込まれているモジュールの確認を行う。
apachectl -M
使用したいモジュールが無い場合には、インストールや読み込みを有効化する。
読み込みを有効化する場合には、 /etc/httpd/conf.modules.d/ 配下の 00-base.conf に記載されているので、コメントアウトを外す。
それ以外の場合には、別のコンフィグファイルの中から探して有効化する。
見つからない場合には、追記して有効化する。
/etc/httpd/conf/httpd.conf
Apacheのセキュリティレベルを少しでも上げるためhttpd.confに追記
ServerTokens Prod ServerSignature Off
バーチャルホスト用のディレクトリなどを作成しておく
ログディレクトリをシンボリックリンクでは無く、マウントを使用しているのは、FTPなどでアクセスし内容の確認を簡単に出来るようにするため
mkdir /var/www/example.com mkdir /var/www/example.com/www mkdir /var/www/example.com/www/htdoccs mkdir /var/www/example.com/www/logs mkdir /var/logs/httpd/example.com/www chown -R apache:apache /var/www/example.com chmod -R 775 /var/www/example mount -bind /var/logs/httpd/example.com/www /var/www/example/www/logs
/etc/httpd/conf/vhost.conf
バーチャルホスト用のコンフィグファイルを作成して、バーチャルホスト用の設定を記載
<VirtualHost *:80> ServerName www.example.com ServerAlias example.com DocumentRoot /var/www/example.com/www/htdocs CustomLog logs/example.com/www/access_log common ErrorLog logs/example.com/www/error_log <Directory "/var/www/example.com/www/htdocs"> AllowOverride All Options +FollowSymLinks -Indexes </Directory> </VirtualHost>
SSLを使用するために、秘密鍵の作成を行う。
openssl genrsa -des3 -out <秘密鍵ファイル> 2048 -sha256
パスフレーズの入力が面倒なので、複合化したファイルを作成する。
openssl rsa -in <秘密鍵ファイル> -out <複合化秘密鍵ファイル>
CSRファイルの作成。
openssl req -new -key <複合化秘密鍵ファイル> -out <CSRファイル>
認証局から証明書が発行されたら、任意の場所へ証明書と中間証明書などをアップロードする。
秘密鍵、CSRファイル、証明書のセットが正しいかどうかは、下記のコマンドの内容が一致するかで確認出来る。
openssl x509 -noout -modulus -in <SSL証明書ファイル> | openssl md5 openssl rsa -noout -modulus -in <秘密鍵ファイル> | openssl md5 openssl req -noout -modulus -in <CSRファイル> | openssl md5
Let’s Encryptでの取得
お手軽に取得出来るからLet’s EncryptでOKとしたい。
手順は後で書く。
Let’s Encrypt サーバー証明書の取得と自動更新設定メモ | あぱーブログ
コマンド解説 – Let’s Encrypt 総合ポータル
https://letsencrypt.jp/command/AWS EC2 で Let’s Encrypt – Qiita
http://qiita.com/mya106/items/2e2e1c2334175891251fLet’s Encrypt SSL証明書を自動更新する方法 AWS Nginx編 – やーまんぶろぐ
Amazon Linux 上の Let’s Encrypt で証明書更新エラーが出た時の対処方法
https://blog.yskw.info/articles/326/
yum install git # gitが必要なので、インストールされていなければインストール cd /usr/local/ git clone https://github.com/certbot/certbot cd certbot/ ./certbot-auto --debug # AWSの場合にはdebugオプションが必要
コマンド入力後
メールアドレスの入力
ドメインの指定などが最初にできる
その後
/etc/letsencrypt/live/(FQDN)/fullchain.pem
/etc/letsencrypt/live/(FQDN)/privkey.pem
に秘密鍵や証明書ができるので、それをconfに記載
/etc/httpd/conf/ssl.conf
最近はSNI SSLで問題無いため、各VirtualDomainでSSLを使用できるように設定。
Listen 443 https SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog SSLSessionCache shmcb:/run/httpd/sslcache(512000) SSLSessionCacheTimeout 300 SSLRandomSeed startup file:/dev/urandom 256 SSLRandomSeed connect builtin SSLCryptoDevice builtin SSLStrictSNIVHostCheck off <VirtualHost *:443> ServerName www.example.com ServerAlias example.com DocumentRoot /var/www/example.com/www/htdocs CustomLog logs/example.com/www/access_log common ErrorLog logs/example.com/www/error_log <Directory "/var/www/example.com/www/htdocs"> Options +FollowSymLinks -Indexes AllowOverride All </Directory> SSLEngine on SSLProtocol -ALL +TLSv1.2 SSLHonorCipherOrder ON SSLCipherSuite EECDH+HIGH:EDH+HIGH:HIGH:MEDIUM:+3DES:!ADH:!RC4:!MD5:!aNULL:!eNULL:!SSLv3:!SSLv2:!LOW:!EXP:!PSK:!SRP:!DSS:!KRB5 SSLCertificateFile /etc/pki/tls/example.com/www/<証明書ファイル> SSLCertificateKeyFile /etc/pki/tls/example.com/www/<複合化秘密鍵ファイル> SSLCertificateChainFile /etc/pki/tls/example.com/www/<中間証明書ファイル> </VirtualHost>
/etc/httpd/conf/deflate.conf
GZIP圧縮転送を有効化するために、deflate.confを作成しに設定を記載
<IfModule deflate_module> DeflateCompressionLevel 1 <IfModule filter_module> FilterDeclare Compression CONTENT_SET FilterProvider Compression DEFLATE "%{CONTENT_TYPE} = 'text/html'" FilterProvider Compression DEFLATE "%{CONTENT_TYPE} = 'text/plain'" FilterProvider Compression DEFLATE "%{CONTENT_TYPE} = 'text/css'" FilterProvider Compression DEFLATE "%{CONTENT_TYPE} = 'text/javascript'" FilterProvider Compression DEFLATE "%{CONTENT_TYPE} = 'text/xml'" FilterProvider Compression DEFLATE "%{CONTENT_TYPE} = 'application/xhtml'" FilterProvider Compression DEFLATE "%{CONTENT_TYPE} = 'application/xml'" FilterProvider Compression DEFLATE "%{CONTENT_TYPE} = 'application/xhtml+xml'" FilterProvider Compression DEFLATE "%{CONTENT_TYPE} = 'application/rss+xml'" FilterProvider Compression DEFLATE "%{CONTENT_TYPE} = 'application/atom+xml'" FilterProvider Compression DEFLATE "%{CONTENT_TYPE} = 'application/javascript'" FilterProvider Compression DEFLATE "%{CONTENT_TYPE} = 'application/vnd.ms-fontobject'" FilterProvider Compression DEFLATE "%{CONTENT_TYPE} = 'image/svg-xml'" FilterProvider Compression DEFLATE "%{CONTENT_TYPE} = 'image/vnd.microsoft.icon'" FilterProvider Compression DEFLATE "%{CONTENT_TYPE} = 'font/opentype'" FilterProvider Compression DEFLATE "%{CONTENT_TYPE} = 'font/otf'" FilterProvider Compression DEFLATE "%{CONTENT_TYPE} = 'font/ttf'" FilterProvider Compression DEFLATE "%{CONTENT_TYPE} = 'font/truetype'" FilterProvider Compression DEFLATE "%{CONTENT_TYPE} = 'application/x-font-ttf'" FilterProvider Compression DEFLATE "%{CONTENT_TYPE} = 'application/x-font-truetype'" FilterProvider Compression DEFLATE "%{CONTENT_TYPE} = 'application/octet-stream'" FilterProvider Compression DEFLATE "%{CONTENT_TYPE} = 'application/x-font-woff'" FilterProvider Compression DEFLATE "%{CONTENT_TYPE} = 'application/x-woff'" FilterProvider Compression DEFLATE "%{CONTENT_TYPE} = 'application/x-font-woff'" FilterProvider Compression DEFLATE "%{CONTENT_TYPE} = 'image/svg+xml'" FilterProvider Compression DEFLATE "%{CONTENT_TYPE} = 'application/x-font-woff'" FilterChain Compression Header append Vary Accept-Encoding env=!dont-vary </IfModule> </IfModule>
正しく圧縮、素早く送信、mod_deflateの設定方法 | 純規の暇人趣味ブログ
http://jyn.jp/apache-setting-deflate/
/etc/httpd/conf/php.ini
PHPでのGZIP圧縮を許可する。圧縮レベルはhttpd.confの設定を引き継がせるため、-1をセット。
zlib.output_compression = On zlib.output_compression_level = -1
PHPのバージョンをマスクしておくために設定を変更
expose_php = Off
Apacheのconfファイルのチェック
apachectl configtest
MySQLのパスワードなどセキュリティの設定(MySQL起動後に実行)
mysql_secure_installation
【MySQL, 開発環境】MySQLのインストールと初期設定 – Qiita
http://qiita.com/knife0125/items/3d685f1368a654d5187d
ユーザのグループの追加
ユーザが所属するグループを追加。こっちの方が色々良い。
gpasswd -a user group
以下だと、記述したグループしか追加されないから、間違えて他のグループ名を全部飛ばすので注意。
と言うか飛ばしたから、使わないようにする。
usermod -G group1,group2 user
ちなみに設定がちゃんと変更出来たかも確認。
まず、自ユーザーの情報確認
id
グループの各情報を確認
cat /etc/group
ユーザーパーミッション類の調整
ApacheやNginx、PHP-PFMなどがファイルを作成する際などで、ファイルのパーミッションをグループ許可を与えておくことで、作業ユーザがそれぞれのグループに所属していれば、ユーザ権限でファイルを読み書き、削除出来ることで非常に楽できるので、設定しておく。
PHP-PFMの場合には、ユーザーがPHP-PFM側を設定しておかなければいけないので注意。
CentOS 6
echo "umask 002" >> /etc/sysconfig/httpd
CentOS 7
.include /lib/systemd/system/httpd.service [Service] UMask=002
アクセスの制御
CentOS 7を最小構成でインストールした場合でも、firewalldが有効でpublicという設定で起動している。
そのため、普通にHTTPが通過できないので、その設定を追加する。
CentOS 7
firewall-cmd --list-all firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --permanent --add-port={sshを移動させたポート番号とか}/tcp firewall-cmd --reload
メールサーバの設定
SSLの設定で、メールを受信する必要があるのと、一部サーバーからメールを送る必要があるので、PostfixとDovecotをインストールする。
yum install postfix
/etc/postfix/main.cf
myhostname = mail.example.com mydomain = example.com myorigin = $mydomain mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain inet_interfaces = all mynetworks = 10.0.0.0/16, 127.0.0.0/8 (使用しているネットワークによって変更) home_mailbox = Maildir/ smtpd_sasl_auth_enable = yes smtpd_sasl_local_domain = $myhostname smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination
saslauthdの起動
service saslauthd start chkconfig saslauthd on
postfixの起動
alternatives --config mat service sendmail stop chkconfig sendmail off yum remove sendmail service postfix start chkconfig postfix on
メール受信ユーザーの作成 (SSL確認用にadminというユーザーを作成)
adduser admin passwd admin su - admin mkdir /home/admin/Maildir exit
yum install dovecot
/etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:~/Maildir auth_mechanisms = plain login
Divecotの起動
service dovecot start chkconfig dovecot on
yum-cronの設定
yumの自動更新の設定をしておき、パッチ漏れを防ぐ
yum install yum-cron
/etc/yum/yum-cron.conf
自動更新をON
apply_updates = no
セキュリティアップデートのみを行う場合
update_cmd = security
yum-cronの起動
service yum-cron start chkconfig yum-cron on
systemctl start yum-cron systemctl enable yum-cron
この投稿へのトラックバック
トラックバックはありません。
- トラックバック URL
この投稿へのコメント