Kohei Nozaki's blog 

Entries tagged [linux]

さくらVPSの初期設定をしてみる


Posted on Tuesday Jan 21, 2014 at 06:43AM in Technology


環境

  • さくらインターネット VPS 1G
  • CentOS 6.5

何をするの?

  1. 一般ユーザを作る
  2. 作ったユーザの公開鍵を置く
  3. 作ったユーザがsudo出来るようにする
  4. sshのパスワード認証を無効化
  5. ssh以外のポートが空いてない事を確認
  6. iptablesでsshとhttp以外を遮断
  7. IPv6を無効化

接続まで

Webから申し込みをして5分ほどで、IPアドレスとrootアカウントのパスワードが書かれた仮登録完了メールが届くが、この時点ではまだ起動していないのでVPSコントロールパネルから起動してやらないといけない。さらにVPSコントロールパネルからリモートコンソールを開くとOSの起動ログが見える。リモートコンソールでログインプロンプトが表示されたのを確認してからsshで接続すると良い。

OSのアップデート

まあ一応ログインしたらすぐやっておく。やってみたけど特に何も更新はなかった。

yum update

ユーザを作る

面倒くさいけどsshでrootログイン出来るとか若干気持ち悪いのでやっておきましょう。こういう感じ

# adduser kyle
# passwd kyle
ユーザー kyle のパスワードを変更。
新しいパスワード:
新しいパスワードを再入力してください:
passwd: 全ての認証トークンが正しく更新できました。
# 
終わったら作ったユーザでログインし直しましょう。

公開鍵を置く

こんな感じかと

<![CDATA[
cd
mkdir .ssh
chmod 700 .ssh
cat > .ssh/authorized_keys << EOF
[YOUR PUBLIC KEY HERE]
EOF
chmod 600 .ssh/authorized_keys
]]>
実行するとこうなる
$ ls -ld .ssh
drwx------ 2 kyle kyle 4096  1月 19 09:08 2014 .ssh
$ ls -l .ssh
合計 4
-rw------- 1 kyle kyle 408  1月 19 09:08 2014 authorized_keys
$ 

sudo出来るようにする

suしてvisudoを起動します

$ su - 
パスワード:
# visudo
起動したら一番下に以下を追加。面倒くさいので全部パスワード不要にする。
kyle    ALL=(ALL)       NOPASSWD: ALL
確認してみよう
$ sudo whoami
root
$ 
大丈夫そうですね

sshのパスワード認証を無効にする

日常的にブルートフォースアタック的なものが飛んでくる今日においては嫌な感じなので無効にしておきましょう

cd /etc/ssh
sudo cp sshd_config sshd_config.bak
sudo sed -i -e "s/^PasswordAuthentication yes/PasswordAuthentication no/" sshd_config
変更したら再起動
sudo service sshd restart
万が一入れなくなったらWebのリモートコンソールからログインしてなんとかしましょう。

空いてるポートを確認する

$ netstat -an | grep LISTEN | grep tcp
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      
tcp        0      0 :::22                       :::*                        LISTEN      
tcp        0      0 ::1:25                      :::*                        LISTEN      
$ 

22と25だからsshとメールですかね。外に向けて空いてるのはsshだけだ。

ポートスキャンサービスを使って空いてるポートを確認する

25番が空いてるか閉じてるか手元の端末から叩いても分からない(そもそも25番向けの外向きパケットはほとんどのISPで遮断される?)し、念のためポートスキャンサービスを使って確かめてもらいます。

ここを使います。GRC | ShieldsUP! — Internet Vulnerability Profiling ここで問題なのがこのサービスは、そのサービスにアクセスしたIPアドレスに対してしかスキャンかけてくれない事ですね。まあしょうがない。ゆえに若干力技ですがsshを使ってsocksのトンネル(?)を使ってアクセスします。手元の端末で以下を叩くと手元の端末でsocksサーバが立ち上がります。Windowsでもputtyの設定でゴニョゴニョすればsocksサーバ立てられたはず。

ssh [YOUR VPS IP ADDRESS HERE] -D 1080
こうすると手元の1080番にsocksサーバが立ち上がり、VPSを通じてWebアクセスができるようになります。socks用WebブラウザとしてはOperaが良い。OSのプロキシの設定いじらなくても独立した設定をアプリで持ってくれるので。こんな感じになります

Proceedっていうボタン押して遷移する画面でAll Service Portsを押すとポートスキャンが始まります

----------------------------------------------------------------------

GRC Port Authority Report created on UTC: 2014-01-19 at 00:55:26

Results from scan of ports: 0-1055

    1 Ports Open
 1055 Ports Closed
    0 Ports Stealth
---------------------
 1056 Ports Tested

NO PORTS were found to be STEALTH.

The port found to be OPEN was: 22

Other than what is listed above, all ports are CLOSED.

TruStealth: FAILED - NOT all tested ports were STEALTH,
                   - NO unsolicited packets were received,
                   - A PING REPLY (ICMP Echo) WAS RECEIVED.

----------------------------------------------------------------------

開いてるのはsshだけですね。25番は127.0.0.1に対してしかlistenしてないから出てきません。

iptablesの設定

別にこのままでもいいのですが、PING返したくないし、一応念のためにiptablesの設定もします。sshとhttpだけ開けます。

sudo sh -c 'cat > /etc/sysconfig/iptables' <<EOF
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
COMMIT
EOF
sudo service iptables restart

この状態で再度ポートスキャンしてみるとこんな感じ

----------------------------------------------------------------------

GRC Port Authority Report created on UTC: 2014-01-19 at 04:32:40

Results from scan of ports: 0-1055

    1 Ports Open
    1 Ports Closed
 1054 Ports Stealth
---------------------
 1056 Ports Tested

The port found to be OPEN was: 22

The port found to be CLOSED was: 80

Other than what is listed above, all ports are STEALTH.

TruStealth: FAILED - NOT all tested ports were STEALTH,
                   - NO unsolicited packets were received,
                   - NO Ping reply (ICMP Echo) was received.

----------------------------------------------------------------------

IPv6の無効化

Apacheの設定とかで微妙にはまりそうな気配なので無効化しておく

sudo cp /etc/sysconfig/network /etc/sysconfig/network.bak
sudo sed -i -e 's/NETWORKING_IPV6="yes"/NETWORKING_IPV6=no/' /etc/sysconfig/network
echo 'options ipv6 disable=1' | sudo sh -c 'cat > /etc/modprobe.d/disable-ipv6.conf'
sudo chkconfig ip6tables off

参考文献