1年ほど前にsshを利用できるようにした。まとめた記述がないことを思い出して、 ここにその時の経緯を改めてメモすることにした。(2009/06/09) ローカルネットワークからtelnetでアクセスしてssh環境を作成 サーバー: VersaPro os:freebsd クライアント:KAZE2 os:WindowsXP クライアントソフト:UTF-8 TeraTerm Pro with TTSSH2 認証 : DSA使用 バージョン: OpenSSH_4.2p1 FreeBSD-20050903, OpenSSL 0.9.7e-p1 25 Oct 2004
$ pwd /usr/home/USER ←ログオンユーザーのホームディレクトリー $ ssh-keygen -t dsa ←ssh2用のDSA鍵を作成する Generating public/private dsa key pair. Enter file in which to save the key (/home/USER/.ssh/id_dsa): ←キーを保存するディレクトリー(CRのみ入力) Enter passphrase (empty for no passphrase): ←パスフレーズを入力 Enter same passphrase again: ←同じパスフレーズを再入力 Your identification has been saved in /home/USER/.ssh/id_dsa. Your public key has been saved in /home/USER/.ssh/id_dsa.pub. The key fingerprint is: 4d:8e:7d:fa:44:AA:AA:AA:AA:AA:AA:AA:aa:01:c6:1d USER@VersaPro.ddo.jp キーの作成完了 $ pwd /usr/home/USER $ ll drwxr-xr-x 5 USER USER - 512 Aug 9 23:18 ./ drwxr-xr-x 4 root wheel - 512 Jun 14 20:32 ../ drwx------ 2 USER USER - 512 Aug 11 19:55 .ssh/ -rw-r--r-- 1 USER USER - 0 Aug 9 10:07 mbox $ cd .ssh $ ll drwx------ 2 USER USER - 512 Aug 11 19:55 ./ drwxr-xr-x 5 USER USER - 512 Aug 9 23:18 ../ -rw------- 1 USER USER - 1264 Aug 11 19:55 id_dsa ←秘密鍵(クライアントPCにのみ置く) -rw-r--r-- 1 USER USER - 1121 Aug 11 19:55 id_dsa.pub ←公開鍵(サーバー側に置く基本データ、処理が必要) -rw-r--r-- 1 USER USER - 1118 Aug 9 23:17 known_hosts
自分のホームディレクトリの下で 公開鍵を登録する /home/USER/.sshにおいて touch authorized_keys2 ←ファイルが無い場合は作る。ある時は不必要 chmod 644 authorized_keys2 ←モードの変更 cat id_dsa.pub >> authorized_keys2 ←公開鍵を追加書き込み
/etc/ssh/sshd_configの以下を追加変更(RSAはあったがDSAはなかったのでRSAをコピーして修正) 注釈行を無視して有効な文のみを取り出した( grep -v -e '^[ \t]*#' -e '^$' sshd_config ) Port 22 Protocol 2 ←変更 HostKey /etc/ssh/ssh_host_dsa_key ←変更 # 2008/08/12 LoginGraceTime 2m ←変更 # 2008/08/12 PermitRootLogin no MaxAuthTries 3 ←変更 # 2008/08/12 DSAAuthentication yes ← 追加 # 2008/08/11 AuthorizedKeysFile .ssh/authorized_keys2← 追加 # 2008/08/11 PasswordAuthentication no ←変更 # 2009/05/23 PermitEmptyPasswords no ←変更 # 2008/07/28 Subsystem sftp /usr/libexec/sftp-server
クライアントパソコンに秘密鍵を移動 サーバー側の/home/USER/.ssh/id_dsa を クライアント側に移動。 (本来は、秘密鍵の移動がないように、クライアント側で鍵を作り、公開鍵をサーバーに送る) teratermを使うことから c:\Program Files\teraterm\ssh\id_dsa に置く。 teratermのprivate key fileを 上記に設定。 後は、ユーザーIDとパスフレーズを入力してログオン 繋がった
ユーザーを限定するため /etc/ssh/sshd_configに AllowUsers USER を追加した 過去に何度かsshが繋がりにくくなった。昨日も21時半頃にsshが全く繋がらない。後でauth.logを 調べてみると辞書攻撃と思われるアクセス(174.142.46.102から)が21:18:53〜21:44:40の25分47秒の間に 623回見られた。一例を下に載せます。 Jun 10 21:18:53 VersaPro sshd[67649]: Did not receive identification string from 174.142.46.102 Jun 10 21:20:25 VersaPro sshd[67653]: Invalid user admin from 174.142.46.102 Jun 10 21:20:27 VersaPro sshd[67655]: User root from ip-174-142-46-102.static.privatedns.com not allowed because not listed in AllowUsers Jun 10 21:20:30 VersaPro sshd[67657]: Invalid user stud from 174.142.46.102 Jun 10 21:20:32 VersaPro sshd[67659]: Invalid user trash from 174.142.46.102 Jun 10 21:20:35 VersaPro sshd[67661]: Invalid user aaron from 174.142.46.102 Jun 10 21:20:37 VersaPro sshd[67663]: Invalid user gt05 from 174.142.46.102 Jun 10 21:20:39 VersaPro sshd[67665]: Invalid user william from 174.142.46.102 Jun 10 21:20:41 VersaPro sshd[67667]: Invalid user stephanie from 174.142.46.102 (略) Jun 10 21:43:52 VersaPro sshd[68944]: User root from ip-174-142-46-102.static.privatedns.com not allowed because not listed in AllowUsers Jun 10 21:43:54 VersaPro sshd[68946]: User root from ip-174-142-46-102.static.privatedns.com not allowed because not listed in AllowUsers Jun 10 21:43:57 VersaPro sshd[68948]: User root from ip-174-142-46-102.static.privatedns.com not allowed because not listed in AllowUsers Jun 10 21:43:59 VersaPro sshd[68950]: User root from ip-174-142-46-102.static.privatedns.com not allowed because not listed in AllowUsers Jun 10 21:44:01 VersaPro sshd[68952]: User root from ip-174-142-46-102.static.privatedns.com not allowed because not listed in AllowUsers Jun 10 21:44:03 VersaPro sshd[68967]: User root from ip-174-142-46-102.static.privatedns.com not allowed because not listed in AllowUsers Jun 10 21:44:05 VersaPro sshd[68969]: User root from ip-174-142-46-102.static.privatedns.com not allowed because not listed in AllowUsers Jun 10 21:44:07 VersaPro sshd[68971]: User root from ip-174-142-46-102.static.privatedns.com not allowed because not listed in AllowUsers Jun 10 21:44:40 VersaPro sshd[68973]: reverse mapping checking getaddrinfo for ip-174-142-46-102.static.privatedns.com failed - POSSIBLE BREAKIN ATTEMPT! Jun 10 21:44:40 VersaPro sshd[68973]: User root from 174.142.46.102 not allowed because not listed in AllowUsersこのIPがどこかwhoisで調べてみた。詳しいデータが出てこなかった。 # whois 174.142.46.102 iWeb Technologies Inc. IWEB-BLK-06 (NET-174-142-0-0-1) 174.142.0.0 - 174.142.255.255 iWeb Dedicated CL2 IWEB-CL-T186-01SH (NET-174-142-46-96-1) 174.142.46.96 - 174.142.46.127 # ARIN WHOIS database, last updated 2009-06-10 19:10 # Enter ? for additional hints on searching ARIN's WHOIS database.そこで sshd_configに下記の一文を追加した。 MaxStartups 5:70:10 # append 2009/6/11 # 5つまでの接続要求を受け付け # これを超えると70%の確率で接続要求を拒否し # 10を超えるとすべて拒否する。 sshdへのアタックを抑える MaxStartupsは同じセッションに対しては働かないような記述があった。事実6月11日の22時頃に「MaxStartups」の設定を行った。 しかし、その後も同じような例が出ている。以下にその例を挙げます。 Jun 12 05:23:25 VersaPro sshd[76645]: Did not receive identification string from 125.236.226.94 Jun 12 05:26:28 VersaPro sshd[76656]: User root from 125-236-226-94.adsl.xtra.co.nz not allowed because not listed in AllowUsers Jun 12 05:26:31 VersaPro sshd[76658]: Invalid user fluffy from 125.236.226.94 Jun 12 05:26:34 VersaPro sshd[76660]: Invalid user admin from 125.236.226.94 Jun 12 05:26:37 VersaPro sshd[76662]: Invalid user test from 125.236.226.94 Jun 12 05:26:40 VersaPro sshd[76664]: Invalid user guest from 125.236.226.94 Jun 12 05:26:51 VersaPro sshd[76666]: Did not receive identification string from 125.236.226.94 Jun 12 10:35:07 VersaPro sshd[77487]: User root from 218.25.11.147 not allowed because not listed in AllowUsers Jun 12 10:35:09 VersaPro sshd[77489]: User root from 218.25.11.147 not allowed because not listed in AllowUsers Jun 12 10:35:12 VersaPro sshd[77491]: User root from 218.25.11.147 not allowed because not listed in AllowUsers Jun 12 10:35:14 VersaPro sshd[77493]: User root from 218.25.11.147 not allowed because not listed in AllowUsers Jun 12 10:35:15 VersaPro sshd[77495]: User root from 218.25.11.147 not allowed because not listed in AllowUsers Jun 12 10:35:17 VersaPro sshd[77497]: User root from 218.25.11.147 not allowed because not listed in AllowUsers Jun 12 10:35:19 VersaPro sshd[77499]: User root from 218.25.11.147 not allowed because not listed in AllowUsers Jun 12 10:35:21 VersaPro sshd[77501]: User root from 218.25.11.147 not allowed because not listed in AllowUsers Jun 12 10:35:23 VersaPro sshd[77503]: User root from 218.25.11.147 not allowed because not listed in AllowUsers Jun 12 10:35:26 VersaPro sshd[77505]: User root from 218.25.11.147 not allowed because not listed in AllowUsers Jun 12 10:35:30 VersaPro sshd[77507]: User root from 218.25.11.147 not allowed because not listed in AllowUsers Jun 12 10:35:32 VersaPro sshd[77509]: User root from 218.25.11.147 not allowed because not listed in AllowUsers Jun 12 10:35:34 VersaPro sshd[77511]: User root from 218.25.11.147 not allowed because not listed in AllowUsers Jun 12 10:35:36 VersaPro sshd[77513]: User root from 218.25.11.147 not allowed because not listed in AllowUsers Jun 12 10:35:39 VersaPro sshd[77515]: User root from 218.25.11.147 not allowed because not listed in AllowUsers Jun 12 15:41:34 VersaPro sshd[78316]: Did not receive identification string from 58.102.157.95 Jun 12 15:44:52 VersaPro sshd[78330]: User root from 58.102.157.95 not allowed because not listed in AllowUsers Jun 12 15:44:53 VersaPro sshd[78332]: User root from 58.102.157.95 not allowed because not listed in AllowUsers Jun 12 15:44:54 VersaPro sshd[78334]: User root from 58.102.157.95 not allowed because not listed in AllowUsers Jun 12 15:44:55 VersaPro sshd[78336]: User root from 58.102.157.95 not allowed because not listed in AllowUsers (略) Jun 13 02:19:48 VersaPro sshd[80088]: Did not receive identification string from 219.143.232.143 Jun 13 02:23:29 VersaPro sshd[80106]: Invalid user staff from 219.143.232.143 Jun 13 02:23:30 VersaPro sshd[80108]: Invalid user sales from 219.143.232.143 Jun 13 02:23:31 VersaPro sshd[80110]: Invalid user recruit from 219.143.232.143 Jun 13 02:23:33 VersaPro sshd[80112]: Invalid user alias from 219.143.232.143 (略) Jun 13 02:26:55 VersaPro sshd[80400]: Invalid user telnetd from 219.143.232.143 Jun 13 02:26:56 VersaPro sshd[80402]: Invalid user identd from 219.143.232.143 Jun 13 02:27:01 VersaPro sshd[80404]: Invalid user gnats from 219.143.232.143 Jun 13 02:27:02 VersaPro sshd[80406]: Invalid user jeff from 219.143.232.143 Jun 13 02:27:03 VersaPro sshd[80408]: Invalid user irc from 219.143.232.143IPアドレス219.143.232.143からは2:19:48から2:27:03までの7分15秒の間に 147回の攻撃があった。約3秒に一回の割合だ。 また、最初に認証キーを受け付けないのでその後パスワード受付に変わっているようだった。 過去にもtelnetでイントラからサーバーにアクセスし、そのままsshでlocalhostにログイン してみたことがある。最初に認証キーを聞いてくるので無視して改行を入れると、今度はパスワードを聞いてくる。 正しいパスワードを入れるとログインできてしまう。パスワードによるログインはsshd_configで 禁止している(PasswordAuthentication no )はずなのに何故かわからなかった。 ここによると 「ChallengeResponseAuthentication no」にしておかないとパスワード認証を受け付けるとのこと。 明示的に「ChallengeResponseAuthentication yes」と記述しなければ大丈夫と思っていたのが間違いのようだ。 明示的に否定しないといけないらしい。6月13日の21時半頃にsshd_configを修正した。 telnetでイントラからサーバーにアクセスし、そのままsshでlocalhostにログイン を試みる。最初に認証キーを聞いてくるので同じく無視して改行を入れると、受付を拒否された。 「ChallengeResponseAuthentication no」が効いているようだ。 昨日の変更でも減らないので、sshのポート番号を変更することにした。過去にポートを22から他の番号に 変更したことがあったが、うまくいかなかった。今回も前回と同様のことをしたのだが、何故かうまくいった。 インターネットで調べると、sshを独立したデーモンで動かしている時は sshd_configを修正するようだが、 スーパーサーバー(スーパーデーモン、inetdのこと)から起動する場合は /etc/services のなかの ssh 22/tcp #Secure Shell Login ssh 22/udp #Secure Shell Login の番号を変更することも必要とのこと。ためしに、/etc/servicesのみ修正すると接続できるようになった。 /etc/ssh/sshd_configは修正しなくてもつながった。これで外部からもうまく繋がった。 ただし、モデムルーターのポート番号の解放をsshのポート番号に合わせる必要があった。 telnetも問題なく繋がる。sshへの攻撃もこれで減ると良いのだが、しばらく様子を見よう。 2009/06/14 18時30分頃完了 6月14日の18時半頃にポートを変更したその結果、全くアクセスが無くなった。 16日午前3時に送られてきたログ(VersaPro.ddo.jp security run output)を以下に載せます。 Checking setuid files and devices: Checking for uids of 0: root 0 toor 0 Checking for passwordless accounts: VersaPro.ddo.jp login failures: VersaPro.ddo.jp refused connections: -- End of security output --ちなみに15日午前3時に送られてきたログ(VersaPro.ddo.jp security run output)には多量のアタックがありました。 Checking setuid files and devices: Checking for uids of 0: root 0 toor 0 Checking for passwordless accounts: VersaPro.ddo.jp login failures: Jun 14 03:01:43 VersaPro sshd[87361]: Invalid user root3 from 173.11.107.148 Jun 14 10:05:05 VersaPro sshd[89053]: Invalid user test from 117.21.249.75 Jun 14 10:05:06 VersaPro sshd[89055]: Invalid user guest from 117.21.249.75 Jun 14 10:05:08 VersaPro sshd[89057]: Invalid user admin from 117.21.249.75 Jun 14 10:05:09 VersaPro sshd[89059]: Invalid user admin from 117.21.249.75 Jun 14 10:05:10 VersaPro sshd[89061]: Invalid user user from 117.21.249.75 Jun 14 10:05:15 VersaPro sshd[89069]: Invalid user test from 117.21.249.75 Jun 14 13:14:34 VersaPro sshd[89736]: Invalid user admin from 218.108.234.208 Jun 14 13:14:40 VersaPro sshd[89738]: Invalid user test from 218.108.234.208 (略) Jun 14 14:59:11 VersaPro sshd[91995]: Invalid user austin from 203.246.104.166 Jun 14 14:59:13 VersaPro sshd[91997]: Invalid user jackson from 203.246.104.166 Jun 14 14:59:14 VersaPro sshd[91999]: Invalid user justin from 203.246.104.166 Jun 14 14:59:16 VersaPro sshd[92001]: Invalid user brandon from 203.246.104.166 Jun 14 14:59:18 VersaPro sshd[92003]: Invalid user john from 203.246.104.166 VersaPro.ddo.jp refused connections: -- End of security output -- |