dockerとiptables
クラウドサーバーを利用する場合、ファイアウォール(Firewalld/iptables)の設定に失敗して「リモート端末からサーバーへログイン出来なくなる」というリスクは絶対に避ける必要があります。そのリスク回避のため、このサーバーではファイアウォール機能を自動起動から外しています(サーバー再起動時にファイアウォールは自動起動しない)が、最近導入して楽(苦)しんでいる「docker」はファイアウォールが稼働している場合、その機能を前提としているので、ファイアウォールを後から起動した場合には、折角自動起動に成功したdockerですが、外部と通信する場合には再起動が必要です。さらにファイアウォール側に設定するdockerの仮想ネットワーク名を固定するには以下の設定が必要で、この設定が無いとdockerは毎回ランダムなインタフェース名を付けるのでファイアウォール側で毎回再設定が必要となってしまいます、、、というか「前回」の設定では再起動するとインタフェース名が変わるので気が付きました(笑)
仮想ネットワーク名を固定する設定は以下の通りです。
「com.docker.network.bridge.name:」に任意のネットワーク名を付けることが出来ます。ここで付けた名前が「ifconfig」でインタフェース名として表示されるのでFirewalld/iptablesではその名称が使用できます。
version: '3' services: app: build: ./php-fpm image: php-fpm_app networks: - docker-net ports: - 9001:9000 volumes: - /var/www/html/wp:/var/www/html/wp networks: docker-net: driver: bridge ipam: driver: default config: - subnet: 172.18.0.0/16 driver_opts: com.docker.network.bridge.name: bridge0
サーバー再起動時にファイアウォールが起動しないと危ないと思われるかもしれませんがAWS/EC2はVPC上で稼働しているため、VPCのネットワークACLで除外必須のアドレスは出禁にしています。ネットワークACLでの遮断では、そもそもネットワークトラフィックがサーバーへ到達しませんのでサーバー自体は完ぺきに守られていると言えます。サーバー上のファイアウォールはあくまでもネットワークACLで除外するためのIPアドレスのあぶり出しに使っているに過ぎません。