Debian 9.3でIPv6無効化・SSH設定 (Linux自作PC 7)
当サイトではアフィリエイト広告を利用しています
Debian 9.3 Stretchが入ったディープラーニング用マシンでネットワーク設定を行います。
本記事ではメインPCからの操作に必要となるsshの設定とIPv6の無効化を行います。
前回の続きです。
ipアドレスの固定
我が家のLAN環境ではIPアドレスはルーターからDHCPで割り当てています。ここでは、この割り当てアドレスを固定します。
設定などはルーター準拠になるでしょうが、その際必要な情報(MACアドレスなど)は次のコマンドで調べることができます。
$ ip addr show
link/etherの直後のアドレスがMACアドレスに対応します。
今回はこのMACアドレスを使って、DHCPサーバー側で割り当てIPを固定化しました。
ipv6の無効化
LAN環境においてはIPv6は不要と思われるので無効化しておきます。 次のリンク先を参考に設定を行います。
sysctl.confの設定(単品では失敗)
/etc/sysctl.conf
の最終行に次を追加します。
net.ipv6.conf.all.disable_ipv6 = 1
内容を反映し、IPv6が無効となっているか確認します。
$ sudo sysctl -p
$ sudo ip addr show
ただ、sysctlを使えばipv6は無効になるものの、 再起動すると再度ipv6のアドレスが有効になってしまっています。 再度sysctlを使えばいいのですが、起動のたびに手動で行うのは手間なので別の方法で調整します。
sysctl.d/xxx.confの設定(単品では失敗)
参考ページにあったMethod 2を試してみます。
/etc/sysctl.d/disable-ipv6.conf
というファイルを新規に作成し、次の1行を記入します。
net.ipv6.conf.all.disable_ipv6 = 1
そして反映と確認を行います。
$ sudo sysctl -p -f /etc/sysctl.d/disable-ipv6.conf
$ sido ip addr show
こちらもダメでした。手動で読み込んだ際には設定は反映されるものの、読み込まないとipv6が有効になったままとなっています。
このディレクトリには/etc/sysctl.d/99-sysctl.conf
が存在しますが、これはsysctl.conf
へのシンボリックリンクであるため、やっていることは先に行ったものと同じでした。
原因調査
sysctl設定の上書き
原因がよくわかりませんがひとまず調査を行い、CentOSで似たような事例にあっている人を確認しました。 Tunedのようにsysctrlを上書きするサービスが存在するようです。 ただ、私の環境ではTunedはなかったので別のサービスが上書きしている可能性がある模様です。
PC起動後、sysctlのサービスの軌道状況を確認してみると、activeになっており、起動自体は行えています。
$ sudo systemctl status systemd-sysctl.service
この状況で再度サービスを再開してみます。
sudo systemctl restart systemd-sysctl.service
すると、ipv6無効になっていることが確認できました。 別のサービスがsysctl.confの読み込みを行っているのがほぼ確定とみてよいでしょう。
上記はラズパイで同様のケースと思われるものです。sysctl.confはboot時に読み込まれるのですが、kernelがipv6のモジュールをそのあとに読み込んでいるのではないか、という話でした。
sysctlの再読み込みによる対処
この状況の対処方法として、モジュールの読み込みが一通り終わった後に再度sysctlコマンドを実行することにします。
service登録してあれこれやるのは面倒なので、rc.localを使って実行させます。
ディレクトリは消えているものの、c.localを実行可能にしていたら自動実行が可能となっています。
$ sudo systemctl status rc-local
でサービスの状況を確認可能で、/lib/systemd/system/rc-local.service
が本体みたいです。
$ sudo vim /etc/rc.local
$ sudo chomod +x /etc/rc.local
$ sudo systemctl start rc-local
$ sudo systemctl status rc-local
上記コマンドで/etc/rc.local
を新規作成し、次のような記述を行います。
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# restart systemctl for reload settings (disable ipv6 etc)
# sudo systemctl restart systemd-sysctl.service # final way
sysctl -p -f /etc/sysctl.d/disable-ipv6.conf
exit 0
これで起動時にipv6が無効となっていることが確認できましたた。 大分手間取りましたが、SSHの設定に移ります。
sshの設定
/etc/ssh/sshd_config
を編集して、次の内容を追加します。
Port xxxx
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
Match Address 192.168.0.*
PasswordAuthentication yes
Allowsers xxxx
内容としては、sshログインのPortを変更、rootログイン禁止、パスワード認証禁止(公開鍵のみ)、特定ユーザーのみログイン許可といった内容の他、 IPアドレス照合を行ってローカルの特定ユーザーのみログイン可能にします。 なお、ローカルだとパスワード認証でもOKになっていますが、気にされる方はここも公開鍵のみとしておくのがよいでしょう。
これらの編集後、サービスを再起動します。
$ sudo systemctl restart ssh
いまさらですが自動起動のOnOffは次のsystemctlコマンドのオプション指定で行えます。
$ sudo systemctl enable sshd
$ sudo systemctl status sshd
$ sudo systemctl disable sshd
参考にさせて頂いたサイトは以下のページとなります。
今後
まだネットワーク設定はこれで終わりません。
次回以降も引き続きFireWallなどの設定を行っていきます。