Shorewall

提供: ArchWiki
ナビゲーションに移動 検索に移動

Shoreline Firewall (通称 "Shorewall") は Netfilter を設定するための高準位ツールです。

一連の設定ファイルでエントリを使用してファイアウォールやゲートウェイの要件を定義すると、Shorewall は設定ファイルを読み込んで iptables のユーティリティを利用し、要件に沿うように Netfilter を設定します。

Shorewall は専用のファイアウォールシステム、複数の機能を併せ持ったゲートウェイ/ルーター/サーバー、あるいはスタンドアロンの GNU/Linux システムで使うことができます。Shorewall は Netfilter の ipchains 互換モードを使わないので、Netfilter の接続状態トラッキング機能を利用することが可能です。

インストール

shorewall または shorewall6 パッケージをインストールしてください。

設定

以下の設定は Shorewall ウェブサイトの two-interface ドキュメント を元にしています。

shorewall パッケージに付属しているサンプル設定ファイルを利用します:

# cp /usr/share/doc/shorewall/Samples/one-interface/* /etc/shorewall/     # If you have a desktop-type system with a single network interface
# cp /usr/share/doc/shorewall6/Samples6/one-interface/* /etc/shorewall6/  # If you have a desktop-type system with a single network interface, pkg shorewall6
# cp /usr/share/doc/shorewall/Samples/two-interfaces/* /etc/shorewall/    # If you have a router with two network interfaces
# cp /usr/share/doc/shorewall/Samples/three-interfaces/* /etc/shorewall/  # If you have a router with three network interfaces

/etc/shorewall/interfaces

使用しているイーサネットデバイスの名前に合うようにインターフェイスの設定を変更して、ローカルネットワークで DHCP 通信を許可します。/etc/shorewall/interfaces を編集:

ビフォー:

net     eth0          dhcp,tcpflags,nosmurfs,routefilter,logmartians
loc     eth1          tcpflags,nosmurfs,routefilter,logmartians

アフター:

net     wan          dhcp,tcpflags,nosmurfs,routefilter,logmartians
loc     lan          dhcp,tcpflags,nosmurfs,routefilter,logmartians

/etc/shorewall/policy

ポリシーファイルを編集してルーター (Shorewall を設定するマシン) からインターネットへのアクセスを許可します。/etc/shorewall/policy を編集:

ビフォー:

###############################################################################
#SOURCE         DEST            POLICY          LOG LEVEL       LIMIT:BURST

loc             net             ACCEPT
net             all             DROP            info
# THE FOLLOWING POLICY MUST BE LAST
all             all             REJECT          info

アフター:

###############################################################################
#SOURCE         DEST            POLICY          LOG LEVEL       LIMIT:BURST
$FW             net             ACCEPT
loc             net             ACCEPT
net             all             DROP            info
# THE FOLLOWING POLICY MUST BE LAST
all             all             REJECT          info

/etc/shorewall/rules

DNS ルックアップは dnsmasq で処理 (実際は転送) するので、Shorewall で通信を許可する必要があります。/etc/shorewall/rules に以下の行を追加:

#       Accept DNS connections from the local network to the firewall
#
DNS(ACCEPT)     loc              $FW

/etc/shorewall/masq

ネットワークインターフェイスを外部 (WAN) ネットワークに接続しているインターフェイスに変更して、IP もローカルネットワークで使っている IP に変える:

eth0        192.168.1.0/24

SSH

任意: インターネット上のコンピュータから SSH でルーターに接続できるようにしたい場合、/etc/shorewall/rules に以下の行を追加:

#       Accept SSH connections from the internet for administration
#
SSH(ACCEPT)     net             $FW         TCP      <SSH port used>

ポートフォワーディング (DNAT)

  • /etc/shorewall/rules: LAN 上の IP 10.0.0.85 にウェブサーバーがある場合の例です。"外部" IP のポート 5000 からアクセスすることができます:
DNAT        net        loc:10.0.0.85:80        tcp        5000

/etc/shorewall/stoppedrules

/etc/shorewall/interfaces に eth1 以外のネットワークインターフェイスを使用する場合、stoppedrules を適切な名前で更新してください。

/etc/shorewall/shorewall.conf

上記の変更を完了したら、設定ファイル /etc/shorewall/shorewall.conf で以下を変更することで Shorewall を有効化:

ビフォー:

STARTUP_ENABLED=No

アフター:

STARTUP_ENABLED=Yes

詳しくは man ページ を参照。

起動

shorewall.service起動有効化してください。

トラフィックシェーピング

Shorewall's Traffic Shaping/Control ガイドを読んで下さい。

設定例:

  • /etc/shorewall/tcdevices : シェーピングしたいインターフェイスを定義します。例えばダウンロード速度が 4MBit でアップロード速度が 256KBit の ADSL 接続のプロファイルの場合:
ppp0        4mbit        256kbit 
  • /etc/shorewall/tcclasses : クラスごとに最大 (rate) と最小 (ceil) スループットを定義します。各々シェーピングするトラフィックのタイプに割り当てます。
# interactive traffic (ssh)
ppp0            1       full    full    0
# online gaming
ppp0            2       full/2  full    5
# http
ppp0            3       full/4  full    10
# rest
ppp0            4       full/6  full    15              default
  • /etc/shorewall/tcrules : トラフィックのタイプとトラフィックが属するクラスを定義します。
1       0.0.0.0/0       0.0.0.0/0       tcp     ssh
2       0.0.0.0/0       0.0.0.0/0       udp     27000:28000
3       0.0.0.0/0       0.0.0.0/0       tcp     http
3       0.0.0.0/0       0.0.0.0/0       tcp     https

上記の場合、トラフィックを4つのグループに分けています:

  1. interactive traffic or ssh: although it takes up almost no bandwidth, it is very annoying if it lags due to leechers on the LAN. This gets the highest priority.
  2. online gaming: needless to say you cannot play when your ping sucks. ;)
  3. webtraffic: can be a bit slower
  4. everything else: every sort of download, they are the cause of the lag anyway.