お名前.comのVPSを借りた & 色々サーバ設定を行った vol.01
サーバ設定のお勉強がてらお名前.comのVPSを借りました。
お名前.comの設定についての情報って結構少ないのですね、引っかかるのはさくらのVPSの情報ばかり...。
今後VPSの設定を行う方のお役に立てればと思い、今行っていることを諸々メモしておきます。
長いので複数の記事に分けます。
というかまだ設定が終わっていないので途中までしか書けないのです...。
今回の環境
以下の作業はサーバ契約時のメールに記載されいてるので省略します。
次からやったことをつらつら書いていきます。
システムにインストールされているパッケージのアップデートを行う
SSH接続後、システムに予めインストールされているシステムのアップデートを行います。
# yum -y update
するとシステムにインストールされているパッケージが続々アップデートされていきます。
実行中は下記のような画面が流れます。
意外と時間がかかるので気長に待ちましょう。
oaded plugins: fastestmirror, security Determining fastest mirrors epel/metalink | 4.9 kB 00:00 * base: ftp.tsukuba.wide.ad.jp * epel: ftp.kddilabs.jp * extras: ftp.tsukuba.wide.ad.jp * updates: ftp.tsukuba.wide.ad.jp base | 3.7 kB 00:00 base/primary_db | 4.6 MB 00:00 ... 〜中略〜 ...
作業用ユーザを作成する
root権限で作業するのはセキュリティ上あまりよろしくないので、作業用のユーザを作成します。
後ほどrootになれるユーザを制限するためにwheelグループに所属させておきます。
# /usr/sbin/useradd -d /home/{作業用ユーザ名を指定} -s /bin/bash {作業用ユーザ名を指定} # passwd {任意のパスワードを設定} # usermod -G wheel
ユーザの公開鍵を登録する
作業用ユーザがリモートで入れるように公開鍵を登録します。
# su - {作業用ユーザ名} $ ssh-keygen -t rsa $ vi ~/.ssh/authorized_key
authorized_keyの編集画面が開きます。
ローカルで作成している公開鍵をコピペして保存します。
ローカルに公開鍵を作っていない方はこれを機に作っておくと良いかと思います。
$ chmod ~/.ssh/authorized_key
sshdの設定を変更する
セキュリティを高めるためにパスワードでの認証をやめ、公開認証鍵でのログインのみに変更します。
# vi /etc/ssh/sshd_config // 下記の項目を no にします PermitRootLogin no PasswordAuthentication no UserPAM no
設定が完了したら保存して終了します。
ここで試しにターミナルの別タブを開き、作業用ユーザでログインしてみます。
※この時、root権限でログインしているタブは閉じないで下さい。
$ ssh {作業用ユーザ名}@{サーバのIPアドレス}
無事にログイン出来るようでしたら今のところ順調に成功です。 この時点で
- リモートからのパスワード認証不可
- 公開鍵に対する秘密鍵を持ったクライアントからのログイン以外不可
となります。
作業用ユーザでsudo出来るように設定を変更する
root権限でログインできなくなっていますので、作業用ユーザでsudo出来るように設定を変更します。
# visudo
sudoの設定ファイルを開きます。
設定ファイルを以下のように変更します。
## Allows people in group wheel to run all commands # %wheel ALL=(ALL) ALL // コピペしてコメントを外す %wheel ALL=(ALL) ALL
ファイアウォールを設定する
さらにセキュリティを高めるために、使用しないポートは閉じておきます。
ポートの設定は iptables を編集します。
# 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 # SSH, HTTP, FTP1, FTP2, MySQL -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -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
ざっくり言うと SSH(22)、HTML(80)、FTP(20/21)、MySQL(3306)のみ許可しました。
2015/04/08追記
※例としてデフォルトのポート番号を書いています。 実際に使用する際はポート番号を変えておくとセキュリティ上安心です。
※SCPが使用できるのでFTPは必要ないとのご指摘を頂きました。設定から削除いたしました。
2015/04/09追記
※MySQLのポートも外部からのアクセスは必要ないのなら閉じておいても良いという指摘をいただき、MySQLのポート設定部分を削除しました
他の詳しい説明は下記のページを御覧ください。
入力が完了したら保存して終了します。
設定を反映するためにiptablesを再起動します。
/etc/rc.d/init.d/iptables restart
次のような文言が表示されれば再起動完了です。
iptables: Setting chains to policy ACCEPT: filter [ OK ] iptables: Flushing firewall rules: [ OK ] iptables: Unloading modules: [ OK ] iptables: Applying firewall rules: [ OK ]
設定が反映されているか確認します。
# iptables -L
指定したポートがACCEPTになっていれば完了です。
今日はここまで行いました。
いろんな記事を行ったり来たりしながらの設定は大変ですね...。
次はApache, PHP, MySQLの設定を行う予定です。