æè¿ Fluentd ã®éä¿¡ãããã³ã«ã¾ãããã¢ãããã¼ãããããã«ããããããã£ã¦ãã*1ãã ãã©ãããã¯ãããã fluent-plugin-secure-forward ããµãã¼ããã¦ããå
容ã Fluentd çµè¾¼ã¿ã® forward plugin ã§ããµãã¼ããã¾ãããã¨ãããã®ã«ãªãã
ãã§åé¡ãªã®ã secure-forward 㯠SSL/TLS ã§ã®æ¥ç¶ã®ã¿ãããµãã¼ããã¦ãªãã£ããã ãã© forward ã§ã¯çã® TCP ã§éä¿¡ãã*2ã®ã§ãæ¬å½ã« secure-forward 㨠forward ããããã®å®è£
éã§äºææ§ãä¿ããã¦ããã®ããç´æ¥çã«ã¯ç¢ºèªããææ®µããªããã¨ãããã¨ã«ãªã£ã¦ãã¾ãã
TCP server ã® SSL/TLS å
䏿¹ä¸ã®ä¸ã«ã¯ SSL/TLS ã¿ã¼ããã¼ã¿ã¨ããæ©è½ããã£ã¦ããã¨ãã°ãã¼ããã©ã³ãµãªããããã®æ©è½ãæã£ã¦ãããä½ããããã¨ããã¨SSL/TLSã®å¦çã ãã¯ããã³ãã¨ã³ãã®ãµã¼ãããã£ã¦ãããã¯ã¨ã³ãã§å®éã®å¦çãæ å½ãããµã¼ãã¯SSL/TLSã®ãã¨ãªããç¥ããçã®TCPã«å¯¾ãã¦å¦çãè¡ããã¨ãããã®ã ãWebãµã¼ãã¹ã®æä¾ãããã¨ãã«ããã®æ§æã¯ãã使ãããããAWS ELBãªã©ãã¯ããå種ãã¼ããã©ã³ãµã§åºããµãã¼ãããã¦ããã
[client] -----> (SSL/TLS) -----> [Load Balancer] -----> (TCP) -----> [server]
ãã㯠Fluentd ã«ããã¦ã¯æ¬¡ã®æ§æã«ãããã
[out_secure_forward] -----> (SSL/TLS) -----> [Load Balancer] -----> (TCP) -----> [in_forward]
TCP client ã® SSL/TLS å
ãã£ã½ããæ¬çªã·ã¹ãã ã«ã¯ãã¾ãåå¨ããªãæ§æã¨ãã¦ãSSL/TLSã«å¯¾å¿ãã¦ããªãã¯ã©ã¤ã¢ã³ããç¡çç¢çã«ã§ã SSL/TLS ã®ã¿ãããµãã¼ãããªããµã¼ãã¨éä¿¡ããããããã¨ããè¦æããããããããã»ã¨ãã©ã®ã¦ã¼ã¹ã±ã¼ã¹ã¯éçºæã®ãã®ã ã¨æããå¼·ãã¦è¨ã㨠tcpdump ã§ä¸èº«ãããã£ã¦ä¾¿å©ãã¿ãã㪠SSL/TLS ã«æ£é¢ããææ¦ãããããªå©ç¹ãããã
[client] -----> (TCP) -----> [Load Balancer] -----> (SSL/TLS) -----> [server]
Fluentd ã«ããã¦ã¯ãã£ãã¨çéã®æ§æã
[out_forward] -----> (TCP) -----> [Load Balancer] -----> (SSL/TLS) -----> [in_secure_forward]
ãã©ã°ã¤ã³å®è£ ã®å¯¾ç§°æ§ãä¿ããã¦ãããã確èªããããã«ã¯ãã£ã¡ã®ãã¹ããå¿ è¦ã ã£ãã®ã§ãã
nginx 㮠stream_ssl_module 㨠stream_proxy_module
ãã¦ãã®ãããªæ§æãæå
ã§ä½ã£ã¦åä½ç¢ºèªãããã¨æã£ãã¨ãã«ã©ãããããæ¬çªã·ã¹ãã ãªã AWS ELB ã¨ã使ãã°ãããã©ã¡ãã£ã¨åä½ã試ãããã¨ããªã¬ãªã¬è¨¼ææ¸ã¨ãã§ããããå®é¨ãããã¨ãããã¨ãã«ã¯ããã«ãé¢åãããã
ãã£ããã¨ãã¦ã¯æãªããã®å®å®ã®ãã¼ã« stone ã¨ããæãä»ããã©ããã¼ãããããã«ã¡ãã£ã¨ä»æ´æããã*3ããè±èªã大åæã®OSSããã¸ã§ã¯ãã§ã¯ãªã¹ã¹ã¡ãã¥ããã
ã©ããããããªã¨æã£ã¦ããããæè¿ã® nginx ã¯TCPã®proxyãã§ãã stream ã¨ããæ©è½ãè¶³ããã¦ãã®ãæãåºãããèªåã§ã¡ããã¨ä½¿ã£ããã¨ããªãã£ããã ãã©ãããã¥ã¡ã³ããè¦ã¦ããã¨ããã«ã SSL/TLS ã®å¦çãã§ãããã«æ¸ããã¦ã¦ããã«ã使ãããã ã£ãã®ã§ã試ãã¦ã¿ãã¨ãããè¦äºã«(ç°¡åã«ï¼)使ãããæå¾ éãã«åãã½ããã¦ã§ã¢ã¨ããã®ã¯ãã°ãããããããã
ãªã stream ããã³ãã®ä»ä»å使ç¨ããã¢ã¸ã¥ã¼ã«ã¯é常㮠nginx ã§ã¯æå¹ã«ãªã£ã¦ããªããèªå㯠--with-stream --with-stream_ssl_module ãæå¹ã«ãã¦ã½ã¼ã¹ã³ã¼ããã configure && make && make install ããããã¼ã¸ã§ã³ã¯ææ°å®å®æ¿ã® 1.10.1 ã使ã£ã¦ããã
stream_ssl_module
https://nginx.org/en/docs/stream/ngx_stream_ssl_module.html
ãã㯠SSL/TLS ãªã¯ã©ã¤ã¢ã³ãããã®éä¿¡ã«ãã㦠TLS termination ã nginx ã§è¡ããTCPã®éä¿¡ã¨ãã¦ããã¯ã¨ã³ãã«æµãããã«ä½¿ããã¤ã¾ãããã£ã¡ã®æ§æç¨ã
[out_secure_forward] -----> (SSL/TLS) -----> [Load Balancer] -----> (TCP) -----> [in_forward]
ãã¡ããæå ã§é©å½ãªãªã¬ãªã¬è¨¼ææ¸ãäºåã«ç¨æãã¦ããããã®ä¸ã§ä»¥ä¸ã®ããã«è¨å®ãæ¸ãã ããç°¡åï¼
worker_processes auto; error_log /Users/tagomoris/nginx.err; events { worker_connections 64; } stream { upstream backend { server 127.0.0.1:24224; } server { listen 24284 ssl; proxy_pass backend; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; ssl_password_file /path/to/pass.txt; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; } }
port 24284 ã SSL æå¹ã«ã㦠listen ãããã®éä¿¡ãããã¯ã¨ã³ãã® Fluentd port 24224 ã«æµãããã£ã¡ã¯TCPã
æå
ãã¹ãç¨ãªã®ã§ ssl é¢é£ã®è¨å®ã¯é©å½ãæ¬çªç°å¢ã«ãããã³ãããã¦ã¯ãããªãâ¦â¦ã®ã¯ã¨ããããããã§åããç´ æ´ãããã
stream_proxy_module
https://nginx.org/en/docs/stream/ngx_stream_proxy_module.html#proxy_ssl
ãã¡ã㯠TCP ã§åããéä¿¡ã SSL/TLS ãæå¹ãªãµã¼ãã«åãã¦ãããã·ãã¦ããããã«ä½¿ãããã£ã¡ã®æ§æç¨ã
[out_forward] -----> (TCP) -----> [Load Balancer] -----> (SSL/TLS) -----> [in_secure_forward]
ãã£ã¡ã¯è¨¼ææ¸ã¾ããã®è¨å®ããããªã*4ããããã£ã¨ç°¡åããããªã
worker_processes auto; error_log /Users/tagomoris/nginx.err; events { worker_connections 64; } stream { upstream backend { server 127.0.0.1:24284; } server { listen 24224; proxy_pass backend; proxy_ssl on; } }
TCP port 24224 ã§åããéä¿¡ãããã¯ã¨ã³ãã® port 24284 ã«æµãããã®éã« SSL ãæå¹ã«ãããã¨æå®ãã¦ããã ããè¶
ç°¡åã
ãã®ã¨ãè¨¼ææ¸ã®æ¤è¨¼ã¾ããã®å¶å¾¡ã«ã¤ãã¦è¨å®ãå¿
è¦ãªããé©å® proxy_ssl_verify ãªã©ãæ£ããæå®ãã¦ããã°ãããåèªããã°ãã
ã¾ã¨ã
nginx ã® stream ããã°ãããã¦ããªãã¨ãã£ã¦ãæå
ã§ä½¿ããããã®ã§éçºæã«ãç¹ã«ä¾¿å©ã«ã使ãããã ãã¾ããã¨ãããã®ã«ãªã£ã¦ãã
ä»å¾ã®é¸æè¢ã®ã²ã¨ã¤ã¨ãã¦è¦ãã¦ããããã
*1:ãªãéå»ã®éä¿¡ãããã³ã«ã¨äºææ§ãããã®ã§å¿é æ§ã®ã¿ãªãããå®å¿ã®å 容ã§ãããã¾ã
*2:SSL/TLSã®ãµãã¼ããäºå®ã«ãããã ãã©ä»ã®ã¨ããã¯ã¾ã ã³ã¼ããç¡ã
*3:ã¨æã£ã¦ããã©ãªãã¸ããªãè¦ãã¨ã¾ã ã¢ãããã¼ãããã¦ããã ãªããããã https://osdn.jp/cvs/view/stone/stone/stone.c?view=log
*4:in_secure_forwardå´ã§ãã£ã¦ããåæã