Shorewallを使ったLinuxルータ/Firewall構築メモ

はじめに

現在のLinuxカーネル2.4台では、IPChainsからIPTableベースになっていますので、Debican/FedoraなどではXアプリでの簡単なIPTableの設定などは行えたり、Webminなどでもできるようにですが、そもそもIPtableを駆使してより強固なセキュリティを確保しようとするとIPtableの設定はハードルが高いのが現状です。

そこで、より簡単な設定でさらに強度の高いIPTableをしちゃうソフトがShorewall・・・というわけです。

使い始めた当初は、あまり日本語の情報がなかったShorewallですが、最近ではLinuxBoxでも使われてたりFD Linux系でも利用されているので、詳しい使い方はほかのサイトの方がよいかも知れません。
(このメモのベースは2002年のShorewallVer1.7台なので)

使い始め当初よりIPTableの詳細まで詳しくなくても簡単に設定可能でより強固なセキュリティを確保できるメリットは今のより高機能なバージョンにおいても受け継がれているようです。

なにより、作者のTom氏がとても親切に教えてくれたのが一番だったりしますが。


 

Shorewallの特徴

Shorewallの特徴を英文ドキュメントより抜粋&ZeRo的コメントを交えて紹介します。(なお、かなり古い情報をベースですので現時点のShorewallより機能が少ないかと思います)

  • NetFilter(ぶっちゃけIPTABLE)を利用してます。
    面倒なIPTABLEの定義の記述は基本的にはやらなくてOKです。
  • ワイドレンジのルータ・ファイアウォール・ゲートウェイ機能を搭載したアプリケーションです
    StandaloneタイプからDMZ付きのFirewallマシンまでレンジが広範囲に渡っています。
  • フレクシブルなアドレス管理・ルーティング機能を持っています。(MASQ/SNAT/DNAT/PROXY ARPなど)
    内部のサーバへのMASQやFORWARD機能やDMZへのルーティングなど高度な設定が可能です。
  • ブロッキング機能(ブラックリストに記述されたIPからのアクセスを一切遮断します)
    使ったことはないですが、PROXY経由のアクセスを拒否などに使えますね
  • コマンドラインサポート(サービスのサポート)
    ちょっとした修正後のリスタートも簡単に
  • VPN(IPSEC/GRE/IPIPのトンネリング/PPTP)のサポート
    サイトのドキュメントにはFreeS/WANやPopTopのPPTPでの利用が載っています
  • トラフィックコントロール機能
    帯域コントロールができるのは便利でしょー って利用したことないですが
  • RPM/Dabianさらに1FDLinuxのLEAF/Burningのサポート
    1FDLinuxでFirewall構築にはLEAF/Burningでかなりの高機能ルータ兼Firewallが完成します

ざっと、こんな感じですが、基本的なルータ兼Firewallを立てるならいくつかの設定ファイルを環境に合わせて修正するだけで、即Firewallマシンとして利用可能です。
なお、設定は基本的に設定ファイルの置き換えになりますが、Webminモジュールが別途ダウンロードすることによりWEB上から設定が可能になります。

 

インストールについて

あえて、説明するまでもありませんが、RedHat系であればRPMファイルが提供されています。
RPMをインストールまたはアップデートをかければ、/etc/shorewallに各種設定ファイルが、/usr/binにアプリケーション本体がインストールされます。
初期時には、サイトにあるサンプルのファイル(インターフェースの数によって3種類あります)をダウンロードして、InterfaceとRulesを編集すればすぐに利用可能です。

Policyは予め、3種類のタイプ応じて設定されていますので、あとはFirewallとしての通すTCP/UDPのポートやICMPの設定を決めればよいということになります。
HostsやInterfaceファイルを環境に合わせて設定する必要があります。
詳細はサイトのドキュメントを見てください。 Shorewall公式サイトは、http://www.shorewall.net/になります。
なお、以降のメモはバージョン1.x台をベースとしています、Ver2.Xには適用できないかも知れません(というか、Ver2はまだ使ったことが無いので(^^;)

 

構築タイプ1 スタンドアローン

自宅はこのタイプで、ルータとしてはブロードバンドルーターを用いています。
なので、LinuxマシンにStandAloneタイプとしてShorewallを入れています。

必要なポート以外はShorewallがシャットダウンしてくれるわけです。
で、さらにLinuxマシンにはSambaでファイルサーバ機能を持ってたりするので、これもルータ側でのフィルタだけでもOKなのですが、 念の為、Shorewallのルールで内部PC以外からのアクセスのみ許可するようにしています。

参考までルールの書き方

ACCPET net:192.168.1.0/255.255.255.0 fw tcp 137-139
ACCPET net:192.168.1.0/255.255.255.0 fw udp 137-139

ちょっとポートは本来であれば変数定義(paramファイルにて記述)が流儀?なようですが、わかりやすくルール内に並べてみました。
ポリシー(デフォルトの設定)として、net(Internet/内部)→ fw(Linuxマシン)のパケットはすべてDROPになっています。要するにLinuxマシン以外からのアクセスは全部拒否です。
ルールの設定で上記の場合、192.168.1.0/24のIPからはTCP/UDPの137から139へのアクセスは許可するという指定になるわけです。
また、WEBの公開はどこのIPからでも許可するのであれば以下のルールとなります。

ACCPET net fw tcp 80

こんな風に簡単にポートの許可/不許可さらには、アクセス元も指定しての許可/不許可が簡単に書けるわけです。

 

構築タイプ2 DMZ付きFirewall

こちらは本格的にはFirewallを構築する例です。
この構成でDMZを用いなくても内部にルールでフォワードすることも可能です。
実際に友だちの会社では2つのI/Fを使ってFirewallを構築していました。
Linuxサーバには本来であれば、Firewallのみのサービスを立ち上げておくのがスジですが・・。
面倒だったのでメールサーバ、WWWサーバ、DNSサーバ兼用のSOHOルータとして構築しました。
グローバルIPが複数Linuxサーバが受け持ち、それぞれのIPによってどのサービスを許可するかをルールで設定したわけです。
これはスタンドアローンでのルールの逆になります。

ACCEPT net fw:1.2.3.4 tcp www
ACCPET net fw:1.2.3.5 tcp smtp
ACCPET net fw:1.2.3.6 tcp ftp

とこんな感じにFW側のIPを指定してそれぞれのルールを記述します。
もちろん、DMZマシンに複数台のIPをもって、それぞれのIPごとに許可するポートを指定する方法も同様にdmz(ゾーン名):1.2.3.4などと記述してポートの許可を行います。

 

トラブルシューティング

ShorewallのMLでは、作者Tomさん以外にもサポートしてくれる人もいらっしゃるようなので英語が堪能な方であれば躓いたらMLで聞いてみるとよいでしょう。
英語が堪能でないσ(^_^)にも作者Tomさんは親切に教えてくれました。
開発開始からすでに4年以上経過しているのですが、精力的にバージョンアップが続けられています。
すでに1.4台で安定稼動しているのでバージョンアップはしていませんが、現在はVer2台になっています。
当初のトラブルの筆頭はDHCP関連とSAMBA関連ですが、すでにサイトにはFAQで挙がってので現在のShorewallで悩むことは余りないでしょう♪

プッシュ通知を