[Linux Lite] ufw で複数インターフェイス (物理 IF と仮想 IF ) に個別のファイアウォール設定をする
やりたいこと
我が家の Linux Lite はネットワークインターフェイス (いわゆる NIC。以下 IF と略すことあり) を 2 つ持っている。1 つが物理 IF でもう 1 つが仮想 IF (SoftEther VPN クライアントの仮想 LAN カード) である。
物理 IF へのファイアウオール制御と仮想 IF へのファイアウォール制御を別々に設定したい。
一例をあげると、物理 IF への ssh アクセスは許可するが、仮想 IF への ssh アクセスは拒否する、といった内容である。
他の Linux でも同様に設定できるはずである
今回は Linux Lite で ufw を設定していくが、ufw は Linux で使えるファイアウォールソフトウェアなので Linux Lite 以外のディストリビューションでも本投稿の内容は応用できるはずである。
また以前書いた、Ubuntu で ufw を設定する記事 も参考にしてほしい。
設定したことを箇条書きにする
いきなり ufw の設定を放り込んでいくのではなく、まず設定したい内容を以下のように箇条書きにして明文化するとやりたいことがスッキリします。
- 特定セグメントから物理 IF への ssh アクセスを許可する
- ssh アクセスのレートリミットを設定する
- 特定セグメントから物理 IF への tcp 7876 のアクセスを許可する
- 特定セグメントから物理 IF への tcp 27876 のアクセスを許可する
- 仮想 IF への tcp 7874 のアクセスを許可する
- 仮想 IF への tcp 27874 のアクセスを許可する
- 上記以外の通信を拒否する
今回このような設定をしようとしています。
物理 IF にはプライベート IP である 172.16.1.4/24 を設定していて、仮想 IF には固定グローバル IP を設定しています。
まず IPv6 を OFF にする
IPv6 は使っていないので ufw の対象から外します。具体的には /etc/default/ufw ファイルの
IPV6=yes
を
IPV6=no
に修正します。
設定したいコマンドを作る
Linux に ufw のコマンドを投入する前に、メモ帳のようなテキストエディタを使ってコマンドを書き出す。
sudo ufw allow in on enp2s0 from 10.1.0.0/24 to 172.16.1.4 port ssh sudo ufw limit ssh sudo ufw limit ssh comment 'Rate Limit for ssh server' sudo ufw allow in on enp2s0 from 10.1.0.0/24 to 172.16.1.4 port 7876 proto tcp sudo ufw allow in on enp2s0 from 10.1.0.0/24 to 172.16.1.4 port 27876 proto tcp sudo ufw allow in on vpn_myipse_nic to ww.xx.yy.zz port 7874 proto tcp sudo ufw allow in on vpn_myipse_nic to ww.xx.yy.zz port 27874 proto tcp
上記を Linux Lite に投入していく。グローバル IP のところだけぼかしています。
enp2s0 は物理 IF の名前です。
vpn_myipse_nic は 仮想 IF (SoftEther VPN クライアントの仮想 LAN カード) の名前です。
テキストエディタにメモする理由は、コマンド投入がうまく行かなかった時に正しいコマンドにちゃちゃっと変更したり、ゼロから設定し直す時のやり直しがやりやすいからです。
あと、ufw は各コマンドの順序性が大事です。思いつきでルールをぽこぽこ追加していくと sudo ufw status でルール一覧を表示したときに見づらく (管理性が悪く) なります。
またいつか同じような ufw を設定するときに使い回しができるので楽である。(本投稿はその目的を兼ねている)
Linux Lite で ufw を起動する
まずは ufw を起動 (稼働) させます。稼働させてからじゃないとファイアウォールのルール追加が行えないからです。 ← ごめんなさい。たぶんこれ間違ってますので取り消し線を入れました。
$ sudo ufw status 状態: 非アクティブ $ sudo ufw enable ファイアウォールはアクティブかつシステムの起動時に有効化されます。 $ sudo ufw status 状態: アクティブ $
最初に sudo ufw status でまだ稼働していないことを確認してから起動させた。
Linux Lite にルールを追加する
ではテキストエディタにメモったものを投入していく。
$ sudo ufw allow in on enp2s0 from 10.1.0.0/24 to 172.16.1.4 port ssh ルールを追加しました $ sudo ufw limit ssh ルールを追加しました $ sudo ufw limit ssh comment 'Rate Limit for ssh server' ルールを更新しました $ sudo ufw allow in on enp2s0 from 10.1.0.0/24 to 172.16.1.4 port 7876 proto tcp ルールを追加しました $ sudo ufw allow in on enp2s0 from 10.1.0.0/24 to 172.16.1.4 port 27876 proto tcp ルールを追加しました $ sudo ufw allow in on vpn_myipse_nic to ww.xx.yy.zz port 7874 proto tcp ルールを追加しました $ sudo ufw allow in on vpn_myipse_nic to ww.xx.yy.zz port 27874 proto tcp ルールを追加しました $
↑グローバル IP の箇所はボカサせていただいた。続いて追加したルールを確認する。
$ sudo ufw status numbered 状態: アクティブTo Action From
-- ------ ----
[ 1] 172.16.1.4 22/tcp on enp2s0 ALLOW IN 10.1.0.0/24 [ 2] 22/tcp LIMIT IN Anywhere # Rate Limit for ssh server [ 3] 172.16.1.4 7876/tcp on enp2s0 ALLOW IN 10.1.0.0/24 [ 4] 172.16.1.4 27876/tcp on enp2s0 ALLOW IN 10.1.0.0/24 [ 5] ww.xx.yy.zz 7874/tcp on vpn_myipse_nic ALLOW IN Anywhere [ 6] ww.xx.yy.zz 27874/tcp on vpn_myipse_nic ALLOW IN Anywhere $
上記ルール 1, 3, 4 は物理 IF へのアクセスを制御している。10.1.0.0/24 からの ssh と tcp: 7876 と tcp: 27876 のみ許可している。送信元の IP セグメント「も」指定している形になっている。
ルール 5 と 6 は仮想 IF へのアクセスを制御している。tcp: 7874 と tcp: 27874 宛て通信のみ許可している。この 2 つのルールは、「インターネット側から仮想 IF へ設定した固定グローバル IP 宛てアクセス」の制御のため、送信元は絞っていない。
ufw を再起動する
ファイアウオールのルールを追加したり削除したり変更したら一応 ufw を再起動しておく。
$ sudo ufw reload ファイアウォールを再読込しました $
ロギング設定
ロギングの設定を medium にする。デフォルト設定が何になっているのか実は把握していませんが、デフォルトだと BLOCK したログしか吐かないのです。
medium にすることで ALLOW や AUDIT のログも吐いてくれるようになります。
事前と事後で動作確認するのが望ましい
ufw でルールを追加する前に実際に通信できるかどうかを確認しておくことが望ましいです。
ルールを追加したあとでもう一度行って、動作に違いが見られることを確認することでファイアウォールがうまく機能していると判断できる。
今回僕はそれを行い、意図した動作が実現できたと判断した。