SSHのポートは標準では22番を使っています。
サーバーエンジニアであれば誰もが知っていることで、悪意を持つ側も知っています。
そもそもポート番号の意味が分かっていません。
サーバーを家に例えると、ポートは「扉」とイメージしてください。
家には扉がいくつかあります。サーバーの場合、
- SSH: 22番の扉
- Web: 80番と443番の扉
のように予めポート番号は決められています。
今回の講座はSSHサーバーの待ち受けるポート番号を変更して、扉を見つけにくくしようという内容です。
目次
攻撃者の目的
これまでのあなたのサーバーは、格好の攻撃対象であったと思います。
22番ポートは開いてるし、アクセス制限はかかっていない。侵入して面白い情報があれば頂き、無ければ悪事の踏み台にしてやろう。
そのように思われていたかもしれませんね。
踏み台にする理由って何ですか?
身元がバレないように隠蔽するのが最大の目的かな。
TCP Wrapper設定後の/var/log/secure
ところで、今日の /var/log/secure はいかがですか?
Faild password
TCP Wrapperの設定をしてから、少なくとも「Failed password」と書き込まれることは無くなった、もしくは激減していると思います。
refused connect
その代わり、「refused connect」という内容のログが増えたのではないでしょうか?
grep “refused connect” /var/log/secure
Failed password と refused connect の違い
「Failed password」「refused connect」共にログインを許していません。
しかし意味合いは全く違います。
Failed passwordはシステムがパスワードを照合しています。「rootだから入れてくれ」と扉越しに頼み、家人が「合言葉は?」のように会話をしています。
そのうち合言葉を言い当て中に入ることができるかもしれませんね。
一方refused connectは門前払い。会話すらさせてもらえません。
さらに、SSHサーバーのポート番号を変更すれば、扉を隠すことと同じことなので「refused connect」さえも書き込まれなくなります。
それでは動画をご覧ください。
動画講座 SSHの待ち受けポート番号の変更
ファイアウォールの設定
あなたのサーバーは、もともとファイアウォールが有効になっていて、今はSSHサーバーが使う22番ポートのみ開いています。
今回はSSHサーバーのポートを10022番に変更するので、ファイアウォールにもその設定をする必要があります。
10022番ポートを通過できるようにファイアウォールに設定していないと、自分さえもSSHログインできなくなってしまいますので注意してくださいね。
firewall-cmdコマンド10022番ポートを開ける
ファイアウォールの設定は、以下のようにfirewall-cmdを使います。
firewall-cmd –-add-port=10022/tcp –-permanent
動画でもお伝えしたように、「–permanent」を指定しなかった場合、一時的にという意味になります。
サーバーを再起動した場合、ファイアウォールで10022番ポートが遮断されるので必ず「–permanent」をつけてください。
次に、設定を反映させるために、以下のコマンドでfirewalldをリロードさせます。
firewall-cmd –-reload
SSHサーバーのポート番号を変更
SSHサーバーの設定ファイルは、/etc/ssh/sshd_config です。
ssh_config というファイルが同ディレクトリにあるので間違えないように。
sshd_configのバックアップ
まず最初に、カレントディレクトリを /etc/ssh に移し、
cd /etc/ssh
sshd_config をコピーしてバックアップを取りましょう。
cp -p sshd_config sshd_config.org
パーミッションやタイムスタンプをそのまま引き継ぎたいので、cpコマンドに「-p」オプションをつけてコピーします。
sshd_configを編集
vi sshd_config
sshd_configの中に、「#Port 22」と書かれた行があります。
#(シャープ)はコメント行であることを意味しているので、この行の#を削除して、「22」を「10022」と書き換えてもいいのですし、yypで行を下にコピーしてから編集をしてもいいです。
17 #Port 22
18 Port 10022
diffコマンドで編集箇所をチェック
サーバーサイドエンジニアは常にチェックすることを心がけてください。
ちょっとした操作、設定を変更しただけでサーバーの動作が変わってくるので、自分が何をしようとしているのか、この設定で間違い無いのか必ずチェックするようにしてください。
diff sshd_config sshd_config.org
diffはdifferenceの略ですね。2つのファイルの違いを表示させるコマンドです。
18d17
< Port 10022
SSHサーバーの再起動
設定ファイルを書き換えただけでは、ポート番号は10022のままです。
設定を反映させるためには、SSHサーバーを再起動させる必要があります。
systemctlコマンド
systemctl restart sshd
SSHを再起動しても、今ターミナルを使ってSSH接続しているものが切断されることはありません。
sshdの起動チェック
psコマンドとgrepコマンドを使ってsshdが問題なく起動していることを確認します。
ps aux | grep sshd
psコマンドは、現在の稼働中のプロセスを表示させるコマンドです。grepコマンドでsshdに関するプロセスだけを抽出させます。
root 2863 0.0 0.8 112812 4280 Ss 22:39 0:00 /usr/sbin/sshd -D
この表示から、sshdは22時39分に起動されたということが分かります。上記を表示した直後に、dateコマンドでサーバーの時刻を表示させてチェックするのもいいでしょう。
date
dateコマンドで表示された時刻と、sshdが起動された時刻が近いものであれば、SSHサーバーは10022番ポートで起動しているはずですね。
確信を得たいのでnetstatコマンドを使います。
netstat -nlap | grep 10022
netstatコマンドとgrepコマンドを使って、このようにsshdが10022番ポートで待ち受けしていることを確認することができます。
tcp 0 0 0.0.0.0:10022 0.0.0.0:* LISTEN 21665/sshd
tcp6 0 0 :::10022 :::* LISTEN 21665/sshd
変更したポート番号を使ってSSHログイン
ここまでの設定と確認が済んだら、10022番ポートでSSHログインできるか試してみましょう。
ssh root@IPアドレス -p 10022
とすれば、指定したポート番号でログインできます。
10022番ポートでSSHログインできましたか?
今後 /var/log/secure の書き込みがどのように変化するのか楽しみですね!
Well-Known Ports
ここまでポート番号は扉に相当しますとお伝えしてきました。
ポート番号には定義されているWell-Known Portsというものがあります。
TCP/IPの通信で使われるポート番号の内、よく知られたサービスやプロトコルが利用する0から1023までを指します。
今回SSHサーバーに割り振ったものは、他のサービスで使用されることのないポート番号ということで、Well-Known Portsよりも大きい10022番ポートを選びました。
覚えておきたいポート番号
以下はWell-Known Portの中でも特にメジャーなポート番号なので覚えておきましょう。
ポート番号 | TCP/UDP | サービス/プロトコル |
20 | TCP | FTP (データ) |
21 | TCP | FTP (制御) |
22 | TCP | SSH (Secure Shell) |
23 | TCP | Telnet |
25 | TCP | SMTP |
43 | TCP | WHOIS |
53 | UDP | DNS |
80 | TCP | HTTP |
110 | TCP | POP3 |
123 | UDP | NTP(Network Time Protocol) |
143 | TCP | IMAP2/4 |
443 | TCP | HTTPS |
465 | TCP | SMTPS |
587 | TCP | SMTP Message Submission |
993 | TCP | IMAPS |
995 | TCP | POP3S |
次はrootで直接sshログインできないように設定します。
コメント