neutligenの日記

初心者が商用開発に挑む姿を綴ります。僕のような初心者の方に「こんな奴もいるんかー」と思って読んでもらい、コメントまで貰えたら幸いです。

IaaS(さくらのクラウド)を立てて最低限の設定を行う

「IaaS(さくらのクラウド)を立てて最低限の設定を行う」

目標:さくらのクラウドで最低限のセキュリティとssh,sftpで接続できるようにする

目次:
1.さくらのサーバーを立てる
2.セキュリティを確保する

     

1.さくらのクラウドサーバーを立てる

(さくらのアカウント作成の流れには触れません。)

素晴らしいチュートリアルがあったので、基本的にはこれに従います。 参照されている画面が過去のUIなんで、そこは少し考えながらやりました。

まずはリージョンを指定して、サーバを追加します。

f:id:neutligen:20160428123108j:plain

"シンプルモード"であれば、ホスト名やrootパスワード、スペック、OS、NICを決めるだけでサーバが追加できました。
SSHの公開鍵の登録もこのタイミングで可能でした。
自分は以下の通り設定。

  • スペック:CPU/ディスク共に最弱
  • OS:CentOS
  • NIC:インターネットに直繋ぎ

サーバ作成には少し時間がかかります。
サーバが出来上がると、IPアドレスが払い出されています。 出来上がったサーバーを起動して、ターミナルから以下のコマンドでログイン。

$ ssh -p 22 root@"払い出されたIPアドレス"
# -pはポート番号を指定するsshコマンドのオプション。ssh接続のデフォルトポートは22番
# パスワードの入力を要求されるので、先ほど設定したものを入力。
$ yum -y update
# いちおOSをアップデートしておきます。


2.セキュリティを確保する

root権限でのログインができるままだと、rootを乗っ取られたらおしまいなのでrootでのログインを禁止します。 その代わり、ログイン後にrootになれる権限を作成しておくことでrootの作業はできるようにしておきます。

まずは、一般ユーザを作成します。

$ adduser "作成するユーザの名前"
$ passwd "作成したユーザの名前"
New password: 
Retype new password:   
# 2回パスワードの入力を要求されるので、同じものを入力します。

一度ログアウトして"作成したユーザの名前"(ここでは便宜的にsakuseiという名前にします)で入り直します。 そのあとsu -コマンドを使ってスーパーユーザー(root)に成れることを確認します。

$ exit
$ ssh -p 22 sakusei@"IPアドレス"
$ su -
# "$"の左側にrootナンチャラと書いてあればrootに成れてます。

しかし、このままでは誰でもsu -と入力すればrootに成れるのでセキュリティはザルです。
なので、このsu -を使えるユーザを制限します。
wheelというグループにsakusei君を入れてwheelグループしかsu -コマンドを使えないように制限します。

$ groups sakusei
# sakuseiというユーザが属しているグループを確認します(何もしていなければsakuseiというグループだけに属しているはず)。
$ usermod -aG wheel sakusei
# sakuseiの補助グループにwheelを追加します。
$ groups sakusei
# wheelグループが追加されたことを確認します。
$ vi /etc/pam.d/su
# 上記ファイルを編集します。
# 6行目くらいにある"# auth      required    pam_wheel.so use_uid"の#を消してコメントアウトを解除して保存

これで、wheelグループに属さないユーザはsu -使えません。しかも上記設定はroot権限でなければ変更できないので、セキュリティが向上しました。

これで、最後にrootの直sshログインを禁止したら完璧です。
そのために、以下のようにssh_configを編集します。

$ cp /etc/ssh/sshd_config /etc/ssh/sshd_config.old  
# 何があるかわからないのでコピーしておきます。
$ vi /etc/ssh/sshd_config
# 上記ファイルの中ほどに"#PermitRootLogin yes"という行があるので"PermitRootLogin no"に変更して保存します。  
$ service sshd restart  
# 設定を書き換えたのでsshサーバーを再起動して完了です。

これで、rootが脅かされることは無くなりました。 あとは、サーバーにファイルをアップダウンロードする時に使うsftp(sshプロトコルを使ってファイル転送する)のデフォルトポートを変更することで少し安全性を高めます。
編集するのはやはり/etc/ssh/sshd_configです。

$ vi /etc/ssh/sshd_config
# 中ほどに"#Port 22"という行があるので"Port 2222"に変更して保存します。  
$ service sshd restart  
# 設定を書き換えたのでsshサーバーを再起動します。

上記ではPort番号を"2222"にしていますが、予約ポートでなければ何番でもOKです。
ポートはWikipediaに詳しく書いてあります。

ここまでやると、以下のようにsshログインすることができるようになります。

$ ssh -p 2222 sakusei@"IPアドレス"

冷静に考えるとIPアドレス宛にアクセスしようとしているのも危うい気がしますが、今後勉強して改善していきます。 以上です。

2016/06/27加筆:
sshd_configを変更しただけでfirewallに阻まれてssh接続できないことに気づきました(遅い!) したがって、補足としてiptablesの変更方法も記載します。 と言うか、CentOs6の場合sshd_configを変更したら、必ずiptaplesの変更も必要です。

$ vi /etc/sysconfig/iptables
# firewallの設定を変更するためiptablesを編集します。

iptablesに以下の行を書き足してください。

-A INPUT -m state --state NEW -m tcp -p tcp --dport 2222 -j ACCEPT

自分は以下のように書き足しました。

/etc/sysconfig/iptables

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:fail2ban-SSH - [0:0]
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-SSH
-A INPUT -p TCP -m state --state NEW ! --syn -j DROP
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p udp --sport 123 --dport 123 -j ACCEPT
-A INPUT -p udp --sport 53 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2222 -j ACCEPT
-A fail2ban-SSH -j RETURN
COMMIT

ここまでやったら設定変更を反映するためにiptables(いちおsshdも)を再起動します。

$ service iptables restart
# iptablesの再起動  
$ service sshd restart  
# sshサーバーを再起動。

結構致命的なところが漏れていました。。。
参考にさせて頂いたのはこちらのサイトです。

SSH 接続のポート番号を変更 〜 CentOS6 | EasyRamble

その他お世話になったサイト

SSHのポート番号を変更 - SSHサーバーの設定
SSHで接続しようとすると connection refused と表示される
「サーバーをさわってみよう!」~初心者でもよくわかる!VPSによるWebサーバー構築講座(2)
LinuxTips/昇格可能ユーザーを制限したい