「ssh」タグアーカイブ

ESXiに公開鍵方式のSSHでアクセスする

自分用のメモ。ESXiをvSphere Clientを使わずに使うための布石。

1.公開鍵の作成

アクセス元のマシン上で公開鍵(と秘密鍵)を作成する。ESXiはrootで使うので何も考えずにアクセス元もrootで作業する。

# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): ←デフォルトの場所で良ければそのままエンター
Enter passphrase (empty for no passphrase): ←パスワード無しでアクセスしたければそのままエンター
Enter same passphrase again: ←同上
Your identification has been saved in /root/.ssh/id_rsa. ←秘密鍵の名前
Your public key has been saved in /root/.ssh/id_rsa.pub. ←公開鍵の名前
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx root@Host
The key's randomart image is:
+--[ RSA 2048]----+
| . +  o          |
|. E    * .       |
| .      B .      |
|  .    * o       |
| . o. * S        |
|  +  . .         |
| o .  +          |
|. S. .           |
| .oo.            |
+-----------------+
#

作成した鍵の確認

# ls -l ~/.ssh
total 1
-rw-------  1 root  wheel  1679 Nov 17 19:16 id_rsa   ←秘密鍵
-rw-r--r--  1 root  wheel   395 Nov 17 19:16 id_rsa.pub ←公開鍵
-rw-r--r--  1 root  wheel   788 Nov 17 18:29 known_hosts
# cat ~/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
Mxxxxxxxx
(省略)
xxxxxxxxxKmkkw==
-----END RSA PRIVATE KEY-----
# cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQChvggKQDApEhl5NSmFb5U++2tCPHfXAyzbwSB+/TT5aUD60/uzVhjoaOAfFncWRbok69Ngx5Akk+gdwvB+/ykArWNeTUgwcEqaszLLVdN5YJ08+11K14W5i7MZBjvfLfBsi5/ZEAUTEIbsdJgoaWdmcoMZ9q2j4VNZIQwoWY9bV+/4ktXVFbY+quVzzy+SJ3qgoXIFeWtXoytMLhEm71fGxF9PJLu8BCKguA1d/dswr7PS505eHoNfXFhmW0d4Vlar/0C2wPVpeTJuVAs+Ob8xe5Qzl4IC/G68HffGysnCDdEySl8u15LOFu4Ho2d9xmTU0q0knoTs5YtYNO+W1vFn root@Host
#

秘密鍵は誰にも公開しないこと。

2.公開鍵をESXiに登録

作成しておいた公開鍵をESXiマシンにコンソール経由でコピペする。
ESXiのコンソール上で以下を実行。

# cd /etc/ssh/keys-root
/etc/ssh/keys-root # echo ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQChvggKQDApEhl5NSmFb5U++2tCPHfXAyzbwSB+/TT5aUD60/uzVhjoaOAfFncWRbok69Ngx5Akk+gdwvB+/ykArWNe
TUgwcEqaszLLVdN5YJ08+11K14W5i7MZBjvfLfBsi5/ZEAUTEIbsdJgoaWdmcoMZ9q2j4VNZIQwoWY9bV+/4ktXVFbY+quVzzy+SJ3qgoXIFeWtXoytMLhEm71fGxF9PJLu8BCKguA1d/dswr7PS505eHo
NfXFhmW0d4Vlar/0C2wPVpeTJuVAs+Ob8xe5Qzl4IC/G68HffGysnCDdEySl8u15LOFu4Ho2d9xmTU0q0knoTs5YtYNO+W1vFn root@Host >authorized_keys

登録した公開鍵を確認する。

/etc/ssh/keys-root # cat /etc/ssh/keys-root/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQChvggKQDApEhl5NSmFb5U++2tCPHfXAyzbwSB+/TT5aUD60/uzVhjoaOAfFncWRbok69Ngx5Akk+gdwvB+/ykArWNeTUgwcEqaszLLVdN5YJ08+11K14W5i7MZBjvfLfBsi5/ZEAUTEIbsdJgoaWdmcoMZ9q2j4VNZIQwoWY9bV+/4ktXVFbY+quVzzy+SJ3qgoXIFeWtXoytMLhEm71fGxF9PJLu8BCKguA1d/dswr7PS505eHoNfXFhmW0d4Vlar/0C2wPVpeTJuVAs+Ob8xe5Qzl4IC/G68HffGysnCDdEySl8u15LOFu4Ho2d9xmTU0q0knoTs5YtYNO+W1vFn root@Host
/etc/ssh/keys-root #

3.SSHでアクセスしてみる

秘密鍵のあるマシンからESXiにSSHでアクセスしてみる。

# ssh 192.168.1.xx ←ESXiのIPアドレス
The time and date of this login have been sent to the system logs.

VMware offers supported, powerful system administration tools.  Please
see www.vmware.com/go/sysadmintools for details.

The ESXi Shell can be disabled by an administrative user. See the
vSphere Security documentation for more information.
~ #

無事成功。

ESXiでSSHを使う

ESXiでSSHを使う設定方法の自分用メモ

ESXiでの設定

ESXi-ssh1

まずESXiのコンソールからF2キーで「Customize System/View Logs」に入る。
 

ESXi-ssh2

次に「Troubleshooting Options」を選んでenterキー。

 

ESXi-ssh3

「Enable ESXi Shell」を選んでenterキーでESXi Shellを有効に設定。

 

ESXi-ssh4

「Ebable SSH」を選んでenterキーでSSHを有効に設定。escキーで抜けて完了。
 

SSH接続してみる

ESXiのコンソールにIPアドレスが表示されているのでそこにSSHターミナルで22番アクセス。

ESXi-ssh5

ESXi-ssh6

ESXi-ssh7

ESXi-ssh8

これでSSH接続できました。

FreeBSD(inetd.confによるアクセス回数制限)

sshで一定時間以内のアクセス失敗回数が設定限度を越えるとアクセスを拒否するという方法について以前に書いたことがありますが、これのftpd版が欲しいなぁと思っていたらいい方法がありました。

http://home.jp.freebsd.org/cgi-bin/showmail/FreeBSD-users-jp/88562

inetd 経由にすれば似たようなものは実現できます。
たとえば、SSH なら、

ssh stream tcp nowait/0/3/2 root …..

なんて記述をしておきます。
この 0/3/2 って記述ですが。
: : :
1 2 3

1 最大子プロセス数(0は無制限)
2 同一IPからの1分以内の最大接続数
3 同一IPからの最大子プロセス数

となります。

上記の設定の場合は inetd から生成される ssh のプロセス数は無制限で、同一IPからの一分以内のコネクションリクエスト数は3回まで、さらに同一IPから接続が確立して生成された ssh プロセス数は2つまで。ということになります。
1分以内に接続に3回失敗すると、そのIPからのコネクションリクエストはrefuseされます。が、1分経過するとまた許可されます。

http://home.jp.freebsd.org/cgi-bin/showmail/FreeBSD-users-jp/89166

refuseしている間の接続要求もカウントしつづけるようなので、連続して認証が試みられている間は、refuse期間が延長されつづけます。
通常(?)のアタックは連続して認証を試みますので、1度refuseされるとアタックが終るまでrefuseされたままになるようです。
私の環境では、時間を置いて繰り返し同じアドレスからアタックされることは稀ですから、拒否リストに登録する他の方法とほぼ同様の効果が得られています。

ftpdはinetd.conf経由で起動するのでこの通りに設定したらOKでした。sshdもinetd.confに設定してもいいのですが、とりあえずmaxloginsで対策できているのでそのまま現状維持です。

FreeBSD (sshd & hosts.allow)

サーバーをインタネットに公開するとsshの扉を叩く人がかなりいます。それも手持ちの鍵(idとパスワード)を順番に片っ端から試していく奴が結構沢山。

そこで、Maxloginsを使ってみる。このツールはsyslogでsshアクセス失敗回数を監視し、一定の基準を超えたアクセス禁止のIPアドレスリストを吐き出す。そのリストをhosts.allowに取り込んでsshのアクセスを禁止する仕組み。
ツールの実体はここにある。 テキストファイルだけど、”maxlogins.pl”とかの名前で/usr/local/bin に保存すし、次のようにしてsyslogから実行できるようにしておく。

# chown root:wheel /usr/local/bin/maxlogins.pl
# chmod 750 /usr/local/bin/maxlogins.pl

/etc/syslog.conf に以下を挿入する。

auth.info;authpriv.info /var/log/auth.log # ←この行の次に
auth.info;authpriv.info |exec /usr/local/bin/maxlogins.pl # ←この行を追加

このmaxlogins.pl にはオプションを追加指定できる。

-e: アクセス禁止の解除時間の指定。デフォルトは12時間。

-e=1d, -e=24h, -e=1440m, -e=86400s という感じで指定する。この場合いづれも1日の意味。

-a: IPアドレスがブロックされるまでの最大試行回数。 デフォルトは3回。

-a=5 という風に指定する。

-l: ログレベルの指定。 ログはデフォルトで /var/log/auth.logに記録される。

-l=1: informational (e.g., new blocks)
-l=2: above, plus IP expirations
-l=9: verbose logging

/etc/hosts.allow をいじって「アクセス禁止のIPアドレスリスト」を読み込むようにする。

#ALL : ALL : allow
sshd : 127.0.0.1 : allow
sshd : /var/log/maxlogins : deny
sshd : ALL : allow

ちなみに、これをやったらpopとかimapとかの設定も忘れずに。

ftpd : localhost : allow
ftpd : ALL : allow
ipop3d : ALL : allow
imapd : localhost : allow
imapd : ALL : deny

最後に、 syslog を再起動。

# kill -HUP (syslogのpid)

ブロックされたIPアドレスは /var/log/maxlogins に記録される。

参考リンク: 1