2.2. Ansible を使用した IDPS ルールの自動化
IDPS を自動化するには、ids_rule
ロールを使用して Snort ルールを作成および変更します。Snort はルールベースの言語を使用しており、ネットワークトラフィックを分析して指定のルールセットと比較します。
以下のラボ環境では、Ansible セキュリティー自動化の統合に関するデモを紹介します。Attacker と呼ばれるマシンは、IDPS が実行されているターゲットマシン上で、攻撃パターンを想定してシミュレートします。
実際の設定では、他のベンダーやテクノロジーが含まれている点に注意してください。
2.2.1. 新しい IDPS ルールの作成
関連情報
ids_rule
ロールを使用して IDPS のルールおよび署名を管理します。たとえば、新しいルールを設定して、ファイアウォールで以前の攻撃に合わせた特定のパターンを検索できます。
現在、ids_rule
ロールは Snort IDPS のみをサポートしています。
前提条件
-
Snort サーバーに変更を加えるには、
root
権限が必要です。
手順
ansible-galaxy コマンドを使用して
ids_rule
ロールをインストールします。$ ansible-galaxy install ansible_security.ids_rule
add_snort_rule.yml
という名前の新しい Playbook ファイルを作成します。以下のパラメーターを設定します。- name: Add Snort rule hosts: snort
become
フラグを追加して、Ansible が権限昇格を処理するようにします。- name: Add Snort rule hosts: snort become: true
以下の変数を追加して IDPS プロバイダーの名前を指定します。
- name: Add Snort rule hosts: snort become: true vars: ids_provider: snort
Playbook に、以下のタスクおよびタスク固有の変数 (例: ルール、ルール、Snort ルールファイル、およびルールがない状態) を追加します。
- name: Add Snort rule hosts: snort become: true vars: ids_provider: snort tasks: - name: Add snort password attack rule include_role: name: "ansible_security.ids_rule" vars: ids_rule: 'alert tcp any any -> any any (msg:"Attempted /etc/passwd Attack"; uricontent:"/etc/passwd"; classtype:attempted-user; sid:99000004; priority:1; rev:1;)' ids_rules_file: '/etc/snort/rules/local.rules' ids_rule_state: present
タスクは、ターゲットマシンに変更を加えるコンポーネントです。このようなタスクを定義するロールを使用しているため、必要となるエントリーは
include_role
のみです。ids_rules_file
変数はlocal.rules
ファイルに定義された場所を指定し、ids_rule_state
変数は、ルールが存在しない場合には作成する必要があることを示しています。以下のコマンドを実行して Playbook を実行します。
$ ansible-navigator run add_snort_rule.ym --mode stdout
Playbook を実行すると、新規作成したルールに加えて、すべてのタスクが実行します。Playbook の出力では、PLAY、TASK、RUNNING HANDLER、PLAY RECAP を確認します。
検証
IDPS ルールが正常に作成されたことを確認するには、Snort サーバーに対して SSH を実行し、/etc/snort/rules/local.rules
ファイルの内容を表示します。