Shorewall - Linux サーバー用の高レベルのファイアウォール
Linux でファイアウォールを設定するのは、初心者やiptables にあまり慣れていない人にとっては非常に困難な作業です。幸いなことに、Shorewallには非常に使いやすいソリューションがあります。
この複数部構成のチュートリアルでは、Shorewall の使用を開始し、この素晴らしいファイアウォール システムに関するさらに高度なトピックについて説明します。
ショアウォールとは何ですか?
Shorewall は本質的に iptables のフロントエンドですが、構成に複数のテキスト ファイルを使用するコマンドライン環境のフロントエンドです。 Shorewall は、多数のマシンにサービスを提供する非常に大規模なネットワークに拡張できる堅牢なファイアウォール システムですが、基本的な 2 つのインターフェイス構成から始めて、基本を確認していきます。
2 インターフェイス構成は、2 つのイーサネット ポートを備えたマシンで構成されます。1 つはローカル ネットワークへの受信ポート、もう 1 つはローカル ネットワークへの送信ポートです。
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
ここでは、fw、net、および loc という 3 つのゾーンがデフォルトで定義されていることがわかります。 Shorewall はファイアウォール マシン自体を独自のゾーンとして扱い、それを $fw という変数に保存することに注意することが重要です。
「/etc/shorewall/zones」 ファイルは一目瞭然です。 ネット ゾーン (インターネットに面したインターフェイス)、loc ゾーン (LAN に面したインターフェイス)、fw、それがすべてです。
この設定では次のことがなくなります。
- これにより、loc ゾーン (LAN) からnet ゾーン (インターネット) へのすべての接続リクエストが許可されます。
- ネット ゾーンからファイアウォールとLANへのすべての接続要求をドロップ (無視) します。
- 他のすべてのリクエストを拒否し、ログに記録します。
ログ レベルビットは、Apache、MySQL、またはその他の FOSS プログラムを管理したことがある人にはよく知られているはずです。この場合、Shorewall にログの情報レベルを使用するように指示しています。
ゾーンとポリシーが設定されたので、インターフェイスを設定する必要があります。これを行うには、「/etc/shorewall/interfaces」ファイルを編集します。
sudo nano /etc/shorewall/interfaces
ここでは、 インターネットに接続するインターフェイスをeth0 としてネット ゾーンに設定しました。 LAN 側では、もう一方のインターフェイス eth1 をloc ゾーンに設定しました。構成に適切に適合するようにこのファイルを調整してください。
これらのインターフェイスのいずれかに配置できるさまざまなオプションは広範囲にわたるため、マニュアル ページで詳しく説明されています。
man shorewall-interfaces
それらのいくつかの概要は次のとおりです。
- nosmurfs – 送信元としてブロードキャスト アドレスを持つパケットをフィルタリングします。
- logmartians – 不可能な送信元アドレスを持つパケットをログに記録します。
- routefilter – スプーフィング防止のためのカーネル ルート フィルタリング。
もちろん、システムがファイアウォールで保護されているため、必要なことを実行するには特定の接続の通過を許可する必要があります。これらは「/etc/shorewall/rules」のルール ファイルで定義します。
sudo nano /etc/shorewall/rules
このファイルは、主に列が重なっているため、最初は混乱しているように見えますが、ヘッダーは一目瞭然です。まず、 実行する内容を説明するアクション列があります。
次に、 パケットの送信元のゾーンを定義するソースヘッダーがあります。次に、 宛先のゾーンまたはIP アドレスであるDESTまたは宛先を取得します。例を使ってみましょう。
IP アドレスが 192.168.1.25 のマシン上のファイアウォールの内側で SSH サーバーを実行するとします。ファイアウォールでポートを開く必要があるだけでなく、ポート 22 に来るトラフィックはすべてマシンにルーティングする必要があることをファイアウォールに指示する必要があります。 >192.168.1.25です。
これはポート転送と呼ばれます。これは、 ほとんどのファイアウォール/ルーターに共通の機能です。 「/etc/shorewall/rules」に次のような行を追加することでこれを実現します。
SSH(DNAT) net loc:192.168.1.25
上記で、ネット ゾーンからファイアウォールに届くSSH 宛パケットはすべてルーティングする必要があると定義しました (DNAT ) ) アドレス 192.168.1.25 のマシンのポート 22 に接続します。
これはネットワーク アドレス変換またはNATと呼ばれます。 「D 」は、これが宛先アドレスの NAT であることを Shorewall に伝えるだけです。
これが機能するには、 カーネルでNAT サポートを有効にする必要があります。 NAT が必要で、それがない場合は、Debian カーネルの再コンパイルに関する私のチュートリアルを参照してください。
次の記事では、Shorewall のさまざまな構成とオプションについて説明します。ただし、現時点では、作業を開始するのに役立つ十分な情報がここにあるはずです。いつものように、より深く理解するにはマニュアルページを参照してください。