02-02 SSHの待ち受けポート番号を変更

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

関連記事

コメント

この記事へのコメントはありません。

最近の記事

  1. 04-02 PHP7.4のインストール

  2. 04-01 MariaDBのインストール

  3. 03-05 ApacheバーチャルホストのSSL設定