orangeProse別館

orangeProse(本ブログ)の補助

VagrantでUbuntuサーバ/固定IP/SSHポート変更

Vagrantを使ったUbuntuサーバの初期設定トレーニングシリーズ、前回の続きです。

現在の環境:Vagrant 1.5.0, Ubuntu Server 12.04 64bit

まずVagrantで使用開始するのに最低限必要な、openssh-serverをインストールして、authorized_keys(アクセス権600)を.ssh(アクセス権700)に保存したところでBase Boxをつくりました(ついでにVirtualBoxのGuest Additionもビルド)。

前回は、デフォルトのエディタをvim-noxにして、設定ファイルの変更を管理するetckeeper・git・tigのインストール、時刻を合わせるNTPのインストールまで済ませました。

今回のテーマは

というサーバの初期設定の基本中の基本なのですが、Vagrant環境ではこれが無理ゲーっぽい。

一般的なIP固定の方法は、使えないことはないまでも、ややこしくなりがちです。

一般的でない、Vagrant固有のIP固定は、Vagrantfileを

config.vm.network :private_network, ip: "192.168.33.10"

# config.vm.network :public_network

というように書き換えて、vagrant reloadするだけです(アドレス部分は、LANのルータなどが配布するアドレスではなく、ホストOSとの間だけで成立する接続用のアドレスになります。たぶんVagrantfileのデフォルト値でOK)。

なので、ここでは設定ファイルの書き方をメモするだけにして、実際にはファイルに触れないでおきます。

SSHポート変更は、Vagrantのドキュメントでは(ゲストOSのsshポートを12345に変更したら)Vagrantfileで

config.ssh.port = 12345

とすればよい、と書かれているのですが、どうもVagrantfileを無視して22に接続しようとするみたいです。

通常、Ubuntuサーバの/etc/ssh/sshd_configのポートを指定する箇所で、受付ポートを複数指定できるのですが、22以外の受付ポートを書き込むと、vagrant up(ないしreload)ができなくなります。

VirtualBoxの「プレビュー」画面では立ち上がっているのですが。

そんなわけで、今回の記事はあくまでもUbuntuサーバ初期設定のメモで、Vagrant環境ではスルーするポイントになりそうです。

(このへんの問題の対処の仕方を知っている方、ご教示くださると幸いです)

IPアドレスの固定

サーバには、固定IPアドレスが設定されているのが普通です。

ちなみに固定せずに、DHCPクライアントとして動かすには、dhclientコマンドを使います(このVagrant関連の記事のとおりに構築してきたならば、すでにDHCPクライアントとして動いています)。

$ tail /var/log/syslog

vagrant起動直後にログをみると、dhclientがIPアドレスを取得しているのがわかります。

$ sudo dhclient eth0

でeth0インターフェイスIPアドレスを取得できますが、vagrantではNATで使用中なので、はねられます。eth1はホストオンリーアダプタで使用中なのではねられます(上述した:private_networkの設定をしている場合)。

$ sudo dhclient -r eth1

でeth1のIPアドレスを開放してDHCPクライアントを終了できます。

Ubuntu固定IPアドレスを設定するには/etc/network/interfacesを編集します。

$ cd /etc/network
$ sudo cp interfaces interfaces.org

ですでに存在するファイルのバックアップをとっておきます。

$ sudo vi interfaces

でファイルの内容を読むと、Vagrantがいろいろと設定しているのがわかります。

先に述べたように、Vagrant環境では「有効なEthernetインターフェイスがひとつだけ」という状況ではないので、このままVagrant環境のファイルに適用しないで下さい。

# The primary network interface
auto eth0
iface eth0 inet dhcp

最初のアダプタ(eth0)に関する記述はこうなっていると思います。

意味は、ifup -aコマンドの実行時(つまり起動時)に(auto)、eth0がTCP/IPを利用し(inet)、動的にIPアドレスを取得(dhcp)、という感じです。

実運用サーバでは次のように書き換えます(例):

# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.1.20
netmask 255.255.255.0
broadcast 192.168.1.255
gateway 192.168.1.1
dns-servers 127.0.0.1
dns-search hatenablog.com

アドレス部分は、LANであればルータなどが配布する範囲でまだ使用されていないアドレスを割り当てます。

上記の例では、LANのルータが192.168.1.1で、192.168.1.20を取得しています。

LANならDNSサーバの記述は無しか(上記は自分自身へのループバックアドレス)、もしくは8.8.8.8 8.8.4.4GoogleのパブリックDNS)にします。

ドメインネームdns-serachの記述は、ここではホスト名の検索にhatenablog.comを補うようにしている例です。

すでに利用IPアドレスが決められている公開サーバならifconfigrouteIPアドレス・ネットマスク・ブロードキャストアドレス・デフォルトゲートウェイを表示してメモしておけばよいかと思います。

ホスト名などを変更している場合は、/etc/network/interfacesに加え、/etc/hostnameと/etc/hostsも書き換えます。

$ cd /etc
$ sudo vi hostname

www.hatenablog.com

$ sudo vi hosts

192.168.1.20 www.hatenablog.com

/etc以下のファイルを変更したときは、

$ sudo etckeeper commit

しておきましょう。

なお、伝統的には/etc/resolv.confを編集してDNSリゾルバを設定しますが、Ubuntuではこれが禁止されています。

$ sudo vi /etc/resolv.conf

で開くと、「編集するな。編集しても上書きされるぞ」と書いてあります。

Ubuntuではresolvconfコマンドで自動的にresolv.confが生成されることになっています。

resolveconfコマンドは、/etc/network/interfacesにdns-nameserversやdns-searchが記述されてからifupコマンドが実行されると(それはたいてい再起動時ですが)、自動的にresolv.confの更新を行います(じっさいには/run/resolveconf/resolv.confへのシンボリックリンクになっています)。

SSHポートの変更

これも、Vagrant環境ではやらないほうが無難な気がします(これをやると、vagrant upができなくなりますが、PuTTYなどでの接続はできます)。

デフォルトのSSHポートは22になっていますが、そのままだとブルートフォース攻撃の対象になります(その前にUFWなどのファイアウォールで保護すべきですが、次回に回します)。

また、下二桁が22のポートも狙われるので、1022・10022・2222なども避けるべきです。

ここでは12345に設定する例:

$ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.org
$ sudo vi /etc/ssh/sshd_config

Port 12345

$ sudo etckeeper commit

ssh port 22 => 12345

$ cd /etc
$ sudo tig

設定を変更したら、sshを再起動します:

$ sudo service ssh restart

待ち受けポートの確認をします:

$ sudo ss -lpn | grep sshd

次回はUFWファイアウォール)とapache2の予定です。