Shorewall
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つのグループに分けています:
- 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.
- online gaming: needless to say you cannot play when your ping sucks. ;)
- webtraffic: can be a bit slower
- everything else: every sort of download, they are the cause of the lag anyway.