はじめに
私は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設定
手順について、以下記載していく。
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
にアクセスをする。
アクセス後の確認方法
他設定
他の設定については、随時追加していこうと思います。
下記サイトで追加情報があります。
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モード設定
# ************** 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