CentOS7 SSHサーバーの設定 (丁寧にやる)

2017.9.12 (火)

最近のクラウドサーバーはSSHのコンソールが管理画面にあったりするのでよいですね。SSH接続できなくなったからといってデータセンターに行くことももうないです。

設定の前にサーバーの通信を遮断しているものを全部フリーにしておく。

SSHの設定の切り分けのためにサーバーにデフォルトで設定してあるファイヤーウォールなどは予めすべて切りにしておきましょう。セキュリティ・ポリシーはその後丁寧に設定しましょう。
で、最初にこれらは全部切りにしておく。

  • SULinux
  • iptables
  • Firewall (CentOS7からの新種)
  • hosts.allow/hosts.deny
SULinux
vi /etc/selinux/config
SELINUX=disabled
(*1)サーバー再起動必要
iptables
systemctl stop iptables
firewall
systemctl stop firewall.service
hosts.allow / hosts.deny
all:all
(*1)サーバー再起動不要

SSHの設定

かならず別のルートで設定できるようにしましょう。端末から2つSSH接続していれば、片方がログインしている限り一応セッションは続きます。
設定ポリシーは、

  • portは22以外にしておく。(実際セキュリティー上どうでもいいことだけど、何故かセキュリティ診断会社から指摘を受ける。意味不明)
  • rootのパスワードログインは禁止。rootでログインできるのはIP制限化の鍵認証のみ。
  • 一般ユーザーは鍵認証が好ましいが現実的に鍵を知らない人おおすぎるので、パスワード認証+IP制限。
    (*2)つまりIP制限化でしかSSHを使わない。

/etc/ssh/sshd_confの設定

cd /etc/ssh/
cp -p sshd_config sshd_config.org
vi sshd_config

設定はこれだけ。

Port 3949
ListenAddress 0.0.0.0
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
SyslogFacility AUTHPRIV
PermitRootLogin yes
PubkeyAuthentication yes
AuthorizedKeysFile  .ssh/authorized_keys
PasswordAuthentication no
ChallengeResponseAuthentication no
GSSAPIAuthentication no
GSSAPICleanupCredentials no
UsePAM yes
X11Forwarding no
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem   sftp    /usr/libexec/openssh/sftp-server

UsePAMはnoにしたい。たぶんした方がいい。でもできない。
再起動

systemctl restart sshd

hosts.allow hosts.denyの設定

ICP/IP層なので、結構下層で制限かけてくれるので安心です。

# etc/hosts.allow
sshd: 123.456.789.000
# etc/hosts.allow
All:All

再起動しなくても保存した途端に有効です。