VyOS(vyatta Core後継)のFW基本機能を試してみる(NAT/ステートフルFW)
VyattaがBrocade社に買収されて約2年が経ちました。無償版のVyatta Coreがなくなり、その後継としてVyOSがあるのですが、知ってますか?
wikiからの抜粋ですが、
VyOSは、Vyattaから派生したオープンソースのネットワーク・オペレーティング・システムで、ソフトウェアベースのルーティング、ファイアウォール、VPNなどの機能を提供します。
ユーザ会もあります。 - http://www.vyos-users.jp
商用のBrocade Vyatta vRouterと機能面での大きな違いは、ざっくり言うとWEB GUIとREST APIでしょうか。
Vyatta -> BrocadeについてのOSS側から見た反応の詳細はこちら http://stuff.baturin.org/post/89016735950
今回はFWやインターネットルータの置き換えとして使うであろう基本機能を検証してみました。
- VyOSインストール
- VyOSの基本コマンド
- VyOSでDynamic NATを設定してみる
- VyOSでStatic NATを設定してみる
- VyOS ステートフルファイアウォールを設定してみる
BGPはハード依存の性能面の方が気になるので一旦保留です。
VyOSインストール
まず、現時点での安定バージョンは以下の通りです。
Current stable release: VyOS 1.1.0 (Helium)
Downloads: http://mirror.vyos.net/iso/release/1.1.0. Physical and virtual 64-bit: vyos-1.1.0-amd64.iso Physical 32-bit: vyos-1.1.0-i586.iso Virtual 32-bit: vyos-1.1.0-i586-virt.iso
環境に合わせてダウンロードをしてください。
起動は省略しますが、仮想マシンなり物理マシンなり自身の環境に合わせてインストールしてください。
インストール後に実施すること
- 時刻設定
- install images
- インタフェース設定
- ssh設定
vyos/vyosでログインできます。上記問題なければ、続いてinstall imageコマンドを叩いて対話型の設定、再起動。その後初期コンフィグです。
インストール自体は以下を参考にさせて頂きました。
vyatta』からフォークした『vyos』をインストールして
VyOSの基本コマンド
show configurationで現在のコンフィグレーションを確認します。
vyos@vyos:~$ show configuration interfaces { ethernet eth0 { hw-id 00:00:00:00:00:00 } loopback lo { } } system { config-management { commit-revisions 20 } console { device ttyS0 { speed 9600 } } login { user vyos { authentication { encrypted-password **************** } level admin } } ntp { server 0.pool.ntp.org { } server 1.pool.ntp.org { } server 2.pool.ntp.org { } } package { repository community { components main distribution helium url http://packages.vyos.net/vyos } } syslog { global { facility all { level notice } facility protocols { level debug } } } }
では、設定してみましょう。以下のコマンドでコンフィグレーションモードに入ります。
$ configure
プロンプトが「#」に変わるのでモードが遷移したことを確認できます。
使い方
eth1を追加してみます。事前にOS側で新たに認識済みの状態です。
vyos@vyos# set interfaces ethernet eth1 [edit]
設定はすぐには反映されません。compareで差分を確認し、commit(適用)/save(保存)で完了です。
vyos@vyos# compare [edit interfaces] +ethernet eth1 { + duplex auto + smp_affinity auto + speed auto +} [edit] vyos@vyos# commit [edit] vyos@vyos# save Saving configuration to '/config/config.boot'... Done
- アドレス設定
vyos@vyos# set interfaces ethernet eth0 address 172.16.100.1/24 [edit] vyos@vyos# set interfaces ethernet eth1 address 192.168.100.250/24 [edit]
- ルーティング設定
vyos@vyos# set protocols static route 0.0.0.0/0 next-hop 172.16.100.254 distance '1' [edit]
eth1をLAN側としてホストをぶら下げてみました。hostのデフォルトGWはVyOSに設定されており、VyOSの172.16.100.0/24をGlobalと読み替えてください。
internet -- VyOS -- host(192.168.100.11)
- 疎通確認
hostからpingを打ってみます。
$ ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. --- 8.8.8.8 ping statistics --- 2 packets transmitted, 0 received, 100% packet loss, time 1001ms
この状態では当然疎通が取れません。
VyOSでDynamic NATを設定してみる
上記の構成でインターネットに出るために、Dyanamic NAT(IPマスカレード)を設定してみます。
vyos@vyos# set nat source rule 100 outbound-interface 'eth0' vyos@vyos# set nat source rule 100 source address '192.168.100.0/24' vyos@vyos# set nat source rule 100 translation address 'masquerade'
- 疎通確認
$ ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_req=1 ttl=46 time=40.6 ms 64 bytes from 8.8.8.8: icmp_req=2 ttl=46 time=40.5 ms
疎通を確認できました。
VyOSでStatic NATを設定してみる
先ほどのDynamic NATを削除して綺麗な状態にしておきます。コマンドはsetではなくdeleteです。
- Dyamic NAT削除
vyos@vyos# delete nat source rule 100
- HTTPサーバ起動
host側でHTTP Serverを起動します。ポートの変換も確認したいので、8000番で起動します。
python -m SimpleHTTPServer 8000
Static NAT設定
setコマンドの一つ一つは省略しますが、以下の通り新しいルールでNATを設定してみました。sourceとdestinationで、物理ポート・アドレス・TCPポートを設定しています。
172.16.100.2:80 <-> 192.168.100.11:8000の変換です。
nat { destination { rule 200 { description "1-to-1 NAT" destination { address 172.16.100.2 port 80 } inbound-interface eth0 protocol tcp translation { address 192.168.100.11 port 8000 } } } source { rule 200 { description "1-to-1 NAT" outbound-interface eth0 source { address 192.168.100.11 } translation { address 172.16.100.202 } } } }
Tips: VyOSのNAT時に出力されるWarning IP address does not exist on the system!の対応
commitする際にWarnningが出力されると思います。
Warning: IP address 172.16.100.2 does not exist on the system!
動作を見てみるとVyOSがNATで使用しているアドレスのARPに応答していませんでした。以下にも記載がありました。
http://forum.vyos.net/archive/index.php?thread-6336.html
Static NATは避けたいので、以下のように複数アドレスを設定して回避しました。setコマンドで追記が可能です。
vyos@vyos# set interfaces ethernet eth0 address 172.16.100.2/24 vyos@vyos# show interfaces ethernet eth0 { address 172.16.100.1/24 + address 172.16.100.2/24
動作確認としては、ARPも問題なく無事外部から80番でweb画面を閲覧できました。
VyOS ステートフルファイアウォールを設定してみる
これまでの設定ではfirewallはかかってない状態です。FWのRuleを定義して、Zoneかインタフェースに紐づけます。ここではOUTSIDE-INというRuleを作成してeth0に設定しています。
vyos@vyos# set firewall name OUTSIDE-IN default-action drop vyos@vyos# set firewall name OUTSIDE-IN rule 10 action accept vyos@vyos# set firewall name OUTSIDE-IN rule 10 state established enable vyos@vyos# set firewall name OUTSIDE-IN rule 10 state related enable vyos@vyos# set firewall name OUTSIDE-IN rule 20 action drop vyos@vyos# set firewall name OUTSIDE-IN rule 20 state invalid enable
vyos@vyos# set interfaces ethernet eth0 firewall in name OUTSIDE-IN
tips: ステートレスファイアウォールを設定する方法
この2行がポイントです。established enableの名前から分かる通りINSIDE発の通信の折り返しを許可してくれます。
vyos@vyos# set firewall name OUTSIDE-IN rule 10 state established enable vyos@vyos# set firewall name OUTSIDE-IN rule 10 state related enable
このRuleを適当すると外からはINSIDE発の通信の折り返しか通らなくなりますので、当然先ほどの80番も通らなくなります。
外から通信はすべてdropとしていますが、INSIDEからのWEB通信の折り返しはOKでした。
ということでrule15としてtcp8000番を許可するルールを追加します。
vyos@vyos# set firewall group port-group PORT-TCP-SERVER1 port 8000 vyos@vyos# set firewall name OUTSIDE-IN rule 15 action accept vyos@vyos# set firewall name OUTSIDE-IN rule 15 destination group port-group PORT-TCP-SERVER1 vyos@vyos# set firewall name OUTSIDE-IN rule 15 protocol tcp vyos@vyos# set firewall name OUTSIDE-IN rule 15 state new enable vyos@vyos# set firewall name OUTSIDE-IN rule 15 state established enable vyos@vyos# set firewall name OUTSIDE-IN rule 15 state related enable
tips: VyOSのNAT処理順序
outsideからの通信では、NATの後にFWルールが適用されるようです。 なので今回は8000番でFWのacceptをしています。
VyOSのFWでFTPを許可してみる
せっかくのステートフルファイアウォールなのでFTPもためしてみます。host側にvsftpdをインストールして確認します。vsftpdはデフォルトがPassiveで動作します。
さっそく以下の通りnatルールを追加します。今回はアドレスのみ変換しています。set interfaceも忘れないようにしてください。
vyos@vyos# show nat destination { rule 100 { description ftp destination { address 172.16.100.3 } inbound-interface eth0 source { } translation { address 192.168.100.11 } } source { rule 100 { outbound-interface eth0 source { address 192.168.100.11 } translation { address 172.16.100.3 } }
先ほどのfirewallルールに追加するため、port-groupを追加します。
set firewall group port-group PORT-TCP-SERVER1 port 21
結果は貼付けませんが、問題なくセッションを張ってデータもやりとりできました。vsftpdのコンフィグにpasv_enable=NOを追加してactiveモードで動作を確認しましたが、こちらも問題なかったです。
ステートフルファイアウォールの動作も問題なさそうです。
シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。
オープンソース・ソフトウェアルータVyatta入門 ――実践ルーティングから仮想化まで (Software Design plus)
- 作者: 近藤邦昭,松本直人,浅間正和,大久保修一,日本Vyattaユーザー会
- 出版社/メーカー: 技術評論社
- 発売日: 2011/06/16
- メディア: 大型本
- 購入: 1人 クリック: 33回
- この商品を含むブログ (7件) を見る
- 作者: 松本直人
- 出版社/メーカー: 技術評論社
- 発売日: 2014/06/26
- メディア: Kindle版
- この商品を含むブログを見る