実践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)へ

目 次
HOME
 全体のシステム構成&目次


RockyLinux

RockyLinux8.4のインストール

旧サーバーからのデータ移行

ネットワークの設定ほか
ダイレクトルールを使ったfirewallの強化
DNS(BIND)サーバー
DHCPサーバー
FTPサーバー
FTPS(FTP over SSL/TLS)
Webサーバー
  アクセス解析ツールAwstats
Mail(Dovecot&Postfix)サーバー
MariaDB(MySQL)サーバー
SSHサーバー
SSHトンネル
SSH+MariaDB+Exel
Sambaサーバー
openVPNサーバー
VNCサーバー(リモートディスクトップ)

systemdとfirewalldについて


CentOS8
CentOS7
CentOS5〜6

SELinux

Cプログラミング


●その他
クラウド Amazon EC2
Raspberry Piで遊ぶ
印刷機関連開発
 刷版絵柄面積率測定
 Indesign上にPDF自動配置
数独をExcelで解く


●趣味の世界
相対性理論
量子力学
群論
熱力学・統計力学
解析力学
物理でつかう数学
超弦理論(ノート作成中)


ブログサイトはこちらより