コンテンツへスキップ

さくらVPS(CentOS)で最初にやったこと

スタート地点

さくら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で接続できるかテストする。

以下の手順が必要となる。

  1. クライアント側でssh鍵を作成する。(ツールを利用)
  2. 作成したssh鍵の中身をサーバに保存(貼付け)する
  3. sshの「許可するユーザ」に追加するユーザを登録
  4. クライアントの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に追加して開けていく。

 

 

 

 

 

 

 

 

 

 

コメントを残す

メールアドレスが公開されることはありません。