èŠããã«ïŒ
- cfnetwork-ãããã¯ãŒã¯ãå®å
šã«æ§æããPuppetãªãœãŒã¹ããã£ã«ã¿ãªã³ã°ããããã®Puppet APIã HieraãšãPuppetã³ã³ã»ããã®ä»ã®ãããŒã¿ãããã€ããŒããšã®å®ç§ãªåéã
- cffirehol-çŽ æŽãããFireHOLãžã§ãã¬ãŒã¿ãŒã«åºã¥ãã
cfnetwork
ã®ãã£ã«ã¿ãŒèšå®ã®ç¹å®ã®å®è£
ã®ãã¡ã¿ãããã€ããŒã - ãããŸã§ã®ãšãããDebian 8+ïŒJessie以äžïŒããã³Ubuntu 14.04+ïŒTrusty以äžïŒã®ã¿ããµããŒããããŠããŸã
ããŒããµã€ã¯ã«ïŒ
åæ
çãªçŽ¹ä»ïŒ å±éãããã·ã¹ãã ã®ç£èŠãšèªååã®ãããã¯ã«ã€ããŠãèè
ãéåžžã«åŠæ³ããŠããããšãèµ·ãããŸããã é·å¹Žã«ããããééããåé¡ã®çµéšãšæ¯èŒçå°ããªçºã®è§£æ±ºçãèç©ãããŸããã ç§ã®ä»¥åã®è·å Žãé¢ããåŸã管çé åã«å
·äœçãªæè·ç©ããªãããšãæããã«ãªããŸããã ããããç§ã¯æ¬åœã«é£ã«ãããã®ããã©ãã°ããããããŸããã§ããã ããã§æ°ããèªè»¢è»ãèªçããŸããã ãããŸã§ããã€ã³ãã§ãã
泚ïŒããã¹ãå
šäœã§ãäœæè
ã®å£ããããåäŸã®èŽèŠãç®ãè³ãã¬ã€ãããä»ã®ããã·ã¢èªããšããçšèª
代ããã«ãæå³çã«
ãŸãã¯
䜿çšãããŸãã
æ¢åã®ãœãªã¥ãŒã·ã§ã³ã«é©ããªããã®ã¯äœã§ããïŒ
- ãããã¯ãŒã¯æ§æãšãµãŒãžãããã¯ã¿ãŒã®åŒ±ãçµ±å -ïŒåïŒæ§æãšãšã©ãŒã®ãªã¹ã¯ãé«ãããšã«ããè¿œå ã®éšã; ã»ãã¥ãªãã£ã·ã¹ãã ãšåéã§ããåã
ã®ãµãŒãã¹ã®ãã©ã°ã¢ã³ããã¬ã€ã¢ãžã¥ãŒã«ãäœæããã®ãé£ããã
- ç£æ»ã®ããã®å¯èŠæ§ã®æ¬ åŠ -æ§æã¯ç°¡æœã§ã¯ãªããå€ãã®ãã¡ã€ã«ã«åºãã£ãŠãããã人ã«ãšã£ãŠã¯èªããªãæ¹æ³ã§ååšããŠããŸãã
- æœè±¡åã®ãªãé床ã«äœã¬ãã«ã®ãã£ã«ã¿ãŒæ§æã¯ãäžèšã®ãã€ã³ããšåãåé¡ã§ãã ããã¯ãã¢ã»ã³ãã©ãŒã§WebããŒãžãäœæããããšãšæ¯èŒã§ããŸãã
- ããã©ã«ãèšå®ã®ãã€ã³ããªãžã§ã³ã¹ãã®æ¬ åŠ -äžåšçšãªäººã«ãšã£ãŠã¯å©ç¹ã§ãããèè
ã«ãšã£ãŠã¯ããã§ã¯ãããŸããã
- éåžžããããã¯ãŒã¯ã¹ã¿ãã¯ã®ãã¥ãŒãã³ã°ã¯ãã€ãã¹ãããŸããããã©ã«ãŒãã«ã®èšå®ã¯ãã»ãã¥ãªãã£ã¯èšããŸã§ããªãããã¹ããæé©åã®åã§ãã£ãŠãæŠéã·ã¹ãã ã§èŠãããã®ãšã¯ã»ã©é ããã®ã§ãã
ãããã¯ãŒã¯ããã³ãã£ã«ã¿ãŒèšå®ã®äžè¬çãªæŠå¿µ
æ°ããçè«ã¯ãããŸãã-å¥ã®å Žæããã®ã«ãŒãã³ã
- åè«çãããã¯ãŒã¯ã€ã³ã¿ãŒãã§ã€ã¹ã«ã¯ã
world
ã dmz
ã office
ãªã©ã®äžæã®æå³ã®ããååãããworld
ã local
loopback
ã€ã³ã¿ãŒãã§ã€ã¹çšã«äºçŽãããŠããŸãã - æšæºã®è«çã€ã³ã¿ãŒãã§ã€ã¹ã®èšå®ãèšå®ããããã£ã«ã¿ãŒã«ãŒã«ãžã§ãã¬ãŒã¿ãŒããã¢ã¯ã»ã¹å¯èœã«ãªããŸãã
- ç¹å¥ãªã¿ã€ãã®ã€ã³ã¿ãŒãã§ã€ã¹
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=true
true-ãããªãã¯ã€ã³ã¿ãŒãã§ã€ã¹ã§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ã®ä»®æ³ãã·ã³ã§å®è¡ãããŸãã ãããã£ãŠããã©ã³ãã£ã¢ã¯ã·ã¹ãã 矀ãæé·ããããšã«èå³ãããã管çãžã®ã¢ãããŒãã¯ãŸã 調æŽããæéããªãããå®å
šã«æºè¶³ããŠããŸããã