個人開発環境を久々整えました。
折角なのでログを残します。
構築する環境
- sakura vps
- Cent OS 6.9
- PHP 5.6
- Logwatch&DenyHostsでの監視設定
起動して、初回のログイン
管理画面から起動。
起動したら、Terminalからsshでログイン。
ssh root@000.000.000.000
!もしログイン出来ない場合
過去に、起動直後にログインできない場合があった。
port 22: Connection refused
ブラウザ管理画面からもコンソールを立ち上げてみたが、固まっている。
Updating RPMS on system:
これはRPMの更新をかけているとのこと。少しこのまま待ってみると、入れるはず。
仮パスワードの変更と、開発用ユーザの作成
メールで送られてきた仮のパスワードは変更して、開発用のユーザーを追加。
パスワード変更
# passwd# Changing password for user root.# New password:# Retype new password:# passwd: all authentication tokens updated successfully.
成功したら、別タブを立ち上げてログインチェック。
# ssh root@000.000.000.000# root@000.000.000.000's password:
OK!
開発用ユーザ追加
# useradd your_user_name# passwd your_user_nameNew password:Retype new password:passwd: all authentication tokens updated successfully.
成功したら、別タブを立ち上げでログインしてみる。
# ssh your_user_name@000.000.000.000your_user_name@000.000.000.000's password:
OK!
sudoの設定
追加したユーザーにroot権限を与える。
まずはyour_user_nameをwheelグループに追加する。
# usermod -G wheel your_user_name
sudo設定ファイルを編集する。
# visudo
%wheel ALL=(ALL) ALL ~ のコメントを外し、wheelグループのユーザに実行権限を付与。
## Allows people in group wheel to run all commands%wheel ALL=(ALL) ALL
保存したら別タブを立ち上げ、先程作ったユーザでログイン。
適当なコマンドを実行してみて、OKだったら成功。
# ssh your_user_name@000.000.000.000# your_user_name@000.000.000.000's password:# sudo hogehoge
SSH接続設定
パスワード覚えたくないので、鍵認証でのみログイン可能にする。
クライアントで鍵を作成する。
クライアントPCで公開鍵設置用のディレクトリ作成
# mkdir ~/.ssh# chomd 700 ~/.ssh# cd ~/.ssh
鍵の作成
# ssh-keygen -t rsa -v
ここで秘密鍵のファイル名を入力。デフォルトはid_rsa。
パスフレーズも聞かれるのでメモしておく。
Enter file in which to save the key (/Users/yourpath/.ssh/id_rsa):Enter passphrase (empty for no passphrase):
これで生成される。
Your identification has been saved in /Users/yourpath/.ssh/id_rsa.Your public key has been saved in /Users/yourpath/.ssh/id_rsa.pub.
権限の変更をしておく。
# chmod 600 id_rsa.pub
scpで鍵をサーバへ転送する。
サーバ側でも.sshディレクトリを作成。
# mkdir ~/.ssh# chomd 700 ~/.ssh
鍵を転送。
scp ~/.ssh/id_rsa.pub new_user_name@000.000.000.000:~/.ssh/authorized_keys
成功したら、ログインしてみる。ファイル名を変えた場合は-iオプションでクライアントの鍵を指定。
ssh username@000.00.000.000 -i /path/to/your/.ssh/id_rsa_hogehoge
鍵のセキュリティ強化
ポートの変更と、鍵認証のみでのログインとすることでセキュリティを高める。
それにルートのログインを不可にする。
ここからsuで。
# su
sshd_conf 編集
ssh設定ファイルの編集。バックアップをとってから
# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.org# vim /etc/ssh/sshd_config
Portをデフォルトから変更
# Port 22↓Port xxxx
パスワードログインを禁止
# PasswordAuthentication yes↓PasswordAuthentication no
ルートログインの禁止
# PermitRootLogin yes↓PermitRootLogin no
構文エラーが無いかテスト
/usr/sbin/sshd -t
何も表示されなければOK。
接続テスト
テストの前に、iptableを無効化。
sakuraVPSではデフォルトで有効化されているため、ポートを変更するとログインできなくなる恐れがあるため。
# service iptables stopiptables: Setting chains to policy ACCEPT: filter [ OK ]iptables: Flushing firewall rules: [ OK ]iptables: Unloading modules: [ OK ]
停止したら、再起動
service sshd restart
それぞれ別タブでテストしてみる。
鍵認証+ポート
# ssh username@000.00.000.000 -i /path/to/your/.ssh/id_rsa_hogehoge# これはログインできない# ssh -p 2222 username@000.00.000.000 -i /path/to/your/.ssh/id_rsa_hogehoge# ポート指定することでログイン可
ルートログインテスト
# ssh root@000.00.000.000 -i /path/to/your/.ssh/id_rsa_hogehoge# 弾かれればOK
パスワードログインテスト
# ssh -p 2222 username@000.00.000.000 PreferredAuthentications=password# 弾かれればおK
システムアップデート
yumアップデート
コマンド一発。
# yum update
日本語化
文字化けとWarning消したいので、日本語化しておく。
# vim /etc/sysconfig/i18n
以下のように編集。
LANG=ja_JP.utf8LC_CTYPE=ja_JP.utf8
LC_CTYPE==~の記述は、以下の警告を避けるため。
warning: setlocale: LC_CTYPE: cannot change locale (UTF-8):
再起動で、反映。
service sshd restart
ファイアウォール設定
先程オフったiptablesをオンにする。
※もしインストールされてなければ、インストール。
# yum install iptables
設定の確認
# iptables -L
設定ファイルを見る
# cat /etc/sysconfig/iptables
編集
vim /etc/sysconfig/iptables
# (1) ポリシーの設定 OUTPUTのみACCEPTにする*filter:INPUT DROP [0:0]:FORWARD DROP [0:0]:OUTPUT ACCEPT [0:0]# (2) ループバック(自分自身からの通信)を許可する-A INPUT -i lo -j ACCEPT# (3) データを持たないパケットの接続を破棄する-A INPUT -p tcp --tcp-flags ALL NONE -j DROP# (4) SYNflood攻撃と思われる接続を破棄する-A INPUT -p tcp ! --syn -m state --state NEW -j DROP# (5) ステルススキャンと思われる接続を破棄する-A INPUT -p tcp --tcp-flags ALL ALL -j DROP# (6) icmp(ping)の設定# hashlimitを使う# -m hashlimit hashlimitモジュールを使用する# —hashlimit-name t_icmp 記録するファイル名# —hashlimit 1/m リミット時には1分間に1パケットを上限とする# —hashlimit-burst 10 規定時間内に10パケット受信すればリミットを有効にする# —hashlimit-mode srcip ソースIPを元にアクセスを制限する# —hashlimit-htable-expire 120000 リミットの有効期間。単位はms-A INPUT -p icmp --icmp-type echo-request -m hashlimit --hashlimit-name t_icmp --hashlimit 1/m --hashlimit-burst 10 --hashlimit-mode srcip --hashlimit-htable-expire 120000 -j ACCEPT# (7) 確立済みの通信は、ポート番号に関係なく許可する-A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT# (8) 任意へのDNSアクセスの戻りパケットを受け付ける-A INPUT -p udp --sport 53 -j ACCEPT# (9) SSHを許可する設定# hashlimitを使う# -m hashlimit hashlimitモジュールを使用する# —hashlimit-name t_sshd 記録するファイル名# —hashlimit 1/m リミット時には1分間に1パケットを上限とする# —hashlimit-burst 10 規定時間内に10パケット受信すればリミットを有効にする# —hashlimit-mode srcip ソースIPを元にアクセスを制限する# —hashlimit-htable-expire 120000 リミットの有効期間。単位はms-A INPUT -p tcp -m state --syn --state NEW --dport 22 -m hashlimit --hashlimit-name t_sshd --hashlimit 1/m --hashlimit-burst 10 --hashlimit-mode srcip --hashlimit-htable-expire 120000 -j ACCEPT# (10) 個別に許可するプロトコルとポートをここに書き込む。# この例では、HTTP(TCP 80)とHTTPS(TCP 443)を許可している。-A INPUT -p tcp --dport 80 -j ACCEPT-A INPUT -p tcp --dport 443 -j ACCEPTCOMMIT
参考:https://knowledge.sakura.ad.jp/4048/
tptables更新
設定を更新する。
# service iptables restart
ちなみにiptablesの編集直後にrestartしなければ、以前の設定に戻ってしまうので注意。
MEMO 開放ポート番号の例
HTTP 80
HTTP(SSL) 443
SMTP 25
SMTP(SSL) 465
POP3 110
POP3(SSL) 995
IMAP 143
IMAP(SSL) 993
再度設定の確認
# iptables -L
ログインポートの確認
ポートでログインできれば、ok!
# ssh -p xxxxx username@000.00.000.000 -i /path/to/your/.ssh/id_rsa
WEBサーバ設定
httpdサーバインストール。
# yum install httpd
再起動時の自動設定
# chkconfig httpd on
confファイル編集
# vim /etc/httpd/conf/httpd.conf
編集内容
ServerTokens OS↓ServerTokens ProdServerSignature ON↓ServerSignature Off# Options Indexes FollowSymLinks↓Options -Indexes FollowSymLinks# NameVirtualHost *:80↓NameVirtualHost *:80
構文チェックと、起動
# service httpd configtest# service httpd start
これでブラウザからIPでアクセス可能になる。
Virtual Host設定
ディレクトリ作成
予めDNSのポインティングを行った上で、
サーバ側にドメイン用ディレクトリを作成。
# mkdir -p /var/www/yourdomain/public_html/# chown -R new_user_name:new_user_name /var/www/yourdomain/public_html/
httpd.conf 編集
バーチャルホスト未定義でのアクセス拒否
# vim /etc/httpd/conf/httpd.conf
confファイル作成
/etc/httpd/conf.d 配下に設定ファイルを作成。
この階層においた.confは、起動時に読み込まれる。
# vim /etc/httpd/conf.d/yourdomain.conf
内容
<VirtualHost *:80>ServerName yourdomain.comDocumentRoot "/var/www/yourdomain/public_html"DirectoryIndex index.html index.phpErrorLog /var/log/httpd/yourdomain.com_error_logCustomLog /var/log/httpd/yourdomain.com_access_log combinedAddDefaultCharset UTF-8</VirtualHost>
IPでのアクセスの制御
IPや、バーチャルホスト未定義ホストからのアクセスの制御。
仮に誰かのドメインが自分のIPを指したら、そこからアクセスされてしまうこともあるため。
方法は2つある。
どちらも、httpd.confを書き換える。
挿入場所は他のVirtudal Host設定ファイルを読み込む前、つまり
Include conf.d/*.conf
よりも前。
1.特定のURLへリダイレクトさせる
<VirtualHost *:80>ServerName anyRedirect / http://hogehoge.com/</VirtualHost>
2.アクセス禁止にする
<VirtualHost *:80>ServerName any<Location />Order Deny,AllowDeny from all</Location></VirtualHost>
デフォルトのテストページの編集も可能。
# vim /error/noindex.html
又は、無効にする
<LocationMatch "^/+$"># Options -Indexes# ErrorDocument 403 /error/noindex.html</LocationMatch>
再起動して反映完了。
service httpd restart
PHP インストール
下準備
# yum --enablerepo=epel install libmcrypt
リポジトリ追加
# yum install epel-release# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
もし古いPHPがあれば消す
※消さなくても良いみたいだけど
yum remove php-*
7.1をインストール。
# yum install --enablerepo=remi,remi-php71 php php-devel php-mbstring php-pdo php-gd php-xml php-mcrypt
php.iniの編集
# cp /etc/php.ini /etc/php.ini.ori# vim /etc/php.ini
設定内容
# レスポンスヘッダにPHPのバージョンを表示しないexpose_php = Off# 全てのログを出力error_reporting = E_ALL# ブラウザでエラーを表示しないdisplay_errors = Off# エラーをログに残すlog_errors = On# エラーログの長さを設定log_errors_max_len = 4096# エラーログ出力先error_log = "/var/log/php_errors.log"date.timezone = "Asia/Tokyo"mbstring.language = Japanesembstring.internal_encoding = UTF-8mbstring.http_input = UTF-8mbstring.http_output = passmbstring.encoding_translation = Onmbstring.detect_order = autombstring.substitute_charset = none
Composerインストール
curl -sS https://getcomposer.org/installer | php
パスを通す
mv composer.phar /usr/local/bin/composer
Mysql インストール
参考:http://qiita.com/tiwu_official/items/5ff3fa38611de058704a
既にあるかチェック
# rpm -qa | grep mysql
あったら消しておく
# sudo yum remove mysql*
インストール
# yum install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm# yum install mysql-client mysql-server
mysqlを起動
sudo /etc/init.d/mysqld start
ログイン
sudo mysql -uroot -p
PWはブランクでOK
パスワードの設定
mysql> set password = password('password');
自動起動設定
一旦exitして、自動起動設定を行う。
sudo chkconfig mysqld on
phpmyadmin インストール
一応入れておく。
必ずアタックをうけるため、
・IP制限
・URL変更
・SSL制限
を必須にしておく。
参考:
https://knowledge.sakura.ad.jp/9701/
https://qiita.com/inaka_phper/items/ea59b71dc5b3f155496d
インストール
# yum --enablerepo=remi,remi-php71 --disablerepo=epel install phpMyAdmin
自分のIPを追加し、アクセス可能にする
# vim /etc/httpd/conf.d/phpMyAdmin.con
バーチャルホストでアクセスさせるためには、以下を追加しておく。
<VirtualHost *:80>ServerName phpmyadmin.example.comDocumentRoot /usr/share/phpMyAdmin/ErrorLog logs/phpmyadmin-error_logCustomLog logs/phpmyadmin-access_log combined</VirtualHost>
ちなみにIPでアクセスする場合で、URLを変更する場合はこう。
※今回はIPでのアクセスを許可していない
Alias /phpMyAdminxxxxxxxxxxxxxx /usr/share/phpMyAdmin
再起動
apachectl restart
監視設定
logwatch と、denyhostsを入れる。
logwatch
http://landisk.kororo.jp/diary/29_logwatch.php
インストール
# yum install logwatch
確認
# /usr/sbin/logwatch --print
設定
# vim /etc/logwatch/conf/logwatch.conf
内容
# メール送信先MailTo = hoge@example.com#ログの詳細レベル。1~10の整数での指定も可(Low0 High10)Detail = Med
テスト送信
logwatch --service sshd
※VPSお試し期間中は送信が制限されるので届かない
denyhosts
http://www.server-memo.net/server-setting/ssh/ssh-denyhosts.html#i
インストール
# yum --enablerepo=epel install denyhosts
設定
# vim /etc/denyhosts.conf
内容
ADMIN_EMAIL = hoge@fuga.comanndPURGE_THRESHOLD = 2BLOCK_SERVICE = sshdDENY_THRESHOLD_INVALID = 5DENY_THRESHOLD_VALID = 5
denyhosts
# /etc/init.d/denyhosts start
自動起動
chkconfig denyhosts on