SSH
centos7

CentOS7のセキュアなsshd設定

More than 1 year has passed since last update.

はじめに

sshdの設定にフォーカスして、まとめたいと思いました。
要件によりますが、ローカルネットワーク上の運用であれば、sshdの設定はこれで十分良いのではないかと思います。
前提としては、上位にルーターがあり、外部からssh接続はできないようになっています。
VPSなどで使う場合、ブルートフォースアタック対策、umask変更、sudoの変更、logwatchなんかも入れたいです。

設定作業中の注意

sshで接続します。以後の作業を行っている間は、ログアウトしないように気をつけます。
誤ってログアウトしてしまい、接続できないとコンソールログインが必要になってしまいます。

SELinuxの設定(有効にしている場合)

sshポートを2234に変更するので、SELinuxの設定にポートを加えておきます。SELinuxは有効にしましょう。

shell
[root@localhost ~]# yum install policycoreutils-python
[root@localhost ~]# semanage port -a -t ssh_port_t -p tcp 2234
[root@localhost ~]# semanage port -l| grep ssh
ssh_port_t                     tcp      2234, 22

sshd_configの編集

意図を明示するために、デフォルトがnoの設定もあえて記載しています。

/etc/ssh/sshd_config
#       $OpenBSD: sshd_config,v 1.90 2013/05/16 04:09:14 dtucker Exp $

# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/local/bin:/usr/bin

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
Port 2234 # Port変更
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

# The default requires explicit activation of protocol 1
Protocol 2 # 使用するプロトコルを ssh version 2 に限定

# HostKey for protocol version 1
#HostKey /etc/ssh/ssh_host_key
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key

# Lifetime and size of ephemeral version 1 server key
#KeyRegenerationInterval 1h
#ServerKeyBits 1024

# Ciphers and keying
#RekeyLimit default none

# Logging
# obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
SyslogFacility AUTHPRIV
#LogLevel INFO

# Authentication:

LoginGraceTime 30 # 認証までの猶予時間
PermitRootLogin no
#StrictModes yes
MaxAuthTries 6 # 試行回数
#MaxSessions 10

RSAAuthentication no # RSA認証を禁止
PubkeyAuthentication yes # 公開鍵認証を許可

# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile      .ssh/authorized_keys

#AuthorizedPrincipalsFile none

#AuthorizedKeysCommand none
#AuthorizedKeysCommandUser nobody

# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#RhostsRSAAuthentication no
# similar for protocol version 2
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# RhostsRSAAuthentication and HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes

# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication no # パスワード認証を禁止
PermitEmptyPasswords no # パスワードなしログインを禁止

# Change to no to disable s/key passwords
ChallengeResponseAuthentication no # チャレンジレスポンス認証を禁止

# Kerberos options
KerberosAuthentication no  # ケルベロス認証を禁止

# GSSAPI options
GSSAPIAuthentication no # GSSAPI認証を禁止

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
# WARNING: 'UsePAM no' is not supported in Red Hat Enterprise Linux and may cause several
# problems.
UsePAM #PAMを無効化

# X11転送を禁止
X11Forwarding no

# 受信用の子プロセスを作りroot権限を分離
UsePrivilegeSeparation sandbox

# バナー非表示
Banner none

# Accept locale-related environment variables
#サーバー側へ環境変数を渡したくないので全てコメントアウトする
#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

# rootログインを禁止
PermitRootLogin no

# 特定ユーザのみログイン許可
AllowUsers foo piyo hoge

sshdを再起動します。

shell
[root@localhost ~]# systemctl restart sshd

補足

PAMをnoにしていると、/var/log/messagesにこんなログが出ます。
問題が発生したときは、yesにして様子を見ると良いかもしれません。

/var/log/messages
Apr 30 17:18:45 fifer sshd[310]: WARNING: 'UsePAM no' is not supported in Red Hat Enterprise Linux and may cause several problems.

firewalldの設定

ポート2234のsshdを「ssh-alt」というサービスとして登録するため、以下のファイルを作っておきます。
2234番ポートを直で設定することもできますが、--list-allなどしたときに、ポートを開放した意図が分かるようにしておきます。

/etc/firewalld/services/ssh-alt.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>SSH</short>
  <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
  <port protocol="tcp" port="2234"/>
</service>

「ssh-alt」をfirewalldに適用します。

shell
[root@localhost ~]# firewall-cmd --add-service=ssh-alt --zone=public #設定反映
[root@localhost ~]# firewall-cmd --add-service=ssh-alt --zone=public --permanent #永続化

念のためにfirewalldをリロードし、設定を確認します。

shell
[root@localhost ~]# firewall-cmd --reload
[root@localhost ~]# firewall-cmd --list-all
public (default, active)
  interfaces: eth0
  sources:
  services: ssh-alt
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

ここまでできたら、

  • port=22でssh接続できないこと
  • port=2234でssh接続できること

を確認します。

その他

[未確認]sshdの接続元を制御したい場合

いまのところ、外側のルーターで制御しているため、CentOSでは接続元の設定をしていません。
環境もすぐに用意できないので、試していないのですが、こんな方法でできないだろうか?と思います。

/etc/hosts.deny
sshd : all
/etc/hosts.allow
# このマシンが存在するローカルネットワークのみ許可
sshd : 192.168.0.

[未確認]ブルートフォースアタック対策

入れると幸せに慣れると思います。

今後

  • 上記の[未確認]をまとめる
  • その他sshd以外についても、セキュアな設定を別記事などにまとめる

参照したサイト