GCPでsshのポートを変更する
sshでリモートからアクセス許可をしていると、なんとなく、攻撃されるんじゃないか?とか思いませんか?
キーペアでの認証にしていれば、まあ、普通は不正にログインされることはないと思います。でも、どうせならもう少し小細工してみよう、ということで、sshのポートを変更してみます。
GCP側で許可ポートを追加
VMインスタンスの詳細表示にある「ネットワークインタフェース」の詳細を表示を選びます。
すると、ネットワークに関するメニューへと移行します。ファイアウォールルールの設定画面へと進みます。
いくつかのパラメータ入力画面へ行きますので、必要な項目を入力します。最低限、これだけは入力してください。例として10022ポートを利用する場合として記載します。
- 名前:ルールの名前です。ssh-10022とかでいいです。
- トラフィック方向:上り
- 一致したときのアクション:許可
- ソースフィルタ:IP範囲
- ソースIPの範囲:0.0.0.0/0 接続元IPアドレスが限定できるなら、そのIPアドレス。
- プロトコルとポート:指定したプロトコルとポート
- tcpにチェックをして10022
- udpは利用しないのでチェックは不要
これで作成をします。
ssh-10022が追加され、通信可能になりました。default-allow-internalがあるから、設定いらなくね?と見えますが、ソースIPアドレスがローカルネットワークのものなので、グローバルから全開放ではありませんのでご安心を。ちなみにFirewalldは、コンソールのファイアウォール機能を使ってほしいためか、解放されてます(停止はしていないんだけど)。
sshdのポートを変更する
sshのポート変更をするために、システムへログインして/etc/ssh/sshd_configを開きます。
#Port 22
Port 10022
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
これで、sshdを再起動すれば10022へ切り替わるのですが、このまま、再起動しても立ち上がりません。
SELinuxでport 10022を許可する
世の中、SELinuxを全否定的にされる方が多いのですが、これに関してだけは、sshd_configに書いてあります。
# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
semanageで必要なポートをあけてね!
ということです。せっかくポート変更してセキュリティ対策しているのに、SElinuxをdisableにしてセキュリティレベルを下げていたら意味がないので、semanageを利用してポートにsshの権限を付与します。
# semanage port -a -t ssh_port_t -p tcp 10022
設定を確認すると、
# semanage port --list | grep ssh
ssh_port_t tcp 10022, 22
SELinuxのsshの利用可能ポートが追加されています。ここでsshdの再起動。このとき、今ログインしているsshの接続は切らないでください。もし、ミスっていた場合、ログインできなくなってしまうからです。今、sshでログインしているシェルは、すでにsshdの管理下からは切り離されているので、sshdを再起動しても影響はありません。
# systemctl restart sshd
TeraTermでport 10022を指定してログインしてみてください。接続できたでしょうか。
ここまでできたら、ファイアウォールの設定からPort 22の設定を消したりしてみましょう。Port 22のサービスは止めてしまっていますので、無理に閉じる必要はありませんが、気持ちの問題ですね。