都合があって仮想マシンでFirewall Routerを作りたかったので、どれにしようかなーと考えてVyattaのCommunity Editionを選択。VyattaはLinuxをベース(とはいえ、完全にカスタマイズされている)としたソフトウェアルータ(アプライアンス版もある)だが、非常にハイエンドかつ高機能・多機能。Community Editionといってもサポートや修正パッチの適用が限定的なだけで、機能的な制約はほぼないらしい。
Vyattaウェブサイト
今回は仮想マシンとして作成するので、元々仮想マシンイメージ化されているzipファイルをダウンロード。Vyattaのダウンロードはこちらから。仮想マシンイメージは"VC4 - VMware Virtual Appliance"とあるリンクからダウンロードできる。
ドキュメントもこちらからダウンロードできる。"Quick Start Guide"はすぐダウンロードできるが、"Command Reference"は登録が必要。
VyattaCommunityEdition4.zipをダウンロードして解凍、このVirtual ApplianceはOVFではなく普通の仮想マシンイメージで提供されているので、VMwareの仮想マシンとして登録すればOK(ESXな人はV2V的にインポートしてくださいな)。
NICの接続構成や不要なデバイスを整理するなど、仮想マシンの構成を整えてから起動。デフォルトで"root"アカウントと"vyatta"アカウントが登録されていて、どちらもデフォルトパスワードは"vyatta"。
Vyattaは"Operation Mode"と"Configuration Mode"で構成されている。ログインして最初はOperation Mode。ネットワーク機器のお約束というか、"?"でコマンド一覧が表示される。コマンドのtab補完も機能しているし、コマンドも整理されているので直感的だ。
基本コマンド
- Operation ModeからConfiguration Modeへのモード変更
$ configure
- 設定内容を反映
# commit
- 設定内容を保存
# save # save Hoge (標準config以外への保存を行う場合)
- Configuration ModeからOperation Modeへのモード移行
# exit # exit discard (設定内容を保存せずにexitする場合)
さて、では基本設定。
- ホスト名を設定
# set system host-name HogeHoge
- ドメイン名を設定
# set system domain-name HigeHige.local
- ユーザアカウントにパスワードを設定
- プレインテキストでパスワードを設定しても、commitした段階で暗号化される
# set system login user **** authentication plaintext-password ####### set interface ethernet eth0 address 192.168.1.0/24
- DNSを設定
# set system name-server 192.168.1.100
- Default G/Wを設定
# set system gateway-address 192.168.1.254
つづいて色々な拡張的な?設定
- sshを設定
# set service ssh
- DHCPサーバを設定
# set service dhcp-server shared-network-name HOGE subnet 192.168.100.0/24 start 192.168.100.101 stop 192.168.100.199 # set service dhcp-server shared-network-name HOGE subent 192.168.100.0/24 default-router 192.168.100.254 # set service dhcp-server shared-network-name HOGE subent 192.168.100.0/24 dns-server 192.168.100.10
- NAT設定
# set service nat rule 1 soruce address 192.168.100.0/24 # set service nat rule 1 outbound-interface eth0 # set service nat rule 1 type masquerade
さて、最後にFirewall設定。VyattaのFirewallはルールセットを作成してそこにルールとして定義を構成していき、設定したルールセットをInterfaceを通過する3種類の通信に対して適用する形式になっている。3種類の通信はin, out, local。"in"はそのインターフェイスに対して入ってくる通信、"out"はそのインターフェイスから出て行く通信、そして"local"はそのインターフェイス自身に対する通信。これらの定義を各インターフェイスに定義すればFirewallが定義できる。
以下は初期設定として使えるであろうダダ通し定義がされたルールセット。本来Firewallは「許可した通信以外は遮断する」ことが常識だろうが、まぁまずは使ってみて理解するためにはいいかな。
- Firewallルールセットの作成
# set firewall name SAMPLE
- Firewallルールセットにルールを作成
- ルールは1〜1024の数字で管理される。つまり、1つのルールセットに対して最大で1024個までのルールが定義できる。当然ながら?ルールは1から順番に判断に使用されていくので、最初は数字の間隔を開けて定義することが推奨。あとから間にルールを定義できる。
# set firewall name SAMPLE rule 10
- ルールに許可・拒否・遮断の3種類のアクションを設定(以下は許可の例)
# set firewall name SAMPLE rule 10 action accept
- ルールに内容を設定(以下は全てのプロトコルを設定する例)
# set firewall name SAMPLE rule 10 protocol all以上で設定したFirewallルールセットはこんなかんじ。
# show firewall name SAMPLE name SAMPLE { rule 10 { action accept protocol all } }ここからは作成したFirewallルールセットをインターフェイスの通信に対して適用する。
- eth1のin通信に対してSAMPLEルールセットを適用する
# set interface ethernet eth1 firewall in name SAMPLEこれでcommitすれば設定が適用される。
ま、機能はここで紹介した分なぞほんの第一歩なぐらいあるので、いろいろやってみてください。