èŠããã«ïŒ
- cfnetwork-ãããã¯ãŒã¯ãå®å
šã«æ§æããPuppetãªãœãŒã¹ããã£ã«ã¿ãªã³ã°ããããã®Puppet APIã HieraãšãPuppetã³ã³ã»ããã®ä»ã®ãããŒã¿ãããã€ããŒããšã®å®ç§ãªåéã
- cffirehol-玠æŽãããFireHOLãžã§ãã¬ãŒã¿ãŒã«åºã¥ããcfnetworkã®ãã£ã«ã¿ãŒèšå®ã®ç¹å®ã®å®è£
ã®ãã¡ã¿ãããã€ããŒã
- ãããŸã§ã®ãšãããDebian 8+ïŒJessie以äžïŒããã³Ubuntu 14.04+ïŒTrusty以äžïŒã®ã¿ããµããŒããããŠããŸã
ããŒããµã€ã¯ã«ïŒ
åæ
çãªç޹ä»ïŒ å±éãããã·ã¹ãã ã®ç£èŠãšèªååã®ãããã¯ã«ã€ããŠãèè
ãéåžžã«åŠæ³ããŠããããšãèµ·ãããŸããã é·å¹Žã«ããããééããåé¡ã®çµéšãšæ¯èŒçå°ããªçºã®è§£æ±ºçãèç©ãããŸããã ç§ã®ä»¥åã®è·å Žãé¢ããåŸã管çé åã«å
·äœçãªæè·ç©ããªãããšãæããã«ãªããŸããã ããããç§ã¯æ¬åœã«é£ã«ãããã®ããã©ãã°ããããããŸããã§ããã ããã§æ°ããèªè»¢è»ãèªçããŸããã ãããŸã§ããã€ã³ãã§ãã
泚ïŒããã¹ãå
šäœã§ãäœæè
ã®å£ããããåäŸã®èŽèŠãç®ãè³ãã¬ã€ãããä»ã®ããã·ã¢èªããšããçšèª 䜿çšãããŸãã
æ¢åã®ãœãªã¥ãŒã·ã§ã³ã«é©ããªããã®ã¯äœã§ããïŒ
- ãããã¯ãŒã¯æ§æãšãµãŒãžãããã¯ã¿ãŒã®åŒ±ãçµ±å -ïŒåïŒæ§æãšãšã©ãŒã®ãªã¹ã¯ãé«ãããšã«ãã远å ã®éšã; ã»ãã¥ãªãã£ã·ã¹ãã ãšåéã§ããåã
ã®ãµãŒãã¹ã®ãã©ã°ã¢ã³ããã¬ã€ã¢ãžã¥ãŒã«ãäœæããã®ãé£ããã
- ç£æ»ã®ããã®å¯èŠæ§ã®æ¬ åŠ -æ§æã¯ç°¡æœã§ã¯ãªããå€ãã®ãã¡ã€ã«ã«åºãã£ãŠãããã人ã«ãšã£ãŠã¯èªããªãæ¹æ³ã§ååšããŠããŸãã
- æœè±¡åã®ãªãé床ã«äœã¬ãã«ã®ãã£ã«ã¿ãŒæ§æã¯ãäžèšã®ãã€ã³ããšåãåé¡ã§ãã ããã¯ãã¢ã»ã³ãã©ãŒã§WebããŒãžãäœæããããšãšæ¯èŒã§ããŸãã
- ããã©ã«ãèšå®ã®ãã€ã³ããªãžã§ã³ã¹ãã®æ¬ åŠ -äžåšçšãªäººã«ãšã£ãŠã¯å©ç¹ã§ãããèè
ã«ãšã£ãŠã¯ããã§ã¯ãããŸããã
- éåžžããããã¯ãŒã¯ã¹ã¿ãã¯ã®ãã¥ãŒãã³ã°ã¯ãã€ãã¹ãããŸããããã©ã«ãŒãã«ã®èšå®ã¯ãã»ãã¥ãªãã£ã¯èšããŸã§ããªãããã¹ããæé©åã®åã§ãã£ãŠãæŠéã·ã¹ãã ã§èŠãããã®ãšã¯ã»ã©é ããã®ã§ãã
ãããã¯ãŒã¯ããã³ãã£ã«ã¿ãŒèšå®ã®äžè¬çãªæŠå¿µ
æ°ããçè«ã¯ãããŸãã-å¥ã®å Žæããã®ã«ãŒãã³ã
- åè«çãããã¯ãŒã¯ã€ã³ã¿ãŒãã§ã€ã¹ã«ã¯ã worldãdmzãofficeãªã©ã®äžæã®æå³ã®ããååãããworldãlocalloopbackã€ã³ã¿ãŒãã§ã€ã¹çšã«äºçŽãããŠããŸãã
- æšæºã®è«çã€ã³ã¿ãŒãã§ã€ã¹ã®èšå®ãèšå®ããããã£ã«ã¿ãŒã«ãŒã«ãžã§ãã¬ãŒã¿ãŒããã¢ã¯ã»ã¹å¯èœã«ãªããŸãã
- ç¹å¥ãªã¿ã€ãã®ã€ã³ã¿ãŒãã§ã€ã¹anyãµããŒã-ãã£ã«ã¿ãŒãžã§ãã¬ãŒã¿ãŒã¯ã決ããŠæ©èœããªãäžå¿
èŠãªã«ãŒã«ãçæããªãããã«ååã«ã¹ããŒãã§ãªããã°ãªããŸããã ããšãã°ãèš±å¯ãããã¢ãã¬ã¹ã®ãªã¹ããçºä¿¡ãŸãã¯çä¿¡ã®ãã®ã«æå®ãããŠããå Žåããã®ãããªæ¥ç¶ãååãšããŠãããã¯ãŒã¯æ§æã«ãã£ãŠæ³å®ãããŠããªãã€ã³ã¿ãŒãã§ãŒã¹ã«ã«ãŒã«ã远å ããªãã§ãã ããã
- ããŒããçŽæ¥æå®ãã代ããã«ã飿³åã䜿çšãããããŒããšãããã³ã«ã®ã»ããå
šäœãé ãããšãã§ããŸãã
- ãããã¯ãŒã¯ãšãã£ã«ã¿ãŒã®äžæçãªèª¿æŽã¯ãé害ããã®å埩äžã«éäžç®¡çããããšãªããã¿ãŒã²ãããã·ã³ã§ç°¡åã«å®è¡ããå¿
èŠããããŸãã
- AppArmorãŸãã¯SeLinuxããªã³ã«ããåã«ãé©åãªãããã¯ãŒã¯ã»ãã¥ãªãã£ãå®çŸããå¿
èŠããããŸãã
- åçä¿è·ã¯åå¥ã«å®è£
ããå¿
èŠããããŸããããã©ãã¯ãªã¹ãã€ã³ã¿ãŒãã§ã€ã¹ã¯ãã®ã¬ãã«ã§èšå®ãããŸãã
æè¡ã®éžæ
- Puppet 4 + Puppet DB + Hiera-èè
ã¯æ£çŽã«AnsibleãšChefã®å°ãªããšã1ã€ã«æãæ€ãä»ããããšããŸããããPuppetã®4çªç®ã®ããŒãžã§ã³ãç ç²ã«ãªããŸããã ãã ããAnsibleã¯å®æçãªã¡ã³ããã³ã¹ã¿ã¹ã¯ãšPuppetã®åæå±éã«ã¯è峿·±ãããã§ãã
- åºæ¬çã«ã Rubyã¯Puppetæ¡åŒµæ©èœã®å®çŸ©æžã¿ã®éžæè¢ã§ãã ãšããã§ãèè
ã¯ãããžã§ã¯ãäžã«ãã®PLãç ç©¶ããªããã°ãªããŸããã§ãããã圌ã¯ãŸã£ããåŸæããŠããŸããã
- FireHOLã¯ã äœæè
ã10幎以äžã®ã¢ã¯ãã£ããªãµãŒããŒç®¡çã®ããã«ãããã¯ãŒã¯ãã£ã«ã¿ãŒãå§èšããããšãã§ããæåã®ãµãŒãããŒãã£ã®iptablesãžã§ãã¬ãŒã¿ãŒã§ãã ä»ã®ãã¹ãŠã®ãžã§ãã¬ãŒã¿ãŒã¯äž»èгçã«ãã§ãŒãããŸãã
ã©ããã
ã€ã³ã¿ãŒãã§ã€ã¹èªäœã¯ãã¡ã€ã³ã®cfnetworkã¯ã©ã¹ãšããããã¯ãŒã¯èšå®ãšãããã¯ãŒã¯ãã£ã«ã¿ãŒãæå®ããcfnetwork::*ã¿ã€ãã®ã»ããã§æ§æãããŠããŸãã ãã¹ãŠã®èšå®ã¯ãPuppet DSLãŸãã¯Hieraãªã©ã®ããŒã¿ãããã€ããŒãä»ããŠããã°ã©ã ã§èšå®ã§ããŸãã
äžå®å
šãªãã©ã¡ãŒã¿ãŒã®ãªã¹ããå«ãAPIã®ç°¡åãªèª¬æã å®å
šçã¯è±èªã§å
¥æã§ããŸãã
cfnetworkã¯ã©ã¹
- main-- cfnetwork::ifaceèšå®- cfnetwork::ifaceã¡ã€ã³ã€ã³ã¿ãŒãã§ã€ã¹ã®- cfnetwork::ifaceã
- dns-DNSãµãŒããŒã®ãªã¹ããŸãã¯ç¹å¥ãªå€ïŒ
 - '$recurse'ããŒã«ã«ãµãŒããŒãé
眮ããŸãã
- '$serve'ã¯åãã§ããã- $service_face顧客ã«ãµãŒãã¹ãæäŸããŠããŸãã
 
- is_routerãã®ãã·ã³ã¯ãããã¯ãŒã¯ã«ãŒã¿ãŒãšããŠæ©èœããŸããïŒ
- optimize_10gbeããã©ã«ãã®TCPèšå®ã調æŽãã50ã100ããªç§ã®æšå®é
å»¶ã§ãããªãã¯ãã€ã³ã¿ãŒããããã®ä»£ããã«10 + Gbitã€ã³ã¿ãŒãã§ãŒã¹ãä»ããŠæå€§æ¥ç¶ããã©ãŒãã³ã¹ãå®çŸããŸãã
- Hieraã䜿çšãã䟿å©ãã
 ifacesãé€ããã¹ãŠã®å€ã«ã¯lookup_options: { merge: hash }ïŒdocumentationïŒããããŸãã
 - ifaces-- cfnetwork::ifaceãããªã»ã«ã³ããªã€ã³ã¿ãŒãã§ã€ã¹ã®èšå®ã®ã»ããã
- describe_services-- cfnetwork::describe_serviceïŒãµãŒãã¹ã®èª¬æïŒã®ãªãœãŒã¹ã®èª¬æã®ã»ããã
- service_ports-set *- cfnetwork::service_portïŒçä¿¡æ¥ç¶ïŒã
- client_ports-set *- cfnetwork::client_portsïŒéä¿¡æ¥ç¶ïŒã
- dnat_ports-set *- cfnetwork::dnat_portsã
- router_ports-set *- cfnetwork::router_portsã
 
ã¿ã€ãcfnetwork::ifaceã€ã³ã¿ãŒãã§ã€ã¹èšå®ã
- titleä»ã®ãªãœãŒã¹ã§äœ¿çšããã飿³èå¥åã
- device-ã·ã¹ãã ãããã¯ãŒã¯ã€ã³ã¿ãŒãã§ã€ã¹ã
- "address/cidr"圢åŒã®ãããã¯ãŒã¯ãã¹ã¯ãšäžç·ã®ã¡ã€ã³IPv4 / IPv6ã¢ãã¬ã¹ã
- extra_addressesåã圢åŒã®è¿œå ã¢ãã¬ã¹ã
- extra_routes远å ã®ã«ãŒãã£ã³ã°èšå®ïŒãã£ã«ã¿ãŒãžã§ãã¬ãŒã¿ãŒã«ãšã£ãŠãéèŠïŒã
- gateway-ãã£ã«ã¿ãŒãžã§ãã¬ãŒã¿ãŒã§äœ¿çšãããããã©ã«ãã®è¡é²ãæå³ããŸãã
- force_public = autoã¯ããã£ã«ã¿ãŒã®éåžžã«éèŠãªèšå®ã§ãã
 - ããã©ã«ãã§ã¯ã $addressã10 / 8ã172.16 / 12ãŸãã¯192.168 / 16ã«å±ããå Žåã¯falseãããã§ãªãå Žåã¯trueã§ãã
- trueïŒ
 - ã¢ãŠãããŠã³ãæ¥ç¶çšã«SNATãŸãã¯MASQUERADEãèªåçã«è¿œå ããŸãã
- DNATãå«ãã€ã³ããŠã³ãæ¥ç¶ã®TCP SYNPROXYãèªåçã«æå¹ã«ããŸã ã
- ããã©ã«ãã§REJECT代ããã«DROPããªã·ãŒãé
眮ããŸãã
- çä¿¡pingã1 /ç§ã«å¶éããŸãã 1ã€ã®IPã®ããã·ã¥å¶éãä»ããŠã
- ç¹å¥ãªãã¯ã€ããªã¹ããé€ããçä¿¡IPã®ã°ããŒãã«ãã©ãã¯ãªã¹ããèšå®ããŸãã
 
 
ã¿ã€ãcfnetwork::describe_serviceãµãŒãã¹ã®èª¬æïŒãããã³ã«ãšããŒãïŒã
- titleãã¹ãŠã®ããŒãåã«ãªãœãŒã¹ã®ååã䜿çšãããŸãã
- server-- proto/portnumã®ãµãŒããŒããŒãã®ãªã¹ãã äŸïŒ- [ 'tcp/80', 'tcp/443' ]ã
ã¿ã€ãcfnetwork::client_port çºä¿¡æ¥ç¶ã®èª¬æã
FireHOLããåãããçšèª..
- title = '<iface>:<service>[:<tag>]'
- srcã- dstã- userã- groupã- comment
ã¿ã€ãcfnetwork::service_port çä¿¡æ¥ç¶ã®èª¬æã
- title = '<iface>:<service>[:<tag>]'
- srcã- dstã- comment
ã¿ã€ãcfnetwork::router_portèš±å¯ãããã«ãŒãã£ã³ã°å¯èœãªæ¥ç¶ã®èª¬æã
- title = '<iface>/<outface>:<service>[:<tag>]'
- srcã- dstã- comment
ã¿ã€ãcfnetwork::dnat_portåæã«ã«ãŒãã£ã³ã°ãããæ¥ç¶ãšå®å
ã¢ãã¬ã¹ã®å€æã®èª¬æ
- title = '<iface>/<outface>:<service>[:<tag>]'
- srcã- dstã- comment
- to_dstãªãã€ã¬ã¯ãã¢ãã¬ã¹ïŒIPv4ããã³IPv6ïŒ
- to_portãªãã€ã¬ã¯ãããŒãïŒãªãã·ã§ã³ïŒ
çµ±äžããããã©ã¡ãŒã¿ãŒã®èª¬æïŒ
- <iface>-é¢é£ä»ãããããªãœãŒã¹ã®åå- cfnetwork::ifaceãŸãã¯ïŒ
 - 'local'-åè¿°ã®ããã«ãããŒã«ã«ãã©ãã£ãã¯ã®ã¿ã ãã ã ã å€éšIPãžã®ãã©ãã£ãã¯ã- localãééããããšã«æ³šæããŠãã ããã
- 'any'ã¯ãæããã«æªäœ¿çšã®ã«ãŒã«ãäœæããªãããã«ã- srcã- dstãããã³- to_dståºã¥ãç¹å¥ãªè€éãªãã°ã€ã³ã§ãã ãããã®ãã©ã¡ãŒã¿ãŒãååšããªãå Žåããã¹ãŠã®å¯èœãªã€ã³ã¿ãŒãã§ã€ã¹ã«è¿œå ãããŸãã ïŒããšãã°ã- localã¯- router_portã§ã¯æå³ããããŸããïŒ
 
- <outface>ã¯åãã§ããã- dnat_portãš- router_portå Žåã®2çªç®ã®ã€ã³ã¿ãŒãã§ãŒã¹çš
- <service>- cfnetwork::describe_serviceã®ãµãŒãã¹èšè¿°ã®åå- cfnetwork::describe_service
- <tag>ã¯ãªãã·ã§ã³ã®éšåã§ããã- commentãŸãã
 ãä»®æ³ãªãœãŒã¹ããæç€ºçã«äœ¿çšããå¿
èŠãªãããªãœãŒã¹åã®ç«¶åãåé¿ããããã«è¿œå ãããŸãã
- srcã- dstçºä¿¡ããã³ã¿ãŒã²ããIPv4 / IPv6ã¢ãã¬ã¹ã®ãªã¹ã
- comment-ä»»æã®1è¡ã³ã¡ã³ãïŒæ¹è¡ã¯åŒ·å¶çã«ã«ãããããŸãïŒ
- userã- group-çºä¿¡æ¥ç¶ã®ãŠãŒã¶ãŒãšã°ã«ãŒãã確èªããŸãïŒå®éã®åå·ç
è
ã¯ã- localããããã䜿çšããå¿
èŠããããŸãïŒ
ã¯ã©ã¹cfnetwork::sysctlãããã¯ãŒã¯ã¹ã¿ãã¯ã埮調æŽããæ©èœãæšæºããŒã¯ã¯ã©ã¹ãã©ã¡ãŒã¿ãŒã®åœ¢åŒã§è¡šç€ºãããŸãã
cffireholã¯ã©ã¹-ãã£ã«ã¿ãŒãžã§ãã¬ãŒã¿ãŒ
- enable=falseãã£ã«ã¿ãŒèšå®ãæåŸ
éãã§ããããšã確èªããåŸã匷å¶çã«æå¹ã«ããå¿
èŠããããŸã
- synproxy_public=truetrue-ãããªãã¯ã€ã³ã¿ãŒãã§ã€ã¹ã§SYNPROXYãã©ã°ãæå¹ã«ããŸã
- ip_whitelist/- ip_blacklistéçãªã¹ãã ããã§ã¯- ip_blacklistãèšå®ãã¹ãã§ã¯ãããŸããããçµ¶ããæŽæ°ãããããŒã¿ããŒã¹ãšåçä¿è·ã·ã¹ãã ããåçã«- ipsetã«è©°ã蟌ãå¿
èŠããããŸãããããã¯å¥ã®è©±ã§ãã
 å®çŸ©æžã¿ãããïŒ
 - whitelist4ããã³- whitelist6-IPv4ããã³IPv6- whitelist6ãããã¯ãŒã¯
- blacklist4åã
ã®IPv4- blacklist4ã¢ãã¬ã¹
- blacklist4netããã³- blacklist6net-IPv4ããã³IPv6- blacklist6netãããã¯ãŒã¯
 
Debianããã³Ubuntuã«ã¯ååãªæ°ããFireHOLããã±ãŒãžããªããæšæºã®ããã±ãŒãžã¯ãããã¯ãŒã¯ã€ã³ã¿ãŒãã§ã€ã¹ãäžããåŸã«ã®ã¿èµ·åãããããã.debããã±ãŒãžããã«ãããå¿
èŠããããŸããã
æ³šïŒ cfxxxã·ãªãŒãºã®åPuppetã¢ãžã¥ãŒã«ã®èª¬æcfxxxã¯ããæé»çã«äœæããããªãœãŒã¹ããšããã»ã¯ã·ã§ã³cfxxx ãå®çŸ©ãããŠãããã¹ãŠã®ãããã¯ãŒã¯ãã£ã«ã¿ãŒãªãœãŒã¹ã«ã€ããŠèª¬æããŠããŸãã
çããŠããäŸ
ãã®èšäºã§åãäžããŠããªãã¢ãžã¥ãŒã«ã䜿çšããVagrantã§ã®ã€ã³ãã©ã¹ãã©ã¯ãã£ã®å®å
šãªå±éã«ã€ããŠã¯ã ãã¡ããã芧ãã ãã ã
æç¢ºã«ããããã«ãã«ãŒã¿ãŒã®ãããã¯ãŒã¯æ§æãšãã£ã«ã¿ãŒã瀺ããŸãã
ããšã©èšå®
 classes: - cfnetwork #  ,     `/sbin/firehol try` #cffirehol::enable: true cfnetwork::is_router: true cfnetwork::main: device: eth1 address: '192.168.1.30/24' extra_addresses: '192.168.1.40/24' gateway: '192.168.1.1' #     force_public: true cfnetwork::ifaces: vagrant: device: eth0 method: dhcp #     extra_routes: ['10.0.1.1/25'] infradmz: device: eth2 address: '10.10.1.254/24' dbdmz: device: eth3 address: '10.10.2.254/24' webdmz: device: eth4 address: '10.10.2.254/24' cfnetwork::describe_services: testdb: server: 'tcp/1234' cfhttp: server: - 'tcp/80' - 'tcp/443' # DNAT   HTTP  (     ) cfnetwork::dnat_ports: 'main/webdmz:cfhttp': dst: '192.168.1.40' to_dst: '10.10.2.10' cfnetwork::router_ports: #   NTP, DNS, APT     'infradmz/main:cfhttp:apt': src: 'maint.example.com' 'infradmz/main:ntp': src: 'maint.example.com' #  Puppet Server (r10k)   'infradmz/main:cfhttp:puppet': {} #    DMZ     'any/infradmz:ntp': src: '10.10.0.0/16' dst: 'maint.example.com' 'any/infradmz:dns': src: '10.10.0.0/16' dst: 'maint.example.com' 'any/infradmz:aptproxy': src: '10.10.0.0/16' dst: 'maint.example.com' 'any/infradmz:puppet': src: '10.10.0.0/16' dst: 'puppet.example.com' #        'webdmz/dbdmz:testdb': {} 
çæããããã£ã«ã¿ãŒãžã§ãã¬ãŒã¿ãŒã®æ§æïŒãããè¡ãããŸãïŒ
ã¯ããåé·æ§ã®å²åã¯ãããã§ãããå°æ¥ã®ããŒãžã§ã³ã§ã¯æé©åãå®è¡ã§ããŸãã ããšãã°ã2ã€ã®ã«ãŒã«ãèšå®ããŠãæå³ããããŸããã1ã€ã¯ä»ã®ã«ãŒã«ã®ç¹å®ã®ã±ãŒã¹ã§ãã ååãšããŠãçæã³ãŒãã¯ãå®è£
æã«å€ãã®ãç¥çãæ¡ä»¶ã§ãã§ã«å€§ãããªããããŠããŸãã
ãã®æ§æã¯ã cffirehol::enable=trueãšãã«èªåçã«cffirehol::enable=true ïŒ
/etc/firehol/firehol.conf ãããã¯ãŒã¯æ§æ
ã¢ãžã¥ãŒã«èªäœã¯ãããã¯ãŒã¯èšå®ããã®å Žã§å€æŽããããšã¯ããŸãã-ããã¯ãã³ã§è¡ããåèµ·åããå¿
èŠããããŸãã
/etc/network/interfaces.d/* # # Generated by cfnetwork::iface puppet module # auto lo iface lo inet loopback source /etc/network/interfaces.d 
 ãããã«
ã芧ã®ãšããããããã¯ãŒã¯ãšãã£ã«ã¿ãŒã®æ§æã¯åºæ¬çã§ã¯ãªãŒã³ã§ç°¡æœã§ãããæãéèŠãªããšã¯ãå±±ã®ãªã倿Žã«ã¯ããžãã¯ãã³ããŒã䟿å©ã§ããããšã§ãã
æŠéã¢ãŒãã«ã¯é·ãæŽå²ã¯ãããŸããã å®è¡ã¯ãæ·±å»ãªè² è·ãªãã«å®ãµãŒããŒã®ãã¢ãšçŽ12ã®ä»®æ³ãã·ã³ã§å®è¡ãããŸãã ãããã£ãŠããã©ã³ãã£ã¢ã¯ã·ã¹ãã çŸ€ãæé·ããããšã«èå³ãããã管çãžã®ã¢ãããŒãã¯ãŸã èª¿æŽããæéããªãããå®å
šã«æºè¶³ããŠããŸããã