スタート地点
さくらVPSパワーオンしたところから。
この時点ではまだrootが作られただけの状態。
よってさくらVPSのコントロールパネルからリモートコンソールを開いて操作する。
まずやる設定
管理者ユーザの作成
tryerrorという管理者ユーザを作成。(ユーザー名は任意)
# useradd tryerror # passwd パスワード
rootになれるのは管理者ユーザだけにする
rootになることを許可するユーザにはwheelグループを割り当てる
# usermod -G wheel tryerror
wheelグループに属しているユーザのみrootになることを許可する為、/etc/pam.d/suを編集する
# vi /etc/pam.d/su #auth required pam_wheel.so use_uid ↓ auth required pam_wheel.so use_uid ← コメント解除
wheelに属しているユーザのみsudoを有効化する
# visudo ## Allows people in group wheel to run all commands %wheel ALL=(ALL) ALL
外部からのSSH接続は公開鍵認証のみに制限する
現時点ではさくらVPSのリモートコンソールを利用して操作しているが
外部からteraTerm(Windows)やTerminal(Mac)などで接続して操作できるようにしたい。
ただし管理者権限のあるユーザに不正ログインされてしまうとサーバ全機能を乗っ取られてしまう。
そこで通常のパスワード認証ではなく、より強固な公開鍵認証方式*1を採用する。
*1 ID・パスワードだけでなく、事前にサーバに登録した鍵ファイルも認証に利用する方式。
鍵ファイルがないとログインできなくなる為、外部からの不正アクセスへの耐性が高まる
まず、sshの設定ファイルで公開鍵認証だけを受け付けるように変更する。
# vi /etc/ssh/sshd_config #Protocol 2,1 ↓ Protocol 2 ← SSH2でのみ接続を許可 #SyslogFacility AUTH ↓ SyslogFacility AUTHPRIV ← ログを/var/log/secureに記録する※CentOSデフォルトに合わせる #PermitRootLogin yes ↓ PermitRootLogin no ← rootログインを禁止(管理者ユーザでログイン後、sudoを使う) #PasswordAuthentication yes ↓ PasswordAuthentication no ← パスワードログインを禁止(公開鍵方式によるログインのみ許可) #PermitEmptyPasswords no ↓ PermitEmptyPasswords no ← パスワードなしでのログインを禁止
変更した/etc/ssh/sshd_configの内容を反映する
# /etc/init.d/sshd reload
ssh接続ポートを変更する
sshの標準ポートは22。この22番ポートに対してブルートゥースでパスワード総当たりを
仕掛けてくることが多い。
そもそも22番ポートでないポートにしておくことで耐性が高まる。例として10022に変更。
そのかわりよくあるterminalツールも初期値が22番になっているので設定を変える必要があるけど。
# vi /etc/ssh/sshd_config #Port 22 ↓ Port 10022 # /etc/init.d/sshd reload
接続テスト
管理者ユーザに外部からsshで接続できるかテストする。
以下の手順が必要となる。
- クライアント側でssh鍵を作成する。(ツールを利用)
- 作成したssh鍵の中身をサーバに保存(貼付け)する
- sshの「許可するユーザ」に追加するユーザを登録
- クライアントのterminalツールで接続
今回、クライアント側はWindows、接続ツールはTeraTermと想定。
なお、TeraTerm最新版はこちら。事前にインストールしてあること。
ssh鍵の作成
クライアント側でteratermを起動、
設定→SSH鍵生成→生成→鍵のパスフレーズ入力(任意のパスワード)
→公開鍵、秘密鍵をそれぞれクライアントの任意の場所に保存
作成したssh鍵をサーバに保存する
さくらVPSのリモートコンソールからtryerrorユーザでログインし、
鍵を保存するディレクトリを作成する
$ mkdir -p ~/.ssh $ chmod 700 ~/.ssh
次にクライアントで作成したssh鍵(公開鍵)の中身をサーバに貼り付ける
$ vi ~/.ssh/authorized_keys クライアント側のメモ帳等で作成した公開鍵を開く 全文コピー リモートコンソール経由で貼付けして保存 $ chmod 600 ~/.ssh/authorized_keys
初回ユーザ登録時はまだsshで接続できないのでリモートコンソール経由で実施。
2回目以降はssh経由のファイル更新でOK。
sshの許可ユーザに登録する
# vi /etc/ssh/sshd_config AllowUsersに追加したいユーザを登録して保存(今回はtryerror) AllowUsers tryerror taro jiro # /etc/init.d/sshd restart
接続テスト
クライアントのteratermを起動
- ホスト名にさくらVPSのホスト名を入力
- TCPポートは10022を指定
- サービスにSSHを選択、セレクトボックスからSSH2を選択
- OKを押す
認証が必要です、と出るので
- ユーザ名に追加したユーザ名(tryerror)
- パスフレーズにクライアントで鍵を作成した際につけたパスフレーズ
- RSA/DSA鍵を使うを選択、秘密鍵ボタンを押して
クライアントで作成した秘密鍵を選択
公開鍵でなく秘密鍵を選択。サーバに保存したのは公開鍵。間違えないように。 - 接続
以上で接続できるはず。
接続できない場合はほぼ設定ミスが原因と思われる。
上記の手順をもう一度確認。
特にサーバのauthorized_keysのパーミッションに注意。
接続エラー情報はサーバ側の/var/log/secureに書かれるのでこちらも参考にどうぞ。
ssh接続できるようになったら以降、リモートコンソールは使わずにsshで操作をする。
yumの更新
yumとはググってください。
さくらVPSの場合、初期設定でepelリポジトリが設定されているのでリポジトリの変更はまずは不要。
# yum update
日本語環境にする
これをやっておかないといろいろなところで泣きを見る
# vi /etc/sysconfig/i18n #LANG="C" LANG="ja_JP.UTF-8"
ファイアーウォール設定
さくらVPSのようなクラウド型プラットフォームを扱うにあたり、これが一番大事な設定だと思う。
たとえばさくらVPSの場合、デフォルトではファイアーウォール全開設定なのでアクセスし放題になっている。
LAN内に置かれたサーバの場合、ルータなりファイアーウォールなりで外部アクセスが制限されてるから
OS自体のファイアーウォールは必要性が低いんだけど。
さくらVPSはほっとくとガンガンアクセスに来てる(特に海外から)のでほんと注意してください。
乗っ取られてスパムメールサーバにされるとか、迷惑行為の助長にならないように。
まずはIPV6を無効化しておく
# vim /etc/modprobe.d/disable-ipv6.conf options ipv6 disable=1
IPV6のファイアーウォールを停止
# /etc/init.d/ip6tables stop # chkconfig ip6tables off
IPV6を無効化するとさくらVPSの場合、postfixがエラーを出力するようになる
さくらVPSはデフォルトでpostfixが入ってる
対応しておく
# vim /etc/postfix/main.cf inet_protocols = ipv4 # /etc/init.d/postfix restart
ファイアーウォールの設定をする。
さくらVPS運用をしているいくつかのブログを見回してみて、以下のような設定にしてみた。
覚えておくべきは、今の設定は内部からはなんでもOKだけど、外部からこのサーバにはHTTP/HTTPS/SSHくらいしかつながらないよ設定。
つまり、それ以外の接続(例えばAccessからこのサーバのデータベースに接続とか)をする場合は設定変更が必要だということ。
なお、以下の内容を記述する際、余計な改行やスペースがあるとだめなので注意。(左詰めで記述すること)
# 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, HTTPS -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 -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT # ポート開ける場合、ここに記述を追加 -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited COMMIT
ファイアーウォール設定の反映
# /etc/init.d/iptables restart
今後、サービスやアプリケーションの追加に伴い、開放が必要なポートだけをiptablesに追加して開けていく。