はじめに
宣伝から入りますが、当社では「さくらのクラウド」を使ったインフラの構築・運用サービスを提供しています。
私は元々サーバエンジニアですが、最近は構築などの実務からは離れがちなので、技術を忘れないためにも最近はさくらのクラウドで色々と検証などを行っています。
そんな中で、さくらのクラウドで作成したサーバにパケットフィルタを適用してサーバを再起動したら接続できなくなった(私の設定が悪かった)みたいなことがあったので、備忘録も兼ねてブログに残しておきます。
何をした?
実際にどういうことが起きたかを説明すると、
1.さくらのクラウドでLinuxのサーバを1台作成した
2.セキュリティ強化の為にさくらのクラウドでパケットフィルタを作成してサーバに適用した
3.サーバを再起動したらサーバと通信ができなくなった
簡単に説明すると上記の通りです。
もう少し具体的に言えば、2のパケットフィルタでは、
・特定のIPからのみ接続を許可
・それ以外の通信は拒否
という設定にしたかったので、あまり何も考えず、以下のようなフィルタを作成して、サーバに適用しました。
ちなみに、さくらのパケットフィルターはデフォルトがANYでallowとなるため、特定の通信以外拒否したい場合は、明示的にdenyルールを設定する必要があります。
この設定を適用させた後にサーバを再起動したところ、サーバに接続ができなくなったというものです。
何が起こった?
再起動後にパケットフィルタで設定したIPからサーバにSSH接続しようとしたところ接続できません。
問題の切り分けのをするために、サーバに対してpingを飛ばすもタイムアウトで応答せず・・・
あれ?サーバで何か余計な設定でもしてハングアップしちゃったかな?と思い、さくらのクラウドのコンパネから接続できるコンソール経由でサーバを見てみると、あれ?起動はしているっぽい。
ん?一体なんだ?と思い、順番に切り分けしていくと、、、あれ?eth0にIPアドレスが割り当てっていない!ということが分かりました。
何かしらの理由で再起動時にIPアドレスが割り当てられなかったようです。
さくらのクラウドで共有セグメントにサーバに作成する場合、DHCPでIPが割り当てられます。
実際にeth0の設定内容を見てみても、DHCPになっています。
本来であれば自動的にIPが割り当てられるはずだけど、たまたま何かあったのかと思い、試しに手動でDHCPを走らせてみると、
普通なら数秒で応答が返ってくるはずのdhclientコマンド返ってこない・・・
しばらく待って応答が返ってきたので、改めてIPアドレスを確認するも、やっぱり割り当っていない。
なぜかと思い、syslogを見てみると要因が判明。
ログの意味的には、DHCPサーバにIPをくれと要求しているけど、応答が返ってきていない。というものです。
しかし、サーバ側でネットワーク周りの設定は何も触っていないのに、なぜなんだろ?と考えていた時に、ふと思いました。
そういえば、パケットフィルターで特定IPからの通信以外は全拒否するって設定をしてたな。と。
どう解決した?
原因が分かれば簡単です。
パケットフィルタにDHCPの通信(udp68番)を許可する設定を追加します。
設定を入れて、パケットフィルタを反映させたところ、自動的(dhcpクライアントが自動で再実行していたので)にIPアドレスが付与されました。
とりあえずこれで特定IPからこのサーバに接続できるようになりました。
ただ、これだけだと、サーバ内部から外部への通信(HTTPSやICMPなど)ができないことに気付きました。
そこで、さくらのクラウドのマニュアルページを見たところ、DHCPの件含めちゃんと書いてありました。(マニュアルをちゃんと見るのは大事です!)
ステートフルじゃないので、戻りパケットを通す設定が必要とのこと。
また、さくらのクラウドのパケットフィルタは事前に用意されたプリセットがあり、それを見ると、
こんな感じで、udp68番(DHCP)の設定や、tcpとudpの32768-61000(サーバ内部から通信した際の戻りパケットのエフェメラルポート)、icmp用の設定が用意されていました。
必要に応じて上記赤枠の設定を追加してあげることで、サーバ内からのHTTPS通信やICMPなどの疎通ができるようになりました。
まとめ
今回はさくらのクラウドのパケットフィルタについて備忘録を残してみました。
最初使った時はデフォルトはANY denyだと思っていたので、特定IPからの許可だけ入れればそれで良いと思っていましたが、試しに他のIPから接続したら普通に接続できたので、あれ?となりました。
AWSのセキュリティグループとは少し癖が違うので、マニュアルや動作検証含め、しっかりと確認しておく必要があります。
ちゃんとマニュアルを読めば書いてあるので、やっぱりマニュアルって大事だなと思った今日この頃です。
さくらのクラウドはサーバエンジア目線で言えば非常に使いやすいサービスです。(仕組みを想像しやすい)
今後も色々と試しながら、精進していきたいと思います。