はじめに
今どきのLinuxは、SELinuxやFirewall(ここではfirewalldやiptablesなどのソフトウェア実装を指す)がデフォルトで有効になっていることが多い。これらはインフラ屋にとって難しい存在で、セキュリティ強化をアシストしてくれる一方、これらの機能によって思い通りに操作できないことがある。
そのため
とりあえずSELinuxとFirewallは全部OFF
という人もいれば、
すぐにSELinuxとFirewallを無効にするのはエンジニアとして思考停止。お金をもらうプロフェッショナルならばセキュリティの重要度を考えるべし
という人もいる。楽観主義者と原理主義者が混在している状況だ。
独断と偏見で言わせてもらえば
「状況に応じて判断するべきもので、絶対的にどちらが優れている、という性質のものではない」
本番環境であれば、十分な対策を施したうえでのことではあるが。
他の代替策も考える
たとえばオンプレミスの場合、ルータでACLをがっちり固めていれば、OSのソフトウェアFWは正直なところ必要ないだろう。またクラウドではOS上のソフトウェアFWはトラブルにつながるので、そもそも無効化されていることがある(誤ったFW設定でssh接続できなくなる危険性など)。AWSでは当然それに変わる機能をクラウド側で備えている。
またSELinuxは、万が一潜入されても被害を最小限にできる機能だ。だからWAFを入れるなど、そもそも潜入させない仕組みも重要だろう。さらにその前に「クラウド上にログイン用のssh秘密鍵を置く」といったリテラシーの低い行為を徹底的に禁止すべきだ。
全体のメンバースキルも考える
とても困るのは、全体の状況やメンバーのスキルを考えない開発者で、自分のスキルに自信を持っているが故に、ガチガチに固めたうえ、ろくなドキュメントも無く、それを他人にも押しつけるケースだ。
これらを押しつけた結果、SELinuxやfirewalld/iptablesの操作が難しく開発・構築フェーズの生産性が上がらない。また運用フェーズで間違ったオペレーションをしてしまいトラブルが発生する。
さらに最悪なのは運用フェーズで何かトラブルがあっても、SELinuxやfirewalld/iptablesに精通しているメンバーが不在で、設定した本人以外はどうにもできないという状況だ。
セキュリティも重要だが、身の丈を超えたものは、他のトラブルを招く。
運用トラブルいろいろ
なんだか本題のSELinuxとFirewallから本題がそれてきた気がするが、このまま突っ走ることにする(笑)。
この手のトラブルはセキュリティ以外にもある。筆者は直接の当事者では無かったが、以下のような経験をしたことがある。
- 突如Webサーバが停止。Webにページアクセスできず
- 運用担当者が
service httpd status
で確認したところ停止していた - 急いで
service httpd start
でWebサーバ起動。しかし解決せず - 運用手順書を見ると、独自の起動用スクリプトがあることを発見。それを使っても起動できず
- 最終的な原因はrpmでインストールする標準のhttpd以外に、別ディレクトリにソースコードからインストールしたWebサーバがあったこと。起動/停止には独自スクリプトを使う必要があったが、
service httpd start
でWebサーバを起動してしまったためにポートを確保。そのため独自の起動用スクリプトを使っても起動できなかった
ここから得られる反省点は、標準および標準化に対する認識が不足していたこと。標準のhttpd以外にhttpdがあるならば、標準のhttpdは削除しておくべきだし、依存性で削除できないならば、起動スクリプトを差し替えてワーニングのメッセージを出すのも一つだろう。
間違う可能性があるならば、それを徹底的に排除する対策をとることも重要だ。
利用者/運用者の目線を持つこと
一般的なエンタープライズシステムは、開発期間と比べて運用期間ははるかに長い。はるかに長いゆえ、開発時のことをよく知っていた運用担当者がいなくなり、保持しているノウハウも低下する。たとえ、いたとしても記憶は薄まる。
また開発者はそのとき注力しているため十分な知識があるが、利用者/運用者はそれほどの知識を持たない。
このことを十分に理解せず
「エンジニアならば、この程度のことはできるだろう」
という高い目線で設計やドキュメントすると、利用者/運用者が使いこなせず、トラブルや問い合わせ頻発というのも、ありがちな話だ。
まとめ
全然まとまっていないが、全体を俯瞰できる高い視点に立ち、ナルシストに陥らず、運用までを考慮することが重要だろう。なんだか、タイトルと全然違う内容になっている気がするけれど、ごめんなさい。
- 全体を考えたバランス感
- 自分だけで無く、運用担当者を含めた企業全体のリテラシーを考えた設計
- 標準への順守。間違いづらい設計