FortiGateでDS-Lite(IPv4 over IPv6)を設定。楽天ひかりで快適インターネット。
最近リモートでの打ち合わせが増えて、ネット環境のプライオリティが上がったので固定回線を契約しました。
打ち合わせの途中で切れるとツライ・・・。
今回は固定回線(楽天ひかり)を契約し、Fortinet社のFortiGateでDS-Lite(IPv4 over IPv6)設定、インターネットを利用するまでの手順を書きたいと思います。
楽天ひかりを契約
楽天ひかりは通信速度が遅いと評判(?)でしたが、最近 IPv6(IPoE/IPv4 over IPv6)に対応して改善されたとのことで契約。
1ヶ月ほどで開通しました。
構成
構成はこんな感じです。
①ファイアウォール(FortiGate)
今回の設定対象です。
②IPv6 IPoEネットワーク
フレッツ網内のIPv6 IPoEネットワークです。通信はここを通ります。
③IPv4 over IPv6 トンネル
FortiGateとAFTR間で張ります。
トンネリングすることでIPv6ネットワークにIPv4パケットを通すことができます。
④AFTR(Address Family Transition Router)
IPv4 over IPv6カプセル化解除とグローバルIPへのNATを行います。
VNE事業者のアルテリア・ネットワークス社が提供しています(楽天ひかりでは)。
FortiGateの設定
OSは下記バージョンを利用します。
v6.2.4 build1112 (GA)
1.IPv6有効化
IPv6が有効になっていない場合は有効にします。
「システム」→「表示機能設定」→「コアフィーチャー」から「IPv6」を有効化。
2.IPv4 over IPv6トンネル設定
以下の設定を行います。
FW# config system ipv6-tunnel
FW(ipv6-tunnel) # edit <任意のtunnel名>
FW(トンネル名) # set source <wan1に割り当てられたIPv6アドレス>
FW(トンネル名) # set destination <AFTRのアドレス>
FW(トンネル名) # set interface wan1
FW(トンネル名) # end
FW# config system ipv6-tunnel
FW(ipv6-tunnel) # edit ip6gateway
FW(ip6gateway) # set source **********
FW(ip6gateway) # set destination 2001:f60:0:200::1:1
FW(ip6gateway) # set interface wan1
FW(ip6gateway) # end
●wan1に割り当てられたIPv6アドレス
1.wan1に以下の設定を行います。
FW# config system interface
FW (interface) # edit wan1
FW (wan1) # config ipv6
FW (ipv6) # set dhcp6-prefix-delegation enable
FW (ipv6) # set autoconf enable
FW(ipv6) # end
FW(wan1) # end
2.wan1にネットワークケーブル接続します。
3.以下のコマンドを実行し、払い出されるIPv6アドレスを確認しコピーします。
”dst:”の次の数字がIPv6アドレスです。
※ff02やfe80以外からはじまるIPアドレスをコピーしてください
# diagnose ipv6 route list | grep wan1
vf=0 type=01(unicast) protocol=2(kernel) flag=004c0000 prio=256 dst:********** dev=5(wan1) pmtu=1500
4.コピーしたIPv6アドレスを「set source 」の値として設定します。
●AFTRのアドレス
楽天ひかりの公式手順を見ると、設定するAFTRのアドレスは「dgw.xpass.jp」となっていますが、FortiGateはドメインでの設定ができなかったので、一度名前解決をしてIPv6アドレス(2001:f60:0:200::1:1)を設定しています。
3.ルーティング設定
「ネットワーク」→「スタティックルート」からIPv4スタティックルートを新規作成します。
宛先を「0.0.0.0/0.0.0.0(デフォルトゲートウェイ)」に設定し、インタフェースに作成した「トンネル名(ip6gateway)」を選択します。
これですべてのIPv4通信はIPv6トンネルを通ることになります。
4.ポリシー設定
「ポリシー&オブジェクト」→「IPv4ポリシー」からポリシーを新規作成します。
発信インタフェースは作成したトンネルを指定、NATを有効化します。
※NATしなくても通信できたので必須ではないかも
着信インタフェースはlanです。
その他のパラメータは任意に設定します。
5.MSS設定
以下の設定を行います。
FW# config firewall policy
FW(policy) # edit <作成したポリシーのID>
FW(ポリシーID) # set tcp-mss-sender 1420
FW(ポリシーID) # set tcp-mss-receiver 1420
インターネット宛の通信はカプセル化(IPv4 over IPv6トンネル)しているので、IPv6ヘッダーの40Byteが追加されます。
そのためMSSに1420Byteを設定します。
1500Byte - 80Byte(IPv6ヘッダー 40Byte + IPv4ヘッダー 20Byte + TCPヘッダー20Byte)
= 1420 Byte
トンネルインタフェース(ip6gateway)にMSS・MTUが設定できなかったので、ポリシーにMSSを設定しています。
おわりに
PPPoEではなくDS-Lite(IPv4 over IPv6)で接続することによって快適に使えています。
スループットは40〜60Mbps程度出ています。
参考にしたサイト
ありがとうございます!!
FortiGateで外部リストを取り込める「Threat feeds」機能を使ってみた。
前回に引き続いてFortiGateの記事です。
FortiOS 6.0から追加された「Threat feeds」機能について概要と設定方法を書きます。
Threat feeds
「Threat feeds」はWEBサーバにあるリスト(IPアドレス等の一覧)をFortiGateに取り込み、リストにあるIPアドレス等の情報を通信制御に利用する機能です。
取り込むことが可能なリストはこちら。
- IPアドレス
- ドメイン
- URL
- マルウェアハッシュ
取り込んだリストを、セキュリティポリシーやプロファイルに適用して利用します。
たとえば、自社で独自に生成した攻撃者のIPアドレスや、外部で公開されているマルウェアサイトのURLリスト等を取り込むことが可能です。
数十、数百あるIPアドレス等のオブジェクトを手動で追加するのは手間ですが、「Threat feeds」機能を使うことで定期的にリストを取り込んで反映してくれるので運用がかなり楽になります。
また、昨今では通信が暗号化(SSL)されている場合が多いので、ファイアウォールで通信の内容を検査することができない場合も多くなりました。
ファイアウォールでSSLを復号化すれば良いのですが、ファイアウォールのリソースが足りなかったりクライアントPCに証明書を配布するのが大変・・・等、なかなか進まない場合も多いです。
「Threat feeds」機能を使うことでIPアドレスやドメインベースで悪意のある通信をブロックできるので、SSLの復号化不要でセキュリティレベルを上げることが可能です。
FortiOS 6.0では取り込んだIPアドレスリストをProxyポリシーでしか利用できませんでしたが、FortiOS 6.2からはファイアウォールポリシーで利用できるようになりました。
今回はIPアドレスリストとドメインリストの設定手順について説明します。
FortiOS 6.4.0で検証しています。
IPアドレスリスト
設定手順
1.ダッシュボードの「Security Fabric」→「External Connectors」→「IP Address」を選択します。
2.パラメータを入れます。
- Name :オブジェクトの名称
- URL of external resource:取り込むリストのURL
今回はこちらで公開しているリストを登録しました。
”Refresh Rate”はリストを更新(リストをGet)する間隔です。デフォルトは5分です。
3.オブジェクトが生成されます。
①をクリックするとリストを取り込むことが可能です。
②をクリックすると状態が表示されます(ウィンドウが表示されます)。
③をクリックすると取り込んだリストの内容を確認することが可能です。
4.ファイアウォールポリシーに作成したオブジェクトを登録します。
今回はポリシーの宛先に設定しています。
リストに入っているIPアドレスへの通信をブロックします。
動作確認
設定が完了したので動作確認を行います。
せっかくなので、動作確認は仕事で開発しているネットワークテスト製品の「NEEDLEWORK」で行います。
NEEDLEWORKは送信元と宛先のIPアドレスを仮想的に生成し、指定したプロトコルで通信することができます。
構成はこちら。
送信元IPアドレスが「172.16.0.100」で宛先IPアドレスが「4.59.56.18 」、プロトコルはPing(icmp)でテストします。
「4.59.56.18 」がIPアドレスリストに含まれているので通信がDropされるはずです。
リスト含まれていないIPアドレスは問題なく通信が通ることを確認するために、宛先IPアドレス「203.0.113.100」のテストも行います。
画面一番右に結果が出力されます。
ファイアウォールに取り込んだIPアドレスリストに含まれる4.59.56.18へのPing(icmp)がDropされていることがわかります(宛先 203.0.113.100へのPingは通っています)。
また、NEEDLEWORKでは通信フローを見ることができます。
宛先にパケットが届いていないことがわかります。
ドメインリスト
続いてドメインリストです。
基本的にIPリストと同じなので簡易版で説明します。
設定手順
ダッシュボードの「Security Fabric」→「External Connectors」を選択します。
「Domain Name」を選択し、IPアドレスリストと同様にオブジェクト名とURLを入力します。
DNS Filterプロファイルを作成します。
”Category Based Filter”のRemote Categoriesに、作成したオブジェクト(今回はdomain-block-listという名前)があるので、Actionを「Redirect to Block Portal」に設定します。
作成したDNS Filterプロファイルをファイアウォールポリシーに設定します。
動作確認
動作確認を行います。
IPアドレスリストと同じく「NEEDLEWORK」を使います。
69hack.comがリストに含まれているドメインです。
NEEDLEWORKでは、プロトコルにDNSを指定すると指定したドメインのAレコードを解決するクエリーを送信することができます。
69hack.comの通信がDropされています。
リストに含まれていないwww.naitwo.meの通信は通っています。
おわりに
「Threat feeds」は動的に更新されるIPアドレス等の情報を、簡単にファイアウォールに適応することができる便利な機能です。
ベンダーが用意しているブロックリストやシグネチャにプラスして独自の情報を入れることにより、セキュリティレベルを上げることもできます。
また、たとえばこんな要件がある場合、
PCのエンドポイント製品やIPS/IDSで攻撃・感染検知したIPアドレス情報を自動的にファイアウォールのポリシーに追加してブロックする。
スクリプトを書いてAPIを叩いてファイアウォールに設定・・・・。
しなくても、WEBサーバに置いたリスト(テキストファイル)に追記するだけで、取り込みから反映までファイアウォールでやってくれる。
色々活用できそうな機能なのでぜひ使ってみてください。
参考サイト:
docs.fortinet.com
FortiGate VMをVirtualBoxで動かす
Hyper-V、KVM、Xen、VMWare・・・。
FortiGateは多くのハイパーバイザに対応しています。
手元のMacで動かしたかったんですがVirtualBox版がなかった・・。
今回はFortiGate VMをVirtualBoxで動作させ、管理画面にブラウザで接続するまでをご紹介します。
※あくまでも検証目的での利用なので本番利用とかはしないでください
環境
以下の環境で作業しました。
macOS Catalina(10.15.4)
VirtualBox 6.0
qemu-img 4.2.0
事前準備
VMイメージを用意
VMイメージは「KVM」のものを用意します。
ファイル名は”fortios.qcow2”のはずです。
qemu-imgをインストール
Macのターミナルで下記コマンドを実行します。
$ brew install qemu
ディスクイメージのフォーマット変換
ディスクのフォーマットをVDI形式に変換します。
Macのターミナルで下記コマンドを実行します。
$ qemu-img convert -O vdi 【VMイメージのパスを指定】 【変換後のファイル名(パス)を指定】
例:
$ qemu-img convert -O vdi /Users/hoge/work/fortios.qcow2 /Users/hoge/work/fortios.vdi
VirtualBoxの設定
続いてVirtualBoxの設定です。
仮想マシンの新規作成
仮想マシンの新規作成を行います。
仮想マシンの設定1
以下の画像のように設定します。
メモリは1024MB以上であれば大丈夫です。
”Hard disk”は作成(変換した)ディスクイメージを指定します。
仮想マシンの設定2
Paravirtualization Interface(準仮想化インタフェース)は”KVM”を指定します。
仮想マシンの起動
作成した仮想マシンを起動します。
ログインプロンプトが出れば起動完了です。
初回は「ユーザ名:admin、パスワード:なし」でログインできます。
ネットワークの設定
管理画面へWEB接続するため、ネットワークの設定を行います。
※今回はホストオンリーアダプター経由で接続します
構成はこんな感じです。
メニューの「ファイル」→「ホストネットワークマネージャー」を選択。
任意のIPアドレスを設定します。
以下の例では192.168.1.1/24を設定
仮想マシンのネットワーク設定で、”アダプター1”をホストオンリーアダプターに指定、上で設定したホストオンリーアダプターを指定します。
FortiFateの設定
IPアドレスの設定
コンソールにログインし、以下のコマンドを実行します。
※Port1に”192.168.1.100/24”を設定します
# config system interface
(interface)# edit port1
(port1)# set mode static
(port1)# set ip 192.168.1.100 255.255.255.0
(port1)# end
WEBアクセス
ブラウザで”https://192.168.1.100”にアクセスします。
これで完了です。
Pythonを使ってHTTPサーバを5秒で立てる
ネットワークを構築している時に、疎通確認のためにHTTPサーバが必要になる時があります。
Apacheをインストール&設定して――までするのは面倒。
そんな時に便利な、Pythonを使ってサクッとHTTPサーバを立てる方法をご紹介します。 (意外と知らない人がいたので)
PythonでHTTPサーバを立てる
Pythonが動作すればOKなので、Linux(CentOSとか)やMacの環境であれば事前準備不要です。
以下のコマンドを実行するだけでHTTPサーバが起動します。
Pythonの” SimpleHTTPServer”というモジュールを呼び出しています。
python -m SimpleHTTPServer 8080
8080
はリッスンさせるポート番号でデフォルトは8000
です。
コマンドを実行したディレクトリがHTTPサーバのルートディレクトリになります。
実行例
以下は実際にサーバを起動させてクライアントからアクセスさせる例です。
クライアント(IP:192.168.1.1)→ サーバ(IP:192.168.1.100)
サーバ側
# python -m SimpleHTTPServer 8080 Serving HTTP on 0.0.0.0 port 8080 ... 192.168.1.1 - - [15/Aug/2019 13:18:17] "GET / HTTP/1.1" 200 -
クライアント側
# curl 192.168.1.100:8080 <html> <head> <meta charset="utf-8"> <title>hoge</title> </head> <body> hoge </body> </html>
おわりに
サクッと疎通確認をする時に便利です。
活用してみてはいかがでしょう。