とある学生の技術Blog

半分くらい自分の備忘録として…

Linuxによる自宅サーバの構築3 - OpenSSHで外部からリモートログインできるようにする

自宅サーバを立てた時の手順を解説しています。
今回はCentOSの初期設定とsshの設定までを紹介しています。

前回の記事

bit.ly

sshでログイン

まず前回のようにsshでログインします。そしてこの接続は作業を終えるまで終了しないように気をつけてください。

既存のsshサーバのアンインストール

既存のsshサーバと新しくインストールするOpenSSHが重複してしまうので一度sshサーバをアンインストールします。

# systemctl stop sshd.service
# yum -y remove openssh

OpenSSHサーバのインストール

最新版をダウンロードし、RPMパッケージを作ってインストールします。 最新版の確認はここからwgetのURLは最新版のファイル名に応じて変更してください。

# yum -y install pam-devel
# yum -y install openssl-devel
# yum -y install krb5-devel
# yum -y install tcp_wrappers-devel
# wget http://ftp.jaist.ac.jp/pub/OpenBSD/OpenSSH/portable/openssh-6.8p1.tar.gz
# tar zxvf openssh-6.8p1.tar.gz

次に設定を変更します。

# vi openssh-6.8p1/contrib/redhat/openssh.spec

%no_x11_askpass 0、%define no_gnome_askpass 0を次のように変更します。

%no_x11_askpass 1
%define no_gnome_askpass 1

redhat以外のディレクトリを削除します。

# rm -rf openssh-6.8p1/contrib/aix/
# rm -rf openssh-6.8p1/contrib/hpux/
# rm -rf openssh-6.8p1/contrib/caldera/
# rm -rf openssh-6.8p1/contrib/suse/
# rm -rf openssh-6.8p1/contrib/cygwin/
# rm -rf openssh-6.8p1/contrib/solaris/

圧縮をします。

# tar czvf openssh-6.8p1.tar.gz openssh-6.8p1/
# rm -rf openssh-6.8p1

パッケージを作り、インストールします。
書き込み完了と表示されているパスがパッケージの場所です。
これを元にインストールします。

# rpmbuild -tb --clean openssh-6.8p1.tar.gz
書き込み完了: /root/rpmbuild/RPMS/x86_64/openssh-6.8p1-1.x86_64.rpm
書き込み完了: /root/rpmbuild/RPMS/x86_64/openssh-clients-6.8p1-1.x86_64.rpm
書き込み完了: /root/rpmbuild/RPMS/x86_64/openssh-server-6.8p1-1.x86_64.rpm
書き込み完了: /root/rpmbuild/RPMS/x86_64/openssh-debuginfo-6.8p1-1.x86_64.rpm

# rpm -Uvh /root/rpmbuild/RPMS/x86_64/openssh-6.8p1-1.x86_64.rpm
# rpm -Uvh /root/rpmbuild/RPMS/x86_64/openssh-clients-6.8p1-1.x86_64.rpm
# rpm -Uvh /root/rpmbuild/RPMS/x86_64/openssh-server-6.8p1-1.x86_64.rpm
# rpm -Uvh /root/rpmbuild/RPMS/x86_64/openssh-debuginfo-6.8p1-1.x86_64.rpm

# rm -f /root/rpmbuild/RPMS/x86_64/openssh-*
# rm -f openssh-6.8p1.tar.gz

iptablesのインストール

使い慣れているiptablesをインストールし、ファイアーウォールとします。
代わりに現在動いているfirewalldを停止します。

# yum install iptables-services
# systemctl stop firewalld
# systemctl disable firewalld
# systemctl enable iptables
# systemctl start iptables

ポートを許可する設定をします。

# vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2022 -j ACCEPT

再起動します。

# systemctl restart iptables

ポートの開放

ssh接続に使用するポートの開放を行います。初期設定の22番ポートは狙われやすいので番号を変更します。
自分の場合は2022番ポートに変更しました。 今回はOCNの場合で説明します。他のプロバイダの場合は公式サイトを見ると詳細な情報が記載されていると思います。
まず、ルーターの設定を開きます。次に左のメニューからIPマスカレードを選びます。 f:id:t-0731:20150627005656p:plain 右の編集をクリックし、以下のように入力します。IPやポートは環境に合わせて変更してください。 f:id:t-0731:20150627005753p:plain 完了したら、左の有効化チェックボックスチェックを入れて設定ボタンをクリックします。 f:id:t-0731:20150627005916p:plain 次に静的NATの設定をします。同じように左のメニューから選びます。 以下のように入力します。 f:id:t-0731:20150627010029p:plain

SELinuxの設定

SELinuxの変更をします。まずpolicycoreutils-pythonをインストールします。

# yum install policycoreutils-python

次にsshで使うポートの設定をします。

# semanage port -at ssh_port_t -p tcp 2022

確認するには以下のようにコマンドを叩きます。

# semanage port -l | grep ssh_port_t

sshdの設定

まずsshd_configを開きます。

vi /etc/ssh/sshd_config

そうしたら#Port 22の#を削除し、22を置き換えます。

Port 2022

chrootの設定をします。

Match Group *, !wheel
        ChrootDirectory /home/%u/./

再起動をします。

# systemctl restart sshd.services

sshのアクセス制限設定

許可した通信だけ受け入れます。

# vi /etc/hosts.allow

sshd:127.0.0.1
sshd:192.168.1.
sshd:example.net

また、すべての通信を拒否することでallowの設定が優先されるためホワイトリストになります。

# vi /etc/hosts.deny

sshd: ALL

公開鍵認証の設定

設定が消えてしまっているので再設定をします。 設定自体は前回の記事と全く同じなのでそちらを参照してください。

おすすめの参考書

自宅サーバの勉強においてとても参考になった1冊です。