Shorewall - Linuxサーバー用の高レベルファイアウォール
Linuxでファイアウォールを設定することは、初心者やiptablesにあまり慣れていない人にとって非常に難しいことがあります。しかし、Shorewallには非常に使いやすいソリューションがあります。
このマルチパートチュートリアルでは、Shorewallを始める手助けをし、この素晴らしいファイアウォールシステムに関するより高度なトピックについて説明します。
Shorewallとは何ですか?
Shorewallは本質的にiptablesのフロントエンドですが、複数のテキストファイルを用いて設定を行うコマンドライン環境のフロントエンドです。Shorewallは非常に大規模なネットワークで多数のマシンにサービスを提供できる堅牢なファイアウォールシステムですが、まずは基本的な二重インターフェースの設定から始めて、基本をしっかりと押さえましょう。
二つのインターフェース構成は、一つのイーサネットポートが入り口、もう一つがローカルネットワークへの出口となっている機械で構成されています。
LinuxにShorewallファイアウォールをインストールする
Shorewall は apt および yum パッケージマネージャーツールを使用してインストールできます。
sudo apt install shorewall [On Debian-based Sysems]
sudo yum install shorewall [On RHEL-based Sysems]
インストール後、サンプル設定を「/usr/share/doc/shorewall」ディレクトリからShorewallのデフォルトディレクトリ「/etc/shorewall」にコピーする必要があります。
sudo cp /usr/share/doc/shorewall/example/two-interfaces/* /etc/shorewall
cd /etc/shorewall
このディレクトリを見てみると、多くのファイルとshorewall.confファイルがあることがわかります。
Shorewallはネットワークをさまざまなゾーンのグループとして見なしているので、最初に見てみたいファイルは「/etc/shorewall/zones」ファイルです。
sudo nano /etc/shorewall/zones
ここでは、デフォルトで定義された3つのゾーン、すなわちfw、net、およびlocがあることがわかります。重要なのは、Shorewallがファイアウォールのマシン自体を独自のゾーンと見なし、それを$fwという変数に保存していることです。
"/etc/shorewall/zones" ファイルはかなり自己説明的です。net zone(インターネット向けインターフェース)、loc zone(LAN向けインターフェース)、そしてfwがすべてです。
この設定では、次のことが起こります。
- それはローカルゾーン(LAN)からネットゾーン(インターネット)へのすべての接続要求を許可します。
- ネットゾーンからファイアウォールおよびLANへのすべての接続要求を無視します。
- 他のすべてのリクエストを拒否し、ログします。
LOG LEVEL ビットは、Apache、MySQL、またはその他の多くのFOSSプログラムを管理したことがある人には馴染み深いはずです。この場合、Shorewall に info level のロギングを使用するように指示しています。
ゾーンとポリシーが設定されたので、インターフェースを構成する必要があります。これは「/etc/shorewall/interfaces」ファイルを編集することで行います。
sudo nano /etc/shorewall/interfaces
ここでは、インターネットに接するインターフェースをeth0としてnetゾーンに設定しました。LAN側では、もう一つのインターフェースeth1をlocゾーンに設定しました。このファイルを適切に設定するように調整してください。
これらのインターフェースのいずれかに配置できるさまざまなオプションは幅広く、マニュアルページで詳細に説明されています。
man shorewall-interfaces
それらの簡単なまとめは以下の通りです:
- ノスムーフス - ソースとしてブロードキャストアドレスを持つパケットをフィルタリングします。
- ログマーチャン – 不可能な送信元アドレスのログパケット。
- ルートフィルタ - スプーフィング防止のためのカーネルルートフィルタリング。
もちろん、私たちのシステムがファイアウォールで保護されているので、必要な作業を進めるために特定の接続を許可する必要があります。これらは「/etc/shorewall/rules」というルールファイルで定義します。
sudo nano /etc/shorewall/rules
このファイルは最初は混乱しているように見えますが、主に列が重なっているためです。しかし、ヘッダーはかなりわかりやすいです。まず、あなたが実行したいことを説明するACTION列があります。
次に、SOURCE ヘッダーがあります。ここで、パケットが発信される ゾーン を定義します。それから、DEST(または 宛先)があります。これは、宛先の ゾーン または IP アドレス です。例を使ってみましょう。
ファイアウォールの背後で、IPアドレス192.168.1.25のマシン上にSSHサーバーを運用したいとしましょう。ファイアウォールでポートを開く必要があるだけでなく、ポート22へのトラフィックは192.168.1.25のマシンにルーティングされる必要があることをファイアウォールに指示しなければなりません。
これはポートフォワーディングとして知られています。これはほとんどのファイアウォール/ルーターに共通の機能です。"/etc/shorewall/rules"では、次のような行を追加することでこれを達成できます:
SSH(DNAT) net loc:192.168.1.25
上記では、net zoneからファイアウォールに向かうすべてのSSH用パケットは、アドレス192.168.1.25のマシンのポート22にルーティング(DNAT)されなければならないと定義しています。
これはネットワークアドレス変換、またはNATと呼ばれます。「D」は単にShorewallに、これは宛先アドレスのためのNATであることを知らせます。
これが機能するためには、カーネルにNATサポートが有効になっている必要があります。もしNATが必要で、まだ有効になっていない場合は、Debianカーネルの再コンパイルに関する私のチュートリアルをご覧ください。
次の記事では、さまざまなShorewallの設定とオプションについて探求します。しかし、今のところ、始めるための十分な情報がここにあるはずです。いつものように、より深く理解するためにはマニュアルページを参照してください。




