CentOS のファイアーウォール設定を system-config-securitylevel が上書きしないようにする

SERVER


ファイアーウォールの設定ファイルを直接変更する場合

CentOS 5.3 でのファイアーウォールの設定は、システムに備わっている "system-config-securitylevel" というツールを用いて行えるようになっています。

それについては EZ-NET: Linux の使い方: CentOS 5.3 のファイアーウォールを設定する の方を参考にして頂ければと思いますが、そのツールを使用して設定を編集した場合、それをもとに設定ファイル "/etc/sysconfig/iptables" が生成されます。

このとき、もし "/etc/sysconfig/iptables" の内容を、このツールを使わずに手作業で編集していたりすると、その内容が失われてしまいます。

 

特定のポートを閉じたり開いたりするなどの簡単な制限ならば "system-config-securitylevel" でも大丈夫ですが、より複雑な制御を行おうとすると "system-config-securitylevel" では対応しきれなくなってしまいます。そんな時、設定ファイル "/etc/sysconfig/iptables" を直接編集することになるのですが、もしその後でうっかり "system-config-securitylevel" ツールを使用してしまうと、直接編集した設定内容が全て失われてしまう恐れがでてきます。

そこで、せめてうっかり設定を失ってしまう自体を避けるために、実際に使用する設定ファイルを "system-config-securitylevel" が扱う設定ファイルとは違うものにしてみることにします。

 

ファイアーウォールの設定を実際に行うスクリプトは "/etc/rc.d/init.d/iptables" になっています。

このスクリプトの次の行に注目します。

IPTABLES_DATA=/etc/sysconfig/$IPTABLES

この "IPTABLES_DATA" に設定されている値が、ファイアーウォールを設定する際に使用されるファイルとなっています。

これを編集して、例えば次のように、後ろに "-effective" という文字列を追加します。また、安全のため "IPTABLES" の名前の前後に中括弧を追記しました。

IPTABLES_DATA=/etc/sysconfig/${IPTABLES}-effective

このように編集することで、採用される設定ファイルが "/etc/rc.d/init.d/iptables" から "/etc/rc.d/init.d/iptables-effective" に変更となります。

 

あとは、現時点での元の設定ファイルをコピーしておきます。

cp /etc/sysconfig/iptables /etc/sysconfig/iptables-effective

これで、以降はこの "/etc/sysconfig/iptables-custom" を直接編集して、ファイアーウォールの設定を行って行くことになります。

Linux 起動時にも自動的に新たに用意した "/etc/sysconfig/iptables-effective" の方の設定が有効になりますし、もしも "system-config-securitylevel" ツールを使用してしまっても下記変わるのは旧来の "/etc/sysconfig/iptables" の方なので、設定が失われることによる思わぬトラブルを防ぐ効果も期待できるかと思います。

もちろん、古いほうの設定ファイル "/etc/sysconfig/iptables" もシステム上に残っているため、設定の際はそれと混同しないように注意する必要はありますけれど。

 

なお、設定ファイルを直接編集した後に、その内容を有効化したい場合には、従来通り、次のコマンドを実行します。

service iptables restart

これで、設定ファイル "/etc/sysconfig/iptables-effective" の内容が Linux システムに反映されます。