検索

2.7. ファイアウォールの設定

download PDF

ユーザーが、Web サーバーでホストされるページにアクセスできるように、Web サーバーにはオープンポートが必要です。問題は、Red Hat Enterprise Linux のバージョンによってファイアウォールの制御方法が異なることです。Red Hat Enterprise Linux 6 以前では、iptables を使用します。Red Hat Enterprise Linux 7 では、firewalld を使用します。

この決定は、条件付きロジックとシステムファクトを使用して Puppet が処理するものです。この手順では、オペレーティングシステムを確認し、適切なファイアウォールコマンドを実行するステートメントを追加します。

mymodule::httpd クラス内に以下のコードを追加します。

  if versioncmp($::operatingsystemmajrelease, '6') <= 0 {
    exec { 'iptables':
      command => "iptables -I INPUT 1 -p tcp -m multiport --ports ${httpd_port} -m comment --comment 'Custom HTTP Web Host' -j ACCEPT &amp;&amp; iptables-save > /etc/sysconfig/iptables",
      path => "/sbin",
      refreshonly => true,
      subscribe => Package['httpd'],
    }
    service { 'iptables':
      ensure => running,
      enable => true,
      hasrestart => true,
      subscribe => Exec['iptables'],
    }
  }
  elsif $operatingsystemmajrelease == 7 {
    exec { 'firewall-cmd':
      command => "firewall-cmd --zone=public --add-port=${httpd_port}/tcp --permanent",
      path => "/usr/bin/",
      refreshonly => true,
      subscribe => Package['httpd'],
    }
    service { 'firewalld':
      ensure => running,
      enable => true,
      hasrestart => true,
      subscribe => Exec['firewall-cmd'],
    }
  }

このコードは、以下を実行します。

  • operatingsystemmajrelease ファクトを使用して、オペレーティングシステムが Red Hat Enterprise Linux 6 か 7 であるかを判断します。
  • Red Hat Enterprise Linux 6 を使用している場合は、iptablesiptables-save を実行する実行ファイル(exec)リソースを宣言して永続的なファイアウォールルールを追加します。httpd_port 変数は、開放するポートを定義するためにインラインで使用されます。exec リソースの完了後に、iptables サービスの更新をトリガーします。これを行うには、subscribe 属性が含まれるサービスリソースを定義します。この属性は、別のリソースに変更があるかどうかを確認し、ある場合は更新を実行します。この場合は、iptables の実行可能なリソースを確認します。
  • Red Hat Enterprise Linux 7 を使用している場合は、firewall-cmd を実行する同様の実行可能ファイルリソースを宣言して、永続的なファイアウォールルールを追加します。また、httpd_port 変数は、開放するポートを定義するためにインラインで使用されます。exec リソースの完了後に、firewalld サービスの更新をトリガーしますが、subscribe 属性は firewall-cmd 実行リソースを参照します。
  • ファイアウォールの実行可能リソースのコードには、refreshonly ⇒ true および subscribe ⇒ Package['httpd'] 属性が含まれます。これにより、ファイアウォールコマンドは httpd のインストール後にのみ実行されます。これらの属性がないと、その後を実行して同じファイアウォールルールの複数のインスタンスが追加されます。

puppet apply コマンドを再度実行して、モジュールへの変更をテストします。以下の例では、Red Hat Enterprise Linux 6 をテストしています。

# puppet apply mymodule/tests/init.pp --noop
...
Notice: /Stage[main]/Mymodule::Httpd/Exec[iptables]/returns: current_value notrun, should be 0 (noop)
...
Notice: /Stage[main]/Mymodule::Httpd/Service[iptables]: Would have triggered 'refresh' from 1 events
...

これらの出力通知メッセージには、subscribe 属性の結果としてのファイアウォールルール作成の実行とそれに続くサービスの更新が表示されます。

重要

この設定は、条件付きステートメントの使用例としてのみ機能します。今後、複数のファイアウォールルールをシステムで管理する場合は、ファイアウォール用にカスタムリソースを作成することが推奨されます。実行可能リソースを使用して、多くの Bash コマンドを常にチェーンすることは推奨されていません。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.