CentOS 8 で ssh ポートを変更

Cent OS 8 は firewall-cmd , SeLinux など高度なセキュリティを持っているのですが、よくあるブログの解説では 停止させる。とかして問題を回避しています。
もちろんこれらの動作を止めることなく活用して ssh ポートを変更していきます。

まずはssh サーバーの設定ファイル /etc/ssh/sshd_config を編集します。

# 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 xxxx <--- ここに好みのポート番号を記述
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

もしこの状態で “sudo systemctl restart sshd.service” を実行すれば

● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset:
 enabled)
   Active: activating (auto-restart) (Result: exit-code) since Sat 2019-12-07 20
:37:23 EST; 33s ago
     Docs: man:sshd(8)
           man:sshd_config(5)
  Process: 3016 ExecStart=/usr/sbin/sshd -D $OPTIONS $CRYPTO_POLICY (code=exited
, status=255)
 Main PID: 3016 (code=exited, status=255)

Dec 07 20:37:23 red systemd[1]: sshd.service: Failed with result 'exit-code'.
Dec 07 20:37:23 red systemd[1]: Failed to start OpenSSH server daemon.

こんな感じのエラーがでます。

ここで2つのことを実行します。

  1. ssh service の再定義
  2. selinuxを設定

Step1: /usr/lib/firewalld/services/ssh.xml を編集します。

<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="xxx"/>  <--- xxx を好みのポート番号に変更
</service>

Step 2: 以下のコマンドを実行

# semanage port -a -t ssh_port_t -p tcp xxxx  <--- xxx を好みのポート番号に変更

設定を確認して再起動すれば完了!!

Let’s Encryptで無料のSSL

Ubuntu にセットアップ

既にapache2 でサイトがUbuntu/Debian Apache2の標準的な設定で構築されていることが前提です。
Ubuntu 18.04 には 標準のリポジトリーでCertbotパッケージが用意されており非常に簡単にセットアップできます。
まずはパッケージをインストール

$ sudo apt install letsencrypt python-certbot-apache

続いてrewriteモジュールをroot権限で有効化します。(WordPressでも使用されています)

# a2enmod rewrite

このあとに証明書をインストールしていきます。インストールするホスト名を選択し質問に答えるだけで完了します。

# certbot run --apache --dialog

これが終わればApache2の再起動です。

# systemctl restart apache2.service

このコマンドでサーバー上の全てのサイトの証明書が更新されます。

# certbot renew --post-hook "systemctl restart apache2.service"

crontabの月単位の実行で、証明書の期限を自動的にアップデートできるようにしましょう。スクリプト名は letsencrypt とします。ファイルの内容は

#!/bin/sh

# update (renew) cert.
/usr/bin/certbot renew --post-hook "systemctl restart apache2.service" 

このシェルスクリプト、 letsencrypt を実行権限を付けて/etc/cron.monthly/ に置けば完成!!

# chmod +x letsencrypt
# mv letsencrypt /etc/cron.monthly/

Ubuntu で DS-Lite ルーター

ファンレス PC Ubuntu 18.04 で超高速 DS-Lite(RFC6333) ルーター


これ実測です(^-^) 930Mbps 驚き!。

 

機器性能など

上記の画像の実際に使用した計測サイト は  https://fast.com/ja/ でこの数字は Intel Pentium 3805U 搭載の ファンレスPC に Ubuntu 18.04.3 上に DS-Lite 設定をしたルーターに有線接続したデスクトップPCでIPv6接続での最高数値です。LANにはクライアント機器10台以上やNASなどが接続されています。試験的に同時刻にMac Air i7、これだけをWiFi(866Mbps)に接続して計測した結果は、半分以下の 下り390Mbps – 上り330Mbps。やはり安めのWiFiルーターを通すと、この程度しか出ないようです。少し、NFSでの速度計測を利用してCPUによる速度の違いを実験しましたので暇があれば御覧ください。
IPv4ではトンネリング経由だけでなくIPv4網自身も混雑していますので過度な期待はしないで下さい。それでも speedtest.netで計測した値は下り793.92Mbps 上り 439.64MbpsとPPPoEと違いは歴然です。
ちなみに下記のネットワーク図のIPv4だけのPPPoEルーター (白い部分 Celeron J1900 4 LAN)で、300Mbps前後のスループットが出ています。 ルーターをはじめとしたネットワーク機器でかなりの性能差は出ます。実際にRaspberry PIにインストールされたものはcpu稼働率100%で30Mbpsのスループットだという記事がありました。しかし日本のブロガー達の 速度計測の2桁の値はRaspberry PI並のパワーのルーターを使用しているのでしょうか?

ルーター設定手順

  1. ZOOT NATIVEの申し込み
    ネットからの申込で最大2ヶ月無料で、途中で解約しても違約金などは一切ない。
    このようなプロバイダーはまれで最近はクレジットカードのみだとか制限だけしてユーザーだけにリスクを負わせる。という事は全くなくかなり好感がもてます!
    申し込みはこのリンクからも可能です。
  2. インターフェース設定 (Netplanかifupdown かを選択)
    ZOOT NATIVE の接続は NGN(NTT IPv6網)に接続してIPv6の場合は直接WANに繋がりますが、IPv4にはip4ip6(ipip6)トンネリングで繋がります。Ubuntu 18.04では標準となったnetplanですがリリース直後のイメージからインストールしてアップデートしていなくてnetplan 0.95未満ではipip6のサポートはありません。セキュリティー面からも必ずアップデートしてください。
    netplanによる方法  お勧め!
    ifupdownによる方法
  3. ufwの設定
  4. DNS(unbound)をインストール
  5. DHCP RAなどの設定

 

ネットワーク図


クリックで拡大
 今回、作成する機器はブルーのDS-Liteルーターです。

x86_64のルーターを使用する理由
一部のサイトでは速度があまり上がらないという話がありますが、実際に使用しているルーターのパフォーマンスだけでなくネットワーク設計によりかなり違います。特に¥40,000以下の安価なWiFiルーターの脆弱なMPU使用した機器の性能やそれに繋がれたスマートフォンの様な重いGUI機器ではもちろん数百MBpsの速度はでないことは明らかです。そのおかげでマンションタイプのギガネットでも500MBPS程度以上のパフォーマンスは出ていているので、ネット混雑にはなりにくいため、ある意味 助けられているのかもしれません。昨今、自分でサーバーも設定せずに何処ぞのブログサイトで技術云々を語っている多数の方々には理解不能かもしれませんが・・・
ちなみに瞬間最大速度ではなく多数のタスクを処理できないと安定して高速はできません。
実際、Unnumberで市販で¥10,000程度の無線LANルーターを使ってギガビットLANで接続された機器より100MBPSのFTTHで性能の良いルーターを使用した機器の方がより高速で安定したものになるでしょう。
ちなみにルーターを作成するのですから当然LANポート、ネットワークデバイスは2つ以上必要です。


Netplanを使ったIPアドレスとトンネリング

IPv6のアドレスとgateway(IPv6)

NTT IPv6網(NGN)からRAでIPアドレスが設定されます。ひかり電話ルーター(HGW)がある場合はIPv6パススルーに設定するか、ONUに直接接続します。スループットはONUに直接接続したほうが良いでしょう。
Ubuntu 18.04.3のインストールされたものにNGNを接続するして “ip -6 address show” コマンドを実行すれば次のように表示されます。
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN qlen 1000
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
    inet6 2409:cafe:dead:feed:2e6:4cff:fe68:a27/64 scope global dynamic mngtmpaddr noprefixroute   <- これがIPv6 Wan側 IP
       valid_lft 2591986sec preferred_lft 604786sec
    inet6 fe80::2e6:4cff:fe68:a27/64 scope link 
       valid_lft forever preferred_lft forever
3: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
    inet6 fe80::2e6:4cff:fe68:a26/64 scope link 
       valid_lft forever preferred_lft forever
この例の場合は 2409:cafe:dead:feed:2e6:4cff:fefe:cead がIPv6グローバルIPになります。もし 2409:cafe:dead:feed::1 のような判りやすいIPにしたければ traceroute6 google.com を実行してIPv6側のgatewayを調べて記述できます。

netplan yamlファイルの設定

ルーターを作成するにはUbuntuサーバー版が良いのでNetworkmanager を使わない時のサンプルです。
通常、/etc/netplan/50-cloud-init.yaml 編集します。

network:
  ethernets:
    enp1s0:
# RAで割当られたグローバルIP使用する場合は記述しない
      accept-ra: no

# RA割当られたグローバルIPを書く場合はこの2行だけでOK
      dhcp4: no
      dhcp6: no

# グローバルIPを固定化する場合(上記の様にgatewayを確認した上で記述)
      addresses:
        - 2409:cafe:dead:feed::801/64
      gateway6: 2409:cafe:dead:feed::fffe
# RA割当られたグローバルIPを書く場合は記述不要

# LAN 側
    enp2s0:
      accept-ra: no
      addresses:
        - 192.168.1.1/24
        - fd00:cafe::1/64
#if use static route
      routes:
        - to: 10.0.0.0/8
          via: 192.168.1.254
          on-link: true
        - to: 4.3.2.1/32
          via: 192.168.1.254
          on-link: true
       nameservers:
        addresses:
          - fd00:cafe::80a
          - 192.168.1.11
        search:
          - ntools.net

  tunnels:
    ip6tnl1:
      mode: ipip6
#NTT 東日本の場合
      remote: 2404:8e00::feed:100
#NTT 西日本の場合
      remote: 2404:8e01::feed:100
#上記どちらかを記述
#
# グローバルIPを記述
      local: 2409:cafe:dead:feed:2e6:4cff:fefe:cead
      routes:
        - to: 0.0.0.0/0
          scope: link
 version: 2

ifupdown での設定

この設定では netplan.io は使用しません。 新たにサーバー版 Ubuntu 18.04.3 をインストールした場合は ifupdown を apt install ifupdown でインストールする必要があり、systemd-networkd 等をdisable する必要があります。新規にインストールした場合はnetplanで行う事をお勧めします。

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface for connecting to ONU
auto enp1s0
iface enp1s0 inet manual
auto enp2s0
iface enp2s0 inet static
  address 192.168.1.1
  network 192.168.1.0
  netmask 255.255.255.0
  broadcast 192.168.1.255
  dns-nameservers 192.168.1.1
  dns-search ntools.net

iface enp2s0 inet6 static
  address fd00:cafe::14   // Your specified
  netmask 64

#if use static route
post-up ip route add 192.168.11.0/24 via 192.168.1.254 dev enp2s0

 

netplanを使用する場合は不要です!

DS-Liteでのトンネル工事

/etc/rc.local に保存します。
NTTが東日本、西日本でREMOTEが異なるのでどちらかのコメント(#)を消してください。
また イーサーネットデバイスは enp1s0 をONUに接続されたデバイスに適時、変更して下さい。
この部分は本来、networkd の管轄で /etc/systemd/network/ 以下のファイルにデバイス、ネットワーク定義を書くことが出来るはずなのですが どうも ip4ip6 ipip6 mode のトンネリングサポートが無いようなのでシェルスクリプトで実現させました。

#!/bin/sh

#case NTT East 東日本
#REMOTE='2404:8e00::feed:100'
#case NTT West 西日本
#REMOTE='2404:8e01::feed:100'
NETDEV='enp1s0'

for i in $(seq 0 9); do
 LOCAL=`ip -6 addr show $NETDEV scope global |grep inet6 | awk '{print $2}' | awk '{sub("/.*", ""); print $0}'`
 if [ $LOCAL != '' ]; then
   break
 fi
 sleep 1
done

ip -6 tunnel add ip6tnl1 mode ip4ip6 remote $REMOTE local $LOCAL dev $NETDEV
ip link set dev ip6tnl1 up

# IPv4 routing
route delete default
route add default dev ip6tnl1

 

Unbound インストール

別途ネームサーバーがあれば不要ですが、DS-Liteではダイナミックに通知されるので設定するのがお勧め。

sudo apt install unbound

unbound の設定ファイルは /etc/unbound/unbound.conf.d/unbound-local.conf で、編集は好みのエディターで以下の様なものがサンプルになります。設定は interface: に自分のIPアドレスをIPv4、IPv6 それぞれ設定すればOKです。
また、アクセスを許可する ネットアドレスを access-control: で設定します。下記のサンプルは、allow すなわち許可範囲で deny 禁止も可能です。Unboundに関しては日本Unboundユーザー会に詳しく解説されています。

server:
    interface: 127.0.0.1
    interface: 192.168.1.1
    interface: fd00:cafe::1
    interface: 2409:250::1fb
    access-control: 2409:250::/64 allow
    access-control: fd00:cafe::/64 allow
    access-control: 192.168.1.0/24 allow

 

ufw の設定

ufw 設定と言っても中身はiptables の設定で、Masquarade でLANとWANとの接続を行ったり、サービスを開放します。

forwarding 設定

/etc/sysctl.conf のエディト。28行目のコメントを解除。

# Uncomment the next line to enable packet forwarding for IPv4
#net.ipv4.ip_forward=1 ↓ net.ipv4.ip_forward=1

/etc/default/ufw のエディト。19行目を編集。

# Set the default forward policy to ACCEPT, DROP or REJECT.  Please note that
# if you change this you will most likely want to adjust your rules
DEFAULT_FORWARD_POLICY="Drop"
       ↓
DEFAULT_FORWARD_POLICY="ACCEPT"

/etc/ufw/before.rules のエディト。はじめにMasquaradeを記述

#
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
#   ufw-before-input
#   ufw-before-output
#   ufw-before-forward
#

# Masquarade ここから
*nat
:POSTROUTING ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
-A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
COMMIT
# don't delete the 'COMMIT' line or these rules won't be processed
# ここまで追加

# Don't delete these required lines, otherwise there will be errors
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]

以下のコマンドを実行してLAN側からのアクセスをすべて許可(外部からは不可)

ufw allow from 192.168.1.0/24
ufw allow from fd00:cafe::1
ufw allow from 2409:250::/64

 

DHCP RAなどの設定

Ubuntu 18.04 パッケージでDHPCP サーバーの isc-dhcp-serverは、IPv4,IPv6双方に対応しており、設定も簡単で特に問題はない。ただし。IPV6のルーティング情報などはこれだけでは不十分でRAもLAN側に流すことが必要になるようでインストールは、DHCP IPv4用と IPv6向けRA割り振り用として radvd 双方をすることをお勧めする。

apt install isc-dhcp-server radvd

isc-dhcp-serverの設定

/etc/dhcp/dhcpd.conf の編集。最後に追加。このルーターの LAN側 IPは 192.168.1.1 fd00:cafe::1 に設定されるようにサンプルは書いています。

# A slightly different configuration for an internal subnet.
subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.144 192.168.1.191;
  option domain-name-servers 192.168.1.1;
  option domain-name "your-domain";
  option routers 192.168.1.1;
  option broadcast-address 192.168.1.255;
  default-lease-time 3600;
  max-lease-time 7200;
}

 

radvdの設定

/etc/radvd.conf の編集。

interface enp2s0 {
  AdvSendAdvert on;
  MinRtrAdvInterval 3;
  MaxRtrAdvInterval 10;
  AdvOtherConfigFlag on;

  prefix fd00:cafe::4000/64 {
    AdvOnLink on;
    AdvAutonomous on;
    AdvRouterAddr on;
  };
}

内容は、IPアドレスなどを使用環境に応じて変更して下さい。

/etc/sysctl.conf の編集

# Uncomment the next line to enable packet forwarding for IPv6
#  Enabling this option disables Stateless Address Autoconfiguration
#  based on Router Advertisements for this host
net.ipv6.conf.all.forwarding=1 # 33行目 コメントアウト
net.ipv6.conf.default.forwarding = 1 # 追加


###################################################################
# Additional settings - these settings can improve the network
# security of the host and prevent against some network attacks
# including spoofing attacks and man in the middle attacks through


最後に追加

###################################################################
# Protected links
#
# Protects against creating or following links under certain conditions
# Debian kernels have both set to 1 (restricted)
# See https://www.kernel.org/doc/Documentation/sysctl/fs.txt
#fs.protected_hardlinks=0
#fs.protected_symlinks=0
# ここから追加
# ipv6 RA
#net.ipv6.conf.all.accept_ra = 1
net.ipv6.conf.enp1s0.accept_ra = 2
net.ipv6.conf.enp1s0.accept_ra_pinfo = 1
net.ipv6.conf.enp1s0.autoconf = 1

 

使用感など

さすがに日本のネット環境は素晴らしいというのが感想で、実際に100Mbps を超える環境を使用できる国は少ない。海外生活が長い自身の感想がこれです! またモバイル環境などの瞬間最大速度ではなく、タスク配分もCiscoやヤマハの高額ルーター性能が手軽に作れるのが嬉しい限りです。
用途として固定IPはPPPoEが主流なので今後も使用していきたいのですが、ワークステーションやOSのダウンロードやアップデートの経路にIPoEのZOOT NATIVEの活用はなかなか小気味の良いものであり、WiFi アクセスポイントも構築していくのも良いかもしれません。
契約をしていなくて検証ができていませんが、IIJのブロードバンドサービス、IIJmioひかりや、IIJmio FiberAccess/NF でのIPoEでも使用できると思います。

Ubuntu 18.04.3 での問題点

Ubuntu 18.04 でIP環境設定用として netplan を使用されていますが、かなり不満が大きいと考えています。今の時点では ifupdown である程度はカバー出来ますがある部分では機能不全を起こしそうで、プロトコル追加機能を付けるべきだと思います。
問題点は 「PPPoE できない」、「ドキュメントがイマイチ」、「WiFi APの設定には Network Managerが必要」などの問題点はありますが まずまず、使えるものだと思っています。

最後にZOOT NATIVEの契約をすればONUにもれなくNGNに接続されて、これには全世界にIPv6では固定IPが ::/64 で・・・・!?