2
0

More than 1 year has passed since last update.

【環境構築】vSRXでHAを組んでみる

Last updated at Posted at 2023-01-02

はじめに

私は2021年に新卒でインフラエンジニアとして働いています。
その中で、個人的な学習としてESXiのサーバを構築しました。
自分専用のESXiがあると、何かと勉強の幅が広がるので、初級インフラエンジニアの方は持っておくことをおすすめします!

話がそれましたが、ファイヤーウォールであるJuniperのvSRXを、自由壊れることを気にせずいじりまくれるVM環境の作成手順をまとめました。

VM作成はすぐに終わるため、作成後HAを組みます。

VM作成とvSRXでのHAの組み方について、参考にしてみてください。

VM作成手順は下記サイトへ移動しました。

初期コンフィグ

Juniperのサイトからデフォルト設定値を探すのが苦労します。
そのため、実際に取得した初期コンフィグを張り付けます。
参考程度にしてみてください。

非常に長いので、見たい方は開いてみてください。

vSRX22.4R1 初期コンフィグ
## Last commit: yyyy-mm-dd HH:MM:SS UTC by root
version 22.4R1.10;
system {
    root-authentication {
        delete-upon-commit; ## Deletes [system autoinstallation] upon change/commit
        traceoptions {
            level verbose;
            flag {
                all;
            }
        }
    }
    services {
        ssh;
        web-management {
            http {
                interface fxp0.0;
            }
            https {
                system-generated-certificate;
                interface fxp0.0;
            }
        }
    }
    syslog {
        file interactive-commands {
            interactive-commands any;
        }
        file messages {
            any any;
            authorization info;
        }
    }
    license {
        autoupdate {
            url https://ae1.juniper.net/junos/key_retrieval;
        }
    }
}
security {
    pki {
        ca-profile ISRG_Root_X1 {
            ca-identity ISRG_Root_X1;
            pre-load;
        }
        ca-profile Lets_Encrypt {
            ca-identity Lets_Encrypt;
            enrollment {
                url https://acme-v02.api.letsencrypt.org/directory;
            }
        }
    }
    screen {
        ids-option untrust-screen {
            icmp {
                ping-death;
            }
            ip {
                source-route-option;
                tear-drop;
            }
            tcp {
                syn-flood {
                    alarm-threshold 1024;
                    attack-threshold 200;
                    source-threshold 1024;
                    destination-threshold 2048;
                    queue-size 2000; ## Warning: 'queue-size' is deprecated
                    timeout 20;
                }
                land;
            }
        }
    }
    policies {
        from-zone trust to-zone trust {
            policy default-permit {
                match {
                    source-address any;
                    destination-address any;
                    application any;
                }
                then {
                    permit;
                }
            }
        }
        from-zone trust to-zone untrust {
            policy default-permit {
                match {
                    source-address any;
                    destination-address any;
                    application any;
                }
                then {
                    permit;
                }
            }
        }
        pre-id-default-policy {
            then {
                log {
                    session-close;
                }
            }
        }
    }
    zones {
        security-zone trust {
            tcp-rst;
        }
        security-zone untrust {
            screen untrust-screen;
        }
    }
}
interfaces {
    fxp0 {
        unit 0;
    }
}
vSRX20.4R3 初期コンフィグ
## Last commit: yyyy-mm-dd HH:MM:SS UTC by root
version 20.4R3.8;
system {
    root-authentication {
        delete-upon-commit; ## Deletes [system autoinstallation] upon change/commit
        traceoptions {
            level verbose;
            flag {
                all;
            }
        }
    }
    services {
        ssh;
        web-management {
            http {
                interface fxp0.0;
            }
            https {
                system-generated-certificate;
                interface fxp0.0;
            }
        }
    }
    syslog {
        file messages {
            any any;
            authorization info;
        }
        file interactive-commands {
            interactive-commands any;
        }
    }
    license {
        autoupdate {
            url https://ae1.juniper.net/junos/key_retrieval;
        }
    }
    ## Warning: missing mandatory statement(s): 'root-authentication'
}
security {
    screen {
        ids-option untrust-screen {
            icmp {
                ping-death;
            }
            ip {
                source-route-option;
                tear-drop;
            }
            tcp {
                syn-flood {
                    alarm-threshold 1024;
                    attack-threshold 200;
                    source-threshold 1024;
                    destination-threshold 2048;
                    queue-size 2000; ## Warning: 'queue-size' is deprecated
                    timeout 20;
                }
                land;
            }
        }
    }
    policies {
        from-zone trust to-zone trust {
            policy default-permit {
                match {
                    source-address any;
                    destination-address any;
                    application any;
                }
                then {
                    permit;
                }
            }
        }
        from-zone trust to-zone untrust {
            policy default-permit {
                match {
                    source-address any;
                    destination-address any;
                    application any;
                }
                then {
                    permit;
                }
            }
        }
        pre-id-default-policy {
            then {
                log {
                    session-close;
                }
            }
        }
    }
    zones {
        security-zone trust {
            tcp-rst;
        }
        security-zone untrust {
            screen untrust-screen;
        }
    }
}
interfaces {
    fxp0 {
        unit 0;
    }
}

HA設定

本記事で作成するHA構成は以下である。
HA構成図2.png

手順について、以下記載していく。

10. ポリシー設定

ポリシーの設定には主に以下の要素があります。

  • from-zone(送信元ゾーン)
  • to-zone(宛先ゾーン)
  • policy(ポリシー名)
  • match source-address(送信元アドレス/アドレスセット)
  • match destination-address(宛先アドレス/アドレスセット)
  • match application(プロトコルやアプリケーション)
  • then permit/deny/reject(行う処理)

以下、詳細を説明していきます。

アドレス設定

アドレスは主に、アドレスブック>>アドレスセット>>アドレスをいう階層に分かれています。

  • アドレスとは
    名前の通り、IPアドレスやNWアドレスのオブジェクトを作成することができます。

  • アドレスセットとは
    アドレスを束ねたものがアドレスセットです。また、アドレスセットを束ねたアドレスセットを作成することもできます。

  • アドレスブックとは
    アドレスやアドレスセットを束ねたものがアドレスブックといいます。
    アドレスブックには、ゾーン内で作成する「ゾーンアドレスブック」と、グローバルで作成してゾーンにアタッチをする「グローバルアドレスブック」の2種類があります。
    「ゾーンアドレスブック」と「グローバルアドレスブック」は共存することができません。
    また、NATで使用できるのはグローバルアドレスブックであるなどの理由から、推奨はグローバルアドレスブックのようです。
    ソース:https://csps.hitachi-solutions.co.jp/juniper/faq/srx/fw/policy_06.html

以下はアドレス、アドレスセットおよびアドレスブック作成コマンドです。

# 172.16.0.2/32のアドレス(172_16_0_2_32)をアドレスブック(untrust_address-book)に作成
set security address-book untrust_address-book address 172_16_0_2_32 172.16.0.2/32
# 172.16.0.1/32のアドレス(172_16_0_1_32)をアドレスブック(untrust_address-book)に作成
set security address-book untrust_address-book address 172_16_0_1_32 172.16.0.1/32
# アドレスブック名(untrust_address-book)で上記で作成したアドレスをもつアドレスセット(untrust_NW)を作成
set security address-book untrust_address-book address-set untrust_NW address 172_16_0_1_32
set security address-book untrust_address-book address-set untrust_NW address 172_16_0_2_32
# アドレスブック名(untrust_address-book)でゾーン(untrust)にアタッチ
set security address-book untrust_address-book attach zone untrust

# 以下はtrust側の設定 ※詳細は省略
set security address-book trust_address-book address 192_168_2_2_32 192.168.2.2/32
set security address-book trust_address-book address 192_168_2_1_32 192.168.2.1/32
set security address-book trust_address-book address-set trust_NW address 192_168_2_1_32
set security address-book trust_address-book address-set trust_NW address 192_168_2_2_32
set security address-book trust_address-book attach zone trust

ポリシー

以下条件のポリシー設定コマンドです。

  • 送信元ゾーン:trust
  • 宛先ゾーン:untrust
  • 送信元アドレス:192_168_2_2_32(=192.168.2.2/32)
  • 宛先アドレス:untrust_NW(=172.20.0.1/32, 172.20.0.2/32)
  • プロトコル:ping
set security policies from-zone trust to-zone untrust policy trusttountrust-1 match source-address 192_168_2_2_32
set security policies from-zone trust to-zone untrust policy trusttountrust-1 match destination-address untrust_NW
set security policies from-zone trust to-zone untrust policy trusttountrust-1 match application junos-ping
set security policies from-zone trust to-zone untrust policy trusttountrust-1 then permit
  • 送信元ゾーン:untrust
  • 宛先ゾーン:trust
  • 送信元アドレス:172_16_0_2_32(=172.20.0.2/32)
  • 宛先アドレス:trust_NW(=192.168.2.1/32, 192.168.2.2/32)
  • プロトコル:ping
set security policies from-zone untrust to-zone trust policy untrusttotrust-1 match source-address 172_16_0_2_32
set security policies from-zone untrust to-zone trust policy untrusttotrust-1 match destination-address trust_NW
set security policies from-zone untrust to-zone trust policy untrusttotrust-1 match application junos-ping
set security policies from-zone untrust to-zone trust policy untrusttotrust-1 then permit

11. commit

root@SRX01# commit
node0:
configuration check succeeds
node1:
commit complete
node0:
commit complete

設定後確認

CLI

show configuration
root@SRX01> show configuration | no-more
## Last commit: yyyy-mm-dd HH:MM:SS UTC by root
version 20.4R3.8;
groups {
    node0 {
        system {
            host-name SRX01;
        }
        interfaces {
            fxp0 {
                unit 0 {
                    family inet {
                        address 192.168.1.121/24;
                    }
                }
            }
        }
    }
    node1 {
        system {
            host-name SRX02;
        }
        interfaces {
            fxp0 {
                unit 0 {
                    family inet {
                        address 192.168.1.122/24;
                    }
                }
            }
        }
    }
}
apply-groups "${node}";
system {
    root-authentication {
        encrypted-password "$6$nbdy9U7T$KWHRnGd4GGFodF/ygIjdLviQZGprIcb2OdkAos2sRfR1L2YO5CjcwqbJjXJO5tKj0Fx0RYfR6DBKSShq8xwdo1"; ## SECRET-DATA
    }
    services {
        ssh {
            root-login allow;
        }
        web-management {
            http {
                interface fxp0.0;
            }
            https {
                system-generated-certificate;
                interface fxp0.0;
            }
        }
    }
    syslog {
        file messages {
            any any;
            authorization info;
        }
        file interactive-commands {
            interactive-commands any;
        }
    }
    license {
        autoupdate {
            url https://ae1.juniper.net/junos/key_retrieval;
        }
    }
}
chassis {
    cluster {
        reth-count 2;
        redundancy-group 0 {
            node 0 priority 100;
            node 1 priority 1;
        }
        redundancy-group 1 {
            node 0 priority 100;
            node 1 priority 1;
            interface-monitor {
                ge-0/0/2 weight 255;
                ge-0/0/3 weight 255;
                ge-7/0/2 weight 255;
                ge-7/0/3 weight 255;
            }
        }
    }
}
security {
    screen {
        ids-option untrust-screen {
            icmp {
                ping-death;
            }
            ip {
                source-route-option;
                tear-drop;
            }
            tcp {
                syn-flood {
                    alarm-threshold 1024;
                    attack-threshold 200;
                    source-threshold 1024;
                    destination-threshold 2048;
                    queue-size 2000; ## Warning: 'queue-size' is deprecated
                    timeout 20;
                }
                land;
            }
        }
    }
    policies {
        from-zone trust to-zone trust {
            policy default-permit {
                match {
                    source-address any;
                    destination-address any;
                    application any;
                }
                then {
                    permit;
                }
            }
        }
        from-zone trust to-zone untrust {
            policy default-permit {
                match {
                    source-address any;
                    destination-address any;
                    application any;
                }
                then {
                    permit;
                }
            }
        }
        pre-id-default-policy {
            then {
                log {
                    session-close;
                }
            }
        }
    }
    zones {
        security-zone trust {
            tcp-rst;
            interfaces {
                reth0.0;
            }
        }
        security-zone untrust {
            screen untrust-screen;
            interfaces {
                reth1.0;
            }
        }
    }
}
interfaces {
    ge-0/0/2 {
        gigether-options {
            redundant-parent reth0;
        }
    }
    ge-0/0/3 {
        gigether-options {
            redundant-parent reth1;
        }
    }
    ge-7/0/2 {
        gigether-options {
            redundant-parent reth0;
        }
    }
    ge-7/0/3 {
        gigether-options {
            redundant-parent reth1;
        }
    }
    fab0 {
        fabric-options {
            member-interfaces {
                ge-0/0/0;
                ge-0/0/1;
            }
        }
    }
    fab1 {
        fabric-options {
            member-interfaces {
                ge-7/0/0;
                ge-7/0/1;
            }
        }
    }
    fxp0 {
        unit 0;
    }
    reth0 {
        vlan-tagging;
        redundant-ether-options {
            redundancy-group 1;
        }
        unit 0 {
            vlan-id 10;
            family inet {
                address 192.168.2.1/24;
            }
        }
    }
    reth1 {
        vlan-tagging;
        redundant-ether-options {
            redundancy-group 1;
        }
        unit 0 {
            vlan-id 20;
            family inet {
                address 172.16.0.1/24;
            }
        }
    }
}
show chassis cluster status ※クラスタ全体のステータス確認
root@SRX01> show chassis cluster status
Monitor Failure codes:
    CS  Cold Sync monitoring        FL  Fabric Connection monitoring
    GR  GRES monitoring             HW  Hardware monitoring
    IF  Interface monitoring        IP  IP monitoring
    LB  Loopback monitoring         MB  Mbuf monitoring
    NH  Nexthop monitoring          NP  NPC monitoring
    SP  SPU monitoring              SM  Schedule monitoring
    CF  Config Sync monitoring      RE  Relinquish monitoring
    IS  IRQ storm

Cluster ID: 1
Node   Priority Status               Preempt Manual   Monitor-failures

Redundancy group: 0 , Failover count: 1
node0  100      primary              no      no       None
node1  0        secondary            no      no       FL

Redundancy group: 1 , Failover count: 1
node0  100      primary              no      no       None
node1  0        secondary            no      no       IF CS FL
show chassis cluster interfaces ※クラスタインタフェースの確認
root@SRX01> show chassis cluster interfaces
Control link status: Up

Control interfaces:
    Index   Interface   Monitored-Status   Internal-SA   Security
    0       em0         Up                 Disabled      Disabled

Fabric link status: Down

Fabric interfaces:
    Name    Child-interface    Status                    Security
                               (Physical/Monitored)
    fab0    ge-0/0/0           Up   / Down               Disabled
    fab0    ge-0/0/1           Up   / Down               Disabled
    fab1    ge-7/0/0           Up   / Down               Disabled
    fab1    ge-7/0/1           Up   / Down               Disabled

Redundant-ethernet Information:
    Name         Status      Redundancy-group
    reth0        Up          1
    reth1        Up          1

Redundant-pseudo-interface Information:
    Name         Status      Redundancy-group
    lo0          Up          0

Interface Monitoring:
    Interface         Weight    Status                    Redundancy-group
                                (Physical/Monitored)
    ge-7/0/3          255       Up  /  Up                 1
    ge-7/0/2          255       Up  /  Up                 1
    ge-0/0/3          255       Up  /  Up                 1
    ge-0/0/2          255       Up  /  Up                 1

GUI

http://プライマリのIPアドレスにブラウザからアクセスをする。
本記事ではhttp://192.168.1.122にアクセスをする。

アクセス後の確認方法
1. ログインをする

0.PNG

  1. [デバイス管理] > [クラスタ管理] > [クラスター設定]へアクセスをすると、下図のようなクラスタ設定の詳細を確認できます。

Node設定
1.PNG
インターフェースやRG設定
2.PNG
RGのインターフェースモニター設定
3.PNG

他設定

他の設定については、随時追加していこうと思います。

下記サイトで追加情報があります。

ter len 0

以下を実行することでCisco機器のter len 0と同様に、セッション中に実行したshowコマンドで全てを一括表示することができます。

設定コマンドは以下です。

> set cli screen-length 0
Screen length set to 0

ユーザ作成

クラスは以下3種類あります。

クラス名 権限
super-user 全部
operator 権限のクリア、ネットワーク、リセット、トレース、および表示
read-only 読み取り
unauthorized 権限なし

設定コマンドは以下です。

set system login user <ユーザ名> class <クラス名> authentication plain-text-password

## 例:ユーザ名「TEST」、読み取り専用権限
set system login user TEST class read-only authentication plain-text-password

スタティックルーティング

# 設定コマンド
set routing-options static route 宛先NW/サブネットマスク next-hop ネクストホップIP
## 例
root# set routing-options static route 0.0.0.0/0 next-hop 192.168.2.254

# 確認
root# show | compare 
+  routing-options {
+      static {
+          route 0.0.0.0/0 next-hop 192.168.2.254;
+      }
+  }

# ルーティングテーブル確認
root> show route 
0.0.0.0/0          *[Static/5] 00:00:13
                    >  to 192.168.2.254 via fxp0.0

NTPサーバ

私の環境ではNTPサーバを別途用意しているので、NTPサーバから取得するように設定しようと思います。

設定コマンドは以下です。

# 設定コマンド
set system time-zone Asia/Tokyo
set system ntp server 192.168.1.201 prefer

# show | compare
time-zone Asia/Tokyo;
ntp {
    server 192.168.1.201 prefer;
}

SNMP

SNMPは、SNMPサーバからSRX向けへのポーリング監視と、SRXからSNMPサーバ向けへのSNMPトラップ監視があります。
それぞれの設定を記載します。

SNMPポーリング

# 設定コマンド
set snmp community <コミュニティ名> authorization <権限>
## 権限:読み書き=read-write / 読み取り専用=read-only

# SNMPに関する受信を許可する
## 例:ゾーンtrustに所属するインターフェースではSNMP受信を許可
set security zones security-zone trust host-inbound-traffic system-services snmp

# SNMPアクセス制限
set snmp community public clients <許可するIPアドレス>
set snmp community public clients <拒否するIPアドレス> restrict
## 基本的に、許可するIPアドレスを設定して、拒否するIPアドレスは0.0.0.0/0を設定すればOK
set snmp community public clients 192.168.1.1/32
set snmp community public clients 0.0.0.0/0 restrict

SNMPトラップ

# 設定コマンド
set snmp trap-group <トラップグループ名> version v2
set snmp trap-group <トラップグループ名> targets <SNMNP管理サーバIPアドレス>
set snmp trap-group <トラップグループ名> categories <トラップ内容>
## 送信するトラップ内容の一例
set snmp trap-group <トラップグループ名> categories authentication
set snmp trap-group <トラップグループ名> categories chassis
set snmp trap-group <トラップグループ名> categories link
set snmp trap-group <トラップグループ名> categories remote-operations
set snmp trap-group <トラップグループ名> categories routing
set snmp trap-group <トラップグループ名> categories startup
set snmp trap-group <トラップグループ名> categories rmon-alarm
set snmp trap-group <トラップグループ名> categories vrrp-events
set snmp trap-group <トラップグループ名> categories configuration

インターフェースにPing疎通

デフォルトで全インターフェースにPingを飛ばすことができない設定になっています。
そのため、疎通確認が必要なインターフェースでPingの許可をする必要があります。

# 設定コマンド
set security zones security-zone <ゾーン> interfaces <物理インターフェース> host-inbound-traffic system-services ping

# 例:reth0.0のIPにPingを飛ばせるようにする
set security zones security-zone Untrust interfaces reth0 host-inbound-traffic system-services ping

シャットダウン

シャットダウンは設定ではありませんが、終了する際に必ず使うコマンドなので記載します。

> request system power-off
Power Off the system ? [yes,no] (no) yes

Rollback

Rollbackは設定ではありませんが、設定を戻したいときに使用するコマンドなので記載します。

# 確認
root# rollback ?
Possible completions:
  <[Enter]>            Execute this command
  0                    2023-01-01 03:12:31 JST by root via cli 
  1                    2022-12-24 14:48:29 JST by root via cli 
  2                    2022-12-24 14:45:13 JST by root via cli 
  3                    2022-12-24 14:19:00 JST by root via other 
  revision             Rollback to given configuration revision
  |                    Pipe through a command

# Rollback
root# rollback 1 
load complete

# Commitで設定反映
root# commit 
commit complete

管理用ルーティングテーブル分離

トラフィックログ設定

トラフィックログをローカルログへ保存する・syslogサーバに転送する方法です。

モードの設定

eventまたはstreamのモードがあります。

デフォルトでは、eventが設定されています。
基本的にeventモードを使用することで、トラフィックログをローカルファイルに保存したり、syslogサーバに送信することができます。

streamモードは高負荷なトラフィック環境でセキュリティログの取得が必要な場合に推奨されます。
syslogサーバに転送することは可能ですが、ローカルファイルには保存されません。

# モード設定(eventまたはstream)
set security log event
set security log stream

ポリシー内のログアクション設定

set security policies from-zone <zone名> to-zone <zone名> policy <policy名> then log <session-init/session-close>
# session-init:セッションが開始したと同時にログに保存される
# session-close:セッションが終了したと同時にログに保存される
## 上記をともに設定すると、開始と終了時にログ保存されます。

eventモード設定

event
# ************** log設定 **************
## 1秒あたりにログをストリーミングする速度を制限(default:1500)
set security log event-rate <0~1500>
## ログフォーマット(default:Syslog)
set security log format <binary/sd-syslog/syslog>

# ************** ログファイルを指定する **************
set system syslog file <ファイル名> <facility> <severity>
set system syslog file <ファイル名> match <ログファイル内の文字列>
## 例:ファイル名「policy_session」
## ※RT_FLOWはトラフィックログに含まれる文字であるため、基本的に同じで問題ないです。
set system syslog file policy_session any any
set system syslog file policy_session match RT_FLOW

# ************** Syslogサーバーに送信する **************
set system syslog host <syslogサーバのIP> <facility> <severity>
user@srx# set system syslog host <syslogサーバのIP> match <ログファイル内の文字列>

# ************** ログの確認 **************
## ポリシーを使用した通信を発生させた後に、ログを確認します。
> show log <ファイル名>
Jan XX HH:MM:SS  ホスト名 RT_FLOW: RT_FLOW_SESSION_CREATE: session created IPアドレス①/40829->IPアドレス② 0x0 icmp IPアドレス①/40829->IPアドレス②/3 0x0 N/A N/A N/A N/A 1 policy名 from-zone to-zone 316 N/A(N/A) reth0.0 UNKNOWN UNKNOWN UNKNOWN N/A N/A -1 N/A N/A N/A Off root
Jan XX HH:MM:SS  ホスト RT_FLOW: RT_FLOW_SESSION_CLOSE: session closed response received: IPアドレス①/40829->IPアドレス②/1 0x0 icmp IPアドレス①/40829->IPアドレス②/1 0x0 N/A N/A N/A N/A 1 policy名 from-zone to-zone 314 1(84) 1(84) 3 UNKNOWN UNKNOWN N/A(N/A) reth0.0 UNKNOWN N/A N/A -1 N/A NA 0 0.0.0.0/0->0.0.0.0/0 NA NA N/A N/A Off root

streamモード設定

# ************** 送信元アドレスを指定 **************
set security log source-address <IP>

# ************** syslog送信設定 **************
set security log stream <ファイル名> format <binary/sd-syslog/syslog>
set security log stream <ファイル名> host <syslogサーバのIP>

HA切替・切戻

# RGのプライマリNodeをプライオリティを強制的に255にしてフェールオーバーさせます
request chassis cluster failover redundancy-group <プライマリを変更するRG番号> node <プライマリにするノード番号>

## RG0/1でNode0がプライマリである状態から、Node1をプライマリに変更します
request chassis cluster failover redundancy-group 0 node 1
request chassis cluster failover redundancy-group 1 node 1

# 上記コマンドでプライオリティ255にするフェイルオーバーをした後に、再度フェイルオーバー・バックをする際はプライオリティのリセットをする必要があります
## リセットをすると、設定値に戻ります
request chassis cluster failover reset

参考にしたリンク集

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0