実践Linux
RockyLinux8 RockyLinux8 目次へ TOP(HOME)へ
SSHサーバー 2021年7月
SSHサーバー(openssh 8.0p1-6)
SSHの暗号通信は、公開鍵暗号(RSAやDSA)を用いて共通鍵暗号(トリプルDES、AESなど)の共通鍵を暗号化して鍵交換を行い、通信自体は高速な共通鍵暗号を用いる、いわゆるハイブリッド暗号である。また、なりすましを防止するための認証の仕組みも充実している。パスワード認証、公開鍵認証、ワンタイムパスワードなどが提供されており、個々の情報セキュリティポリシーに合わせて選択できる。
CentOS8にはopenSSHがインストール済み。
●SSH設定ファイル/etc/ssh/sshd_config
Port 10055 ← #をとり、変更。
PasswordAuthentication no ← noに変更。通常パスワードでのログインを禁止(鍵方式によるログインのみ許可) 73行目
また、PAMが使用可能になっている場合はPAMのチャレンジ・レスポンス認証がパスワード認証と同じ機能をもっているため、通常パスワード認証を禁止するときはかならずChallengeResponseAuthenticationもnoを指定しておくこと。
ChallengeResponseAuthentication no 74行目
rootログインを禁止する場合
PermitRootLogin yes noに変更。43行目
firewalldの設定
ポート10055/TCPを開ける。
trustedゾーンに対しては、必要ない。
externalゾーンの設定
# firewall-cmd --get-services 定義されているサービス一覧
/usr/lib/firewalld/services/ssh.xmlをみると、これは22ポートなっている。
これをコピーして、/etc/firewalld/services/に貼り付け編集する。
<port protocol="tcp" port="10055"/>に変更。
# firewall-cmd --list-service --zone=external
externalゾーンには、すでにsshが適用されていることがわかる。
# firewall-cmd --reload firewalldのリロード
sshdサービスの起動
# systemctl --type=service list-unit-files インストールされたサービス一覧
# systemctl --type=service list-units | grep sshd 実行中のサービスにsshdがあるか
起動停止にしたので、起動+自動起動にしておく。
# systemctl start sshd *
# systemctl enable sshd
*****************************************
# systemctl start sshdで、エラーが出る。
/var/log/secureを見ると、「error: Bind to port 10055 on 0.0.0.0 failed: Permission denied.」
ポートを22から10055に変更したためSELinuxのセキュリティ設定に引っかかっている。
対処
# semanage port -a -t ssh_port_t -p tcp 10055 sshに10055ポートを使えるようにさせる(SELinux基本操作参照)
●SSHセキュリティ対策
不正なアタックが立て続けに行われた際、次のように設定することでアクセス元に制限を掛けることができる。
/etc/ssh/sshd_config編集
MaxStartups 10:30:100 ←#をとる。126行目
「MaxStartups」の項目は、認証されていない段階の接続をSSH デーモンが受け付ける確率を指定できます。 この指定は、不正なSSHアクセスが一度にたくさん行われる場合などに接続要求を拒否する手段としてで有効です。 上記のように記述した場合、10個までの接続要求を受け付け、これを超えると30%の確率で接続要求を拒否し、100個を超えるとすべて拒否するようになります。
編集後は、設定を反映させるためにsshd の再起動が必要です。
だが、現実的には、sshdの待ち受けポート番号をデフォルトの22番ではなく別な番号に変えてしまうだけで、不正なアクセスは解決する場合が多い。 sshd_configファイルで「Port 22」(コメントアウトされてる場合はデフォルトで22になる)となっているところを、ほかで使ってない番号(10000番台とか)に書き換えてsshdをrestartするだけ。
●linuxサーバーへの公開キー登録
キーの作成は、Windowsのputtyで行ったとする。SSHトンネル参照
公開キーputty_rsa.pubをlinuxサーバーにコピー。
これをopenSSHが使用可能な形式に変換する。(ここではputty.pub名で変換するとする。)
# ssh-keygen -i -f putty_rsa.pub > putty.pub
変換した公開キーをSSH接続したいユーザーの~/.ssh/authorized_keysファイルに登録する。(当然このユーザーはbashなどのログインシェルが必要。nologin等ではssh接続できない。ただし、winSCPの場合は、nologin等がログインシェルでもアクセスできる。)
ここではuser01に登録してみる。
# mkdir /home/user01/.ssh
# cat putty.pub >> /home/user01/.ssh/authorized_keys
# chmod 644 /home/user01/.ssh/authorized_keys
authorized_keysファイルには複数の公開キーを登録することができる。
.sshディレクトリの所有者をこのユーザーに。.ssh以下のファイルの所有者はrootでもよいようだ。
※トンネリング等、SSHの使用方法については、SSHトンネル参照
●SElinux
なにもしなくて大丈夫なようだが、もしアクセスできない場合(たとえばCentOS7などは次のように対処した)
permissiveモードにする.
# setenforce 0
この状態でSSHアクセスして、auditのログをとる。
ログから足りない部分を解析する。
# audit2allow -a -l -m mylocal
これを見ると、ポリシーnis_enabledをONにすればよいことがわかる。
# setsebool -P nis_enabled 1
# setenforce 1
TOP(HOME)へ