■環境
- CentOS 6.6
- nginx 最新
- Docker 最新(1.7だったかな?)
■やりたかったこと
- 社内チャットシステムの構築
- 本筋ではないので深くは触れないが、Rocket.ChatとMattermostで悩んだ挙句、Mattermostを採用している
- HTTPSでの通信
- まぁnginxとか前段に立てればラクショーだよね
- 社内システムなのでオレオレ証明書でモウマンタイ
- どうせならDocker使ってみたい
- ナウい(死語)ものには触れてみたい
■問題の概要
こちらの記事を参考に「Rocket.Chat」を立てようとしていた。
Dockerのインストール、HTTPでのアクセスまでは問題なくOK!
あとは、HTTPS のみ でしか構築の許可が出なかったため、オレオレ証明書作ってnginxを通してアクセスさせた。アクセスすることもOK!
しかし
HTTPもアクセスできないようにしたいので、「よっし、Linuxだしiptables
だな!」と、22/443以外を閉じてみる。だけど、もともと初期構築時に開けたHTTP通信(上記参考記事でいう55555ポート)でのアクセスが塞がれない。。アクセスできるんですけどーwwとなった。
■解決した方法
自信がないので、詳しい方、アドバイスいただけると助かります。。。。
どうやらNATテーブルにDNATの設定が 勝手に 自動的に追加されるようなのでそこを塞ぐ。
#現在の設定を確認
iptables -t nat -L
#DNATに流れる設定を削除して、443からのみ流れるように変更する
iptables -t nat -D PREROUTING -p all -m addrtype --dst-type LOCAL -j DOCKER
iptables -t nat -A PREROUTING -p tcp --dport 443 -s localhost --sport 55555 -j DOCKER
これで https://example.com/ にアクセスすると無事に接続可能、かつ、
http://example.com:55555/ にアクセスしても 404 になることを確認!
いやーDocker難しい。
Linuxの知識もあんまりない中での挑戦だったのでかなり苦労しました