数年前から契約している、さくらインターネットの仮想専用サーバーの1つに「標準OSインストール」から CentOS x86_64 をいれて SSHD と Firewall と Port の設定をしようと思ったけど、うまく行かなったという話です。
さくらの VPS も何件か契約しておりまして、そのうち1つは CentOS 6.1 で動いていました。
これを久しぶりにアップデートしようとしたところ、Upgrade Tool はリンクが切れており、ミラーリストもURIが変わっていて、いろいろ大変なことに気がつきました。
力づくで解決するよりも新規にOSを入れ直して再設定したほうが早そうだったので /etc 以下のいくつかのファイルをローカルに保存して、コントロールパネルから OS を再インストールすることに決めました。
スタートアップスクリプト [Public] CentOS_yum-update を選択して、インストールは無事に終了しました。
1 2 |
# cat /proc/version Linux version 3.10.0-957.10.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gccversion 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) ) #1 SMP Mon Mar 18 15:06:45 UTC 2019 |
VNCコンソールは使い勝手が悪いので、さっそくリモートからのアクセスを許容すべく、ポートの割当を書き換えて SSHD を再起動します。
1 2 |
# vi /etc/ssh/sshd_config # systemctl restart sshd.service |
つぎに割り当てたポートを開放し、不要なポートを閉鎖すべく、Firewalld の設定を書き換えます。
CentOS 6 までの iptables とは勝手が違いますね。
1 2 3 4 5 6 7 8 9 |
# start systemctl start firewalld # firewall-cmd --version 0.4.4.5 # firewall-cmd --remove-service=ssh --permanent # firewall-cmd --add-service=ssh --zone=public --permanent # cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh.xml # vi /etc/firewalld/services/ssh.xml # firewall-cmd --reload # firewall-cmd --list-all|grep -a port |
リモートから接続されている場合、Firewalld を起動すると一度ここで通信が切断されます。
これで設定がうまく行ったのかと思いきや、ssh 接続を試みると Connection timed out でエラーになります。
何かがおかしいなと思い、開放されているポートを調べてみるのですが、設定的に間違いはなさそうです。
1 2 |
# ss -t -l -n # grep -i port /etc/ssh/sshd_config |
何かがおかしいので、一時的に22番ポートを開放すると、普通に ssh 接続できるようになります。
1 2 3 4 |
# vi /etc/ssh/sshd_config # systemctl restart sshd.service # vi /etc/firewalld/services/ssh.xml # firewall-cmd --reload |
これは一体どういうことなの???
ほかに理由が思い当たらないので「あまり意味はないだろうな」とも思いつつ、SELinux の設定も変更してみます。
1 2 |
# semanage port --add --type ssh_port_t --proto tcp NNNN # semanage port --list | grep -w ssh |
意味はないだろうとは思っていましたけど、当然ながら結果は同じでした。
調べてみると、さくらインターネットのVPSでは /etc/iptables/iptables.rule に独自の設定を行っているようです。
もしかしたら、22番以外のポートを閉じる設定をどこかで行っているのでないかと、総当りで探していると、こんなものを発見。
2019年6月27日 さくらのVPS 「パケットフィルタ」提供開始のお知らせ
https://www.sakura.ad.jp/information/announcements/2019/06/27/1968200552/
新機能のパケットフィルタによってOSインストール時にはデフォルトで 22 番以外のポートが閉じられている設定になっていました。
しかも、パケットフィルタが導入されたのは、今日から数えて30日前の 6月27日 です。
これでは新しすぎて、いくら検索しても同一の事例が見つからないわけです。ほかの契約サーバでは問題なく ssh 接続できるのに、このサーバだけ接続できない理由にも合点がいきました。
結局、ネットワークの設定をほとんど見直して、半日を費やしましたけどコントロールパネルからパケットフィルタを無効化すると、問題なくリモート接続できるようになりました。
こうなったら、あとはもう SSH root login と Password Authentication を禁止、御役御免の22番は閉鎖して、ユーザー作成と公開鍵認証を済ませてしまえば、いつもどおりです。
1 2 3 4 5 |
# adduser piyo && usermod -aG sudo piyo # mkdir /home/piyo # su piyo && cd ~ $ mkdir /home/piyo/.ssh && chmod 700 /home/piyo/.ssh && sudo chown piyo:piyo /home/piyo/.ssh $ touch /home/piyo/.ssh/authorized_keys && chmod 600 /home/piyo/.ssh/authorized_keys |
いつの間にか、いろいろ変わっているので、定期的に環境を見直しておかないとダメですね。