Ubuntu16.04 UFW 連係 unnumbered (固定IP) ルーター

ufw を有効にしてFirewall 設定も有効に

unnumbered 固定IP 仕様

構成はこの図の用にする。IPアドレスは各自の環境に応じて設定する。

  • ネットワーク構成解説
    1. eth0 ONUもしくは、NTT光ルータなどのpppoeパススルー機能をONにしたポートに接続するインターフェースをeth0に接続。
    2. eth1 グローバルIPが219.111.222.241〜219.111.222.254 までの16 IP(実際に使用できるのは14個) で eth1に接続する。もちろんこのルータもIPを専有するのだが、市販ルーターを使用するのではなくUbuntu サーバーとして httpサーバーなどの機能を盛り込めるので効率的。
    3. eth2  LAN、ローカルIP 192.168.1.0/24 にアドレス変換、マスカレード接続されたもので一般的なLAN。

もちろん最近のOSではハードウェアに応じて enp1s0 , enp2s0 などのようにpci-e のバス接続などの要因でデバイス名称が変わる。
こんなのゴメンだという向きには /etc/udev/rules.d/10-rename-network.rules を下記のように作成すれば、デバイスの名称は任意のものに変更できる。(xx:xx:xx:xx:xx:xx はmacアドレス eth0 はデバイス名)
ちなみにpxe boot を利用したdisklessシステムには お勧めしません

SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="xx:xx:xx:xx:xx:xx", NAME="eth0"
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="xx:xx:xx:xx:xx:xx", NAME="eth1"
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="xx:xx:xx:xx:xx:xx", NAME="eth2"

 

  • Netwok managerは使用しない!

基本的にこの様な目的ではserver版を使用するのだが、サーバー版にはこれは含まれていないので削除自身は不要だが、デクストップ版にはデフォルトでインストールされている。そもそもデスクトップ版で問題がある訳ではない。デスクトップ版は単にGnomeなどのユーティリティが含まれてGUIでかなりのことが出来るだけの物だ。私がLinuxのディストリビュータにいた頃、サーバー版を世に出すにあたって「意味がない」と技術陣から意見が出たぐらいなのだが、昨今のブログ筆者達を見ても各パッケージの動作も理解せず「こうやれば良い」程度で行っている事などからサーバー版というのも有りだと思える。デクストップ版は単に豊富なGUIツールが入っているだけなのだ。

もし、GUIしかできないのであればデスクトップ版を使用してくださいな。決してオススメはしませんが!!

さて Network Manager だが下記コマンドで削除できる。

$ sudo apt purge network-manager

 

  • カーネル動作で IP Forward を有効にする。

Linuxカーネルはかなり以前より上手くできており proc デバイスを変更するだけで 機能設定が可能になっている。 IP Forward を有効にするには /proc/sys/net/ipv4/ip_forwar を ‘1’にするだけでOKだ。

ただし、これだけだと再起動するたびにデフォルトの ‘0’ に戻ってしまう。 この設定を 恒久的に変更するには /etc/sysctl.conf を編集して #net.ipv4.ip_forward=1 をコメントアウトする。

$ sudo vi /etc/sysctl.conf

 

  • ufw にIP Forward を許可させる。

ufwのデフォルトのポリシーを変更し、IPフォワディングを許可する。これはフィルターレベルでの ’iptables’ コマンド制御となる。

/etc/default/ufw の19行目を編集を下記の’様に

DEFAULT_FORWARD_POLICY=”DROP”DEFAULT_FORWARD_POLICY=”ACCEPT” に書換える。

 

$ sudo vi /etc/default/ufw
  • ufwの設定

ufwのコマンド解説は 他のサイト(リンクは一例)に任せることにして要点を記述しておく。

  1. apache のポートを開く際に ‘ufw allow 80/tcp’ とするのではなく /etc/ufw/applications.d/apache2-utils.ufw.profile に記述されている[Apache]の部分を使い ‘ufw allow Apache’ を実行する。[Apache Full]などのようにスペースが含まれたものは ‘ ufw allow “Apache Full” ‘ のようにダブルコーテーションでくくると良い。 このコマンド一つで portsが80と443のtcpが許可される。
  2. ssh の本来のポート22を/etc/ssh/sshd.confを編集して1022に変更していた場合を例にした手順は
    1. /etc/ufw/applications.d/openssh-server を編集して ports=22/tcp を ports=1022/tcp に変更する。
    2. ‘ufw allow OpenSSH’ を実行する。

他のサービスのポート番号を変更する場合も同様の手順でOKだ。

この部分は、一般的なルーター設定でunnumber と IP指定のないOCNなどの普通のルーター設定と同様だ。

 

$ sudo apt install pppoeconf
$ sudo pppoeconf


pppoeconf execution
クリックして拡大

pppoeconf がインストールされていなければ 上記、1行目を忘れず実行する。

  • pppoeの設定は pppoeconf を使用すれば簡単に設定が可能だ。

この画像でenp3s0と表示されている部分は各自のイーサネットのインターフェース名でことなる。初めに示した図の構成では eth0 と表示してくれる。ここで注意しなくてはいけないのは実際に ONU(光電話機能内蔵ルータの場合はPPPoEブリッジを使用するを選択する) に接続しておかなければ自動検出できないことだ。

  • ネットワークインターフェースの設定と確認

Networkmanager を停止しているので マニュアル記述するのは当たり前のことだ。編集はこんな感じだ。 ポイントは eth1 の設定をルーターのグローバルIPに設定し、 eth2 をLAN側の ルーター(GW) IP に設定する。 eth0 は dsl-provider となっているがFTTH(ひかり)でもADSLでも同じ表現でOKだ。

$ sudo vi /etc/network/interfaces



クリックして拡大

この中で以下の部分は pppoeconf が自動的に追加してくれる。

auto dsl-provider
iface dsl-provider inet ppp
pre-up /bin/ip link set eth0 up # line maintained by pppoeconf
provider dsl-provider

auto eth0
iface eth0 inet manual

 

  • MASQUERADE (nat テーブル)の設定

よくシステムを知らない輩は、 iptables コマンドを iptables -t nat -A POSTROUTING -s 192.168.2.0/255.255.255.0 -j MASQUERADE などを 実行して iptables-save している例が多々、見受けられるがこれは 全く良くない!

これは ufw コマンドと連係が取れないからだ。はっきり言って ubuntu で使って Firewall 設定たる ufw の使用方法を知らない、おバカな方法だ。

ここまで設定を行うとeth1 側に固定IP 219.111.222.242 〜 219.111.222.254 に割り当てられた機器が接続可能となる。

$ sudo vi /etc/ufw/before.rules

vi_before-rules

クリックして拡大

ここで LANのIP 192.168.1.0/24 は各自の環境に応じて設定する。 出力指定で、あえて指定しなければ動作できないような場合を除いて、”-o eth0” などは書く必要はない。

これでLAN側に接続された複数の機器からグローバルアドレスに接続が可能となる。

サンプルとして nat table のちょっと変わった設定を

*nat
:POSTROUTING ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
-A POSTROUTING -s 219.117.243.240/28 -d 192.168.1.0/24 -o eth2 -j MASQUERADE
-A POSTROUTING -s 192.168.16.0/24 -d 192.168.1.0/24 -o eth2 -j MASQUERADE
-A POSTROUTING -s 192.168.16.0/24 -o ppp0 -j MASQUERADE
-A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
COMMIT

上記の設定は eth1 Global IP にLocal IPにIPエイリアス 192.168.16.0-14 を与え、プラスαとして 192.168.16.15-254 を配置できるようにしている。このMASQUERADEにより各セグメント間の通信ができる。この辺の設計は好みで遊んでみれば楽しい。

これで完成なのだが、グローバルIPに接続する機器のファイアーウォールの設定を忘れてはいけない。