○ OpenSSHのインストール 4 Router

・クライアントからサーバへのSECUREな接続を目指します
・openssh-7.6p1のインストールと設定をします
・既存を削除し、オリジナルソースからインストールします
・公開鍵認証によるアクセスを基本とします
・make はメンテナンスマシンで行っています

・楕円曲線暗号モード(ECDH, ECDSA)のサポートが追加されています
・CentOS 6.9のopensslは(ECDH, ECDSA)をサポートしています

・6.7p1以降 --with-tcp-wrappersは無効です
・このサイトではfedoraのパッチを当てています

・7.2p1以降 ssh-keygen -Aオプションでは rsa1キーを作成しません
・rsa, dsa, ecdsa, ed25519 を作成します

・ソースの取得、削除は省略します
・エディタ、ファイラーの操作は省略します
・ソースを展開したら説明文を読みましょう
・Enterキーを省略します

・ログイン端末で "#" はroot、"$" は一般ユーザのプロンプトの記号です
・設定ファイルで "#" で始まる行はコメントとして解釈されます

○関連サイト

:openssh-7.6p1.tar.gz (http://www.openssh.org/)
:openssh-6.7p1-*-tcp-wrappers.patch (http://pkgs.fedoraproject.org/cgit/rpms/openssh.git/)

○参照ファイル

パッケージの追加
最初の設定 (Router)
opensslのインストール

○インストール環境

:OS CentOS 6.9
:selinux permissive
:インストール先  /usr/local/ (デフォルト)
:作業 ~/src
:言語 LANG=en_US.UTF-8
:ユーザー rootで実行

・メンテナンスの場合は一般ユーザから行います



○openssh-7.6p1

○opensshパッケージの削除・ユーザsshdの修正

・opensshは[Base System]でインストールされます
・ソースから入れるので削除します
・sshdユーザがないとinstallのときエラーがでます

[root@venus:~]
# service sshd stop
# rpm -e openssh openssh-clients openssh-server
# mv /etc/ssh /etc/ssh-OLD
# mkdir -p /var/empty/sshd
# usermod -d /var/empty/sshd -s /bin/false sshd

○ソースの展開・インストール

・rpmパッケージでインストールしたopensslを使う場合は
・--with-ssl-dirの設定を省略します (自動で設定します)
・ssh1はサポートされません(7.4p1以降)
・--with-tcp-wrappersは無効です(6.7p1以降)
・パッチを当ててlibwrapを組み込みます

# cd ~/src
[root@venus:~/src]
# tar zxvf openssh-7.6p1.tar.gz
# chown -R root:root openssh-7.6p1
# cd openssh-7.6p1
[root@venus:~/src/openssh-7.6p1]
# make distclean

・パッチを当てます (下記参照)
・パッチは上位のディレクトリに置きます

# patch -p1 < ../openssh-libwrap.patch

・configureスクリプトを再構成します

# autoreconf -fiv

・Makefileの作成
・CFLAGS="-O2 -march=i686 -mtune=atom" (CPU最適化オプション)
・該当しない場合は指定しない
・オプションは半角を入れて続けて記入した方が良い

# ./configure CFLAGS="-O2 -march=i686 -mtune=atom" \
--sysconfdir=/etc/ssh \
--localstatedir=/var \
--with-zlib \
--with-tcp-wrappers \
--with-libedit \
--with-ssl-dir=/usr/local \
--with-pam \
--with-privsep-path=/var/empty/sshd \
--with-md5-passwords \
--with-ipaddr-display

・コンパイル

# make

・インストール (アップデートは別項参照)

# make install

・デフォルトの設定ファイルを保存しておきます

# mkdir ~/src/ssh75p1
# cp -a {ssh_config,sshd_config} ~/src/ssh75p1

・pam用ファイルをコピーします
・redhat用を使います

# cd contrib/redhat
[root@venus:~/src/openssh-7.6p1/contrib/redhat]
# cp sshd.pam /etc/pam.d/sshd

# cd ~/src
[root@venus:~/src]
# tar jcvf openssh-7.6p1-rt-171010.tar.bz2 openssh-7.6p1/

openssh-libwrap.patch

・openssh-6.7p1-debian-restore-tcp-wrappers.patchをあてて差分をとっています

○アップデート

・新規インストールの場合は、次項へ進みます
・ソースの展開・コンパイルの表記は略します

・アップデート

# cd ~/src/openssh-7.6p1
[root@venus:~/src/openssh-7.6p1]
# make uninstall
# make install

・新旧の設定ファイルの差分を取り、設定ファイルを修正します
・ファイルの修正は略します

# mkdir ~/src/ssh76p1
# cp -a {ssh_config,sshd_config} ~/src/ssh76p1
# cd ~/src
[root@venus:~/src]
# diff -urp ssh75p1 ssh76p1

・selinuxの調整(有効の場合)

# restorecon -Rv /etc
# restorecon -Rv /usr/local

・再起動します

# service sshd restart

○pam認証ファイルを修正します

:/etc/pam.d/sshd

#%PAM-1.0
auth       include     system-auth
account    required    pam_nologin.so
account    include     system-auth
password   include     system-auth
session    include     system-auth

○sshd自動起動スクリプトを作ります

/etc/rc.d/init.d/sshd (別記)

○sshd_configファイルを修正します

/etc/ssh/sshd_config (別記)

・"Protocol2 PubkeyAuthentication"による認証を許可しています
・公開鍵認証のパスフレーズはローカルだけで使用されnet上を流れない
・suでrootになるためのパスワードはnet上を流れます
・rootログインの許可は、個人の判断でお願いします

○sshd_configのチェック

・テストモード、設定ファイルや鍵の正当性チェック

# sshd -t

・拡張テストモード。設定ファイルの正当性を検査し
・有効な設定項目を標準出力に表示したあと終了

# sshd -T

○tcp_wrappersで制御します

:/etc/hosts.allowに追加します

・tcp_wrappersで制御されるもので/etc/hosts.allowの既述以外は全て拒否されます

ALL: 127.0.0.1
sshd: ALL

:/etc/hosts.deny

ALL: ALL

○selinuxへの対応

:/etc/pam.d/sshd

・selinuxパッチを当てない場合

#%PAM-1.0
auth       include     system-auth
account    required    pam_nologin.so
account    include     system-auth
password   include     system-auth
session    required    pam_selinux.so close
session    required    pam_loginuid.so
session    required    pam_selinux.so open env_params
session    include     system-auth

:新規インストールファイルのselinuxラベルを修正

[root@venus:~]
# restorecon -Rv /etc
# restorecon -Rv /usr/local
# restorecon -Rv /var/empty
# restorecon -RFv /root/.ssh
# restorecon -RFv /home/user/.ssh

○自動起動スクリプトをonにし、sshdを起動します

# cd ~
[root@venus:~]
# chkconfig --add sshd
# service sshd start

○HOST公開鍵(ECDSA)の鍵指紋の確認

・最初の接続時にHOST公開鍵認証がおこなわれ、鍵指紋が表示されます
・6.8p1以降、鍵指紋表示にSHA256/base64が使われ、表示が変わります
・ssh-keygenで以前のMD5/hexで表示するには、-E md5 オプションを付けます
・ただし、表示にアルゴリズムMD5が追記されるので注意 色の部分
・-C オプションを付けて作成したので "no comment" になってます

# cd /etc/ssh
[root@venus:/etc/ssh]

・SHA256/base64での表示

# ssh-keygen -l -f ssh_host_ecdsa_key.pub
256 SHA256:eaUoCYbWHjjyjg8PyOuS4Mgj45FxQaU8diUiH0Hm/C8 no comment (ECDSA)

・MD5/hexでの表示

# ssh-keygen -l -E md5 -f ssh_host_ecdsa_key.pub
256 MD5:2c:68:6b:f4:e7:4e:b7:d2:43:6b:f5:2d:72:18:bd:cb no comment (ECDSA)

○iptablesの設定

Netfilter (iptables) で制御している場合、ポートを開けてください

Netfilter (iptables) の設定参照

・WAN側からはport722、LAN側からはport22で接続します




○クライアントとしての設定

:~/.ssh/config (ユーザごとの設定)

・"ForwardAgent"を有効にします
・ホスト認証に使われる鍵は、"HostKeyAlgorithms"で指定します
・CentOS7(openssh-6.x)クライアントでは、最初にecdsa-*が呼びだされます
・CentOS6(openssh-5.x)クライアントでは、最初にssh-rsaが呼びだされます

:CentOS7でssh-rsaを呼び出す場合

ForwardAgent yes
HostKeyAlgorithms ssh-rsa

:/etc/ssh/ssh_config(参考)

・Roamingの使用を無効にします
・7.1p2以降では設定が無効になってます
・CentOSの対応は確認して下さい

Host *
UseRoaming no

○環境変数の受け渡し (参考)

・環境変数の受け渡しがサポートされているのはプロトコル バージョン 2 のみです
・クライアント側の SendEnv (ssh_config) で送信する変数を設定します
・サーバ側の AcceptEnv (sshd_config) で受信する変数を設定します

:ssh_config

Host *
# Send locale-related environment variables
SendEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
SendEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
SendEnv LC_IDENTIFICATION LC_ALL LANGUAGE
SendEnv XMODIFIERS

:sshd_config

# 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

○ Copyright(c) 528p.com All Rights Reserved.