ipfw(8)+dummynet(4)の ススメ Masuda,Masashi [email protected] http://unixluser.org/ 自己紹介 197?年東京都大田区六郷で生まれる。 千葉県松戸市で小学→大学時代をすごす。 小学生のころNEC PC-8801mkIISR を親に買ってもらう。 某月刊パソコン雑誌の投稿者コーナで道を踏み外す。 大学生1年の夏休みの時にバイトしていたアキバ某店で でいわゆるDOS/V に出会う。 友人から譲り受けたPC-9801U2 でFreeBSD(98) をはじ めて使う。 某ネットワーク機器販売会社に就職。 入社後8ヶ月経たずになぜかいきなりroot ・ネットワーク 管理の全権が降ってくる。 ipfw との出会い 以下の要件を満たすネットワークをquick に作る 必要 The Internet に接続は必要けど従来のユーザの帯域 を食われるのは困る WEB・DNS は接続必要だけど他のサーバ&ネット ワークセグメントにアクセスできるのは困る。 上記ニーズをお金を掛けずに実現 当時Open/BSD方面でのipfliter 周りのごたご た?があったのでipfw を使うことに。 今日の内容 ipfw 超基本 ipfw のstatefull filtering ipfw + dummynet(4) でのWF2Q+ その他 tips natd(8) 絡みは良くわからんのでパス ipfw を使うには(1) kld(4) つかう方法 kldload /modules/ipfw.ko & kernel コンパイル時に組み込む options IPFIREWALL ipfw を使うには(2) /etc/rc.conf で起動時に有効にする。 firewall_enable="YES" firewall_script="/usr/local/etc/rc.firewall" firewall_script の実態はただのshell script ipfw の文法とか 詳しいことはipfw のman を参照のこと # 特にBUGS セクションは重要 ;-) CiscoのACLと同じでFirst matching rule 基本的にルールにマッチしたらアクションに 従ってパケット処理→終了 Sample config is /etc/rc.firewall ipfw でのstatefull filtering(1) 基本的にはこんな感じ ipfw add check-state ipfw add allow tcp from myip to any setup keep-state \ out xmit myif ipfw add deny all from any to any ipfw でのstatefull filtering(2) Statefull filtering とは (主にTCP の)セッションの状態に応じてフィルタリング ルールマッチングしても正常なセッションではないパケットは 除外 Stateless filtering セッションの状態に関わり無く、ルールマッチングのみ でfiltering ipfw でのstatefull filtering(3) Tips? UDP/ICMP もstatefull filtering できる。 例) ipfw add allow udp from myip to nsip 53 \ keep-state out xmit myif ipfw add allow icmp from myip to any \ keep-state out xmit myif ipfw でのstatefull filtering(4) Tips? Release 4.5 から ipfw –a l ではダイナミック ルールは表示されなくなった。 ipfw –d l で出 る。 limit ipfw add allow tcp from any to me 80 \ setup limit src-addr 4 ipfwのstatefull filtering 関連のsysctl 変数 net.inet.ip.fw.dyn_ack_lifetime 300sec(default) net.inet.ip.fw.dyn_syn_lifetime 20sec(default) net.inet.ip.fw.dyn_fin_lifetime net.inet.ip.fw.dyn_rst_lifetime 1sec(default) net.inet.ip.fw.dyn_short_lifetime 30sec(default) net.inet.ip.fw.dyn_udp_lifetime 5sec(default) ipfw+dummynet pipe 仮想的な通信経路 帯域・パケットロスト率等々設定可能 queue WF2Q+ の実装 REDもつかえる queue をpipe でまとめることも可能 W2FQ+ WFQ の改良ver? FIFO ではバーストトラフィックに占有される のをトラフィックフローごとに重み付け(weight) をつけ比較的公平(fair)に待ち行列処理 (queuing)されるようにした→WFQ (参考: http://www.cisco.com/warp/public/732/Tech /wfq/) ipfw+dummynet での WF2Q+(1) ssh(tcp/22)とdns(udp53)のプライオリティ最高・ http(tcp/80)は中・その他は最低 ipfw add queue 1 tcp from me 22 to any ipfw add queue 1 udp from me 53 to any ipfw add queue 2 tcp from me 80 to any ipfw add queue 3 ip from me to any ipfw queue 1 config weight 50 pipe 2 ipfw queue 2 config weight 30 pipe 2 ipfw queue 3 config weight 10 pipe 2 ipfw pipe 2 config bw 256kbit/s ipfw+dummynet での WF2Q+(2) dst-net /28 毎にdynamic queue を生成す る。 ipfw queue 1 ip from me to any ipfw queue 1 config weight 50 pipe 1 \ mask dst-ip 0x0000000f ipfw pipe 1 config bw 1Mbit/s ipfw+dummynet での WF2Q+(3) 応用 ipfw add queue 1 tcp from me 22 to any ipfw add queue 1 udp from me 53 to any ipfw add queue 2 tcp from me 80 to any ipfw add queue 3 ip from me to any ipfw queue 1 config weight 50 pipe 2 ipfw queue 2 config weight 30 pipe 2 mask dst-ip \ 0x00000f ipfw queue 3 config weight 10 pipe 2 ipfw pipe 2 config bw 256kbit/s ipfw+dummynet での WF2Q+(4) tips pipe を通した後にさらにfirewall rule にhit さ せたい場合 sysctl net.inet.ip.fw.one_pass =0 ipfw tips?(1) デバッグhints ipfw add 65534 pass log all from any to any /var/log/security をじっと眺める。 パケットの気持ちになって考える。;-) Auth/IDENT(tcp/113) の罠 ipfw add reset tcp from any to myip 113 setup Deny しないほうが幸せになれます。 詳しくは http://unixluser.org/techmemo/ident/ ipfw tips?(2) skipto アクションでの条件分岐も出来る 使い道思いつきませんでした。;-) prob x で x%だけ反応する ipfw add prob 0.3 allow icmp from any to me \ icmptype 8 ipfw tips?(3) fwd でのpolicy routing isp1 から 10.1.1.0/29 isp2から10.2.1.0/29 割り当てがあり両方のisp につながる形で multihome する場合(FreeBSD-users-jp 66354) ipfw add fwd 10.1.1.1 ip from 10.1.1.2 to \ not 10.1.1.0/29 ipfw add fwd 10.2.1.1 ip from 10.2.1.2 to \ not 10.2.1.0/29 ipfw tips?(4) Firewall としてがちがちに固めたい人に /etc/rc.conf でkern_securelevel="3" 万が一Firewall Box に侵入されても稼動中のruleset の追加変更は不可能(see man init) Ruleset 変更するにはマシンリブート以外には無い ある程度設定がfix したらsecurelevel= “3” にするの がいいのかも。 参考URLs "Firewall 構築ガイド" <URL:http://www.tac.tsukuba.ac.jp/~hiromi/firewall.html> "Luigi Rizzo -- home page" <URL:http://info.iet.unipi.it/~luigi/> "QoS :Overview of Packet Scheduling" <URL:http://www.nanog.org/mtg-9811/ppt/wabik/> "Implementation of Worst-case Weighted fair Queueing (wf2q+)" <URL:http://www-2.cs.cmu.edu/~cheeko/wf2q+/> "Hierarchical Packet Schedulers" <URL:http://www-2.cs.cmu.edu/~hzhang/HFSC/> おわり
© Copyright 2024 ExpyDoc