最近のクラウドサーバーは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
再起動しなくても保存した途端に有効です。