RHEL6.6でWASのファイアウォール設定
正直、悪戦苦闘している。
とりあえず分かったこと。
iptablesコマンドではなく、lokkitコマンドを使うことにした。正直これでいいのか自信はない。
iptablesコマンドでは、/etc/sysconfig/system-config-firewallファイルまでは書き換わらないようだ。
そのせいでGUIで見ると反映されておらず、首を傾げてばかりいた。
WASは腐るほどポートがある。
それにサーバーが増えるとそれだけ穴を開けないといけなくなる。
困った。
仕方ない。
serverindex.xmlを舐めればいい。
ノード内の全てのサーバーの情報をマージするのは諦めた。
サーバー単位でファイルを作る。
それらのファイルを次のコマンドで組み込む。
sudo lokkit --update --custom-rules=ipv4:filter:ファイルパス
今回はIPv6は開けないつもりだ。
ファイル名は、次のようにする
ipv4_filter_addon_was_サーバー名
あとでループで回して、上記のコマンドを流すのには、前方一致しやすい名前がいい。
個々のファイルでは、まずユーザー定義チェインを作成して、最後にRETURNという構成にした。
無駄が多いが、ガチ性能を求めてないので、これでいく。
おっと、一つ盲点があった。
デバッグポートを開けてない。
7777だけ開けてあげるか。
あとは、HealthCenterの探索ポートはどこからだっけかな。
後回しにしとくー。
socket.gethostname()を使って、別ホストを弾くことができるだろう。今回は別ホストはないトポロジーなので組み込まない。
作り出すファイルには、エンドポイント名をコメントで残しておく。
サーバー名も分かり、エンドポイントも分かり、ポート番号も分かるようになる。
あと、WASをLinuxサービスにすることも試してみたが、諦めた。
プロファイル作成時にサービス登録するオプションをつけると、/etc/init.dにファイルができる。
ただし、chkconfig --addしたところで、ポート番号が分かる代物ではないように見えた。
一般的なサービスは/etc/servicesにポート番号があるからいいけど、そこは書き換わってないんだから。
サーバーエントリをリストして、
その文字列を改行コードでスプリット。
個々のサーバーエントリの構成IDから、サーバー名を取り出してお取り置き。サーバー名を元にファイルオープンして、中身にユーザー定義チェインのところを書き込み。
サーバーエントリからスペシャルエンドポインツ属性を取ってくると、[]付きで返ってきてたはずなんで、先頭末尾を除外したのちにスペースでスプリット。
スペシャルエンドポイントからエンドポイント名を取ってくる。
スペシャルエンドポイントのエンドポイント属性を取ってきて、そこのポート属性からポート番号を拾う。
最後に-j RETURNする行を追加してクローズ。
ごめんなさい、例外処理は書いてない。
日本語で書くと酷いなw
本番環境で使える代物じゃない。
開発環境だけど、ファイアウォールをオフにしない人たち向けだ。
これ、RHEL7ではやれないだろうな。
その代わりに叩かないといけないコマンドを作成してあげるか。