2017/06/06

JP1/AJS3環境でRHEL7/CentOS7ファイアウォールを設定する

はじめに

JP1/Automatic Job Management System 3 (JP1/AJS3)環境において、firewalldを設定する方法を紹介する。

参考: 『JP1/AJS3環境でWindowsファイアウォールを設定する

JP1/Automatic Job Management System 3 (JP1/AJS3)は、業務を自動化する製品。
詳細は、マニュアルを参照。

JP1/AJS3 を構成する主な要素には、マネージャホスト・エージェントホストがある。
マネージャホストは、エージェントホストを制御し、ジョブを実行させる。
マネージャホストは、エージェントホストの機能を含む。
このため、マネージャホスト自身にジョブを実行させることもできる。

JP1/AJS3 は、企業内ネットワーク内部で使用されることが多い。
このため、各構成要素のパーソナルファイアウォールが無効化されていても、一概に安全でないとは言えない。
しかし、無効化しない方がセキュリティ上より安全である。

RHEL 7/CentOS 7では、firewalld がパーソナルファイアウォール機能を提供する。

JP1/AJS3 環境でのファイアウォール設定要件については、以下を参考にした。


ファイアウォールの設定方針

RHEL 7/CentOS 7では、パーソナルファイアウォールとして、firewalld と iptables が利用できる。この iptables は、TCP/UDP ポートを一つづつ追加していくか、連続した TCP/UDP ポートを追加するかのいずれかの方法でルールを定義する。
一方、firewalld は、iptables と同様の方法に加えて、複数の TCP/UDP ポートをひとまとめにして扱うことができる。
ひとまとめにした TCP/UDP ポートは、サービスと呼ばれ、名前を付けて扱うことが出来る。

マネージャホストおよびエージェントホストの両方で同じサービスを定義し、必要に応じてサービス単位で通信を許可する。


Firewalldサービスの定義

Firewalld のサービスは、/etc/firewalld/services以下に XML ファイルを作成することで定義する。

Firewalldサービスの定義/設定前状態の確認

マネージャホストおよびエージェントホストで以下の通り実行する。
定義したサービスの一覧をfirewall-cmd --get-servicesで得ることができる。

[root@agent ~]# cd /etc/firewalld/services
[root@agent services]# ls *JP1*
ls: cannot access *JP1*: No such file or directory
[root@agent services]# for SERVICE in $(firewall-cmd --get-services); do [[ $SERVICE = *JP1* ]] && echo $SERVICE; done
[root@agent services]#

何も定義されていないことが解る。

Firewalldサービスの定義/設定


マネージャホストおよびエージェントホストで以下の通り実行する。

[root@agent services]# cat <<'EOF' > JP1Base-to-JP1Base.xml
> <?xml version="1.0" encoding="utf-8"?>
> <service>
>   <short>JP1Base-to-JP1Base</short>
>   <description>JP1/Base to JP1/Base</description>
>   <port protocol="tcp" port="20098"/>
>   <port protocol="tcp" port="20306"/>
> </service>
> EOF
[root@agent services]# cat <<'EOF' > JP1AJS3-to-JP1Base.xml
> <?xml version="1.0" encoding="utf-8"?>
> <service>
>   <short>JP1AJS3-to-JP1Base</short>
>   <description>JP1/AJS3 (both Manager and Agent) to JP1/Base</description>
>   <port protocol="tcp" port="20240"/>
> </service>
> EOF
[root@agent services]# cat <<'EOF' > JP1AJS3-View-to-Manager.xml
> <?xml version="1.0" encoding="utf-8"?>
> <service>
>   <short>JP1AJS3-View-to-Manager</short>
>   <description>JP1/AJS3 View to JP1/AJS3 Manaer</description>
>   <port protocol="tcp" port="20244"/>
> </service>
> EOF
[root@agent services]# cat <<'EOF' > JP1AJS3-Agent-to-Manager.xml
> <?xml version="1.0" encoding="utf-8"?>
> <service>
>   <short>JP1AJS3-Agent-to-Manager</short>
>   <description>JP1/AJS3 Agent to JP1/AJS3 Manaer</description>
>   <port protocol="tcp" port="20241"/>
>   <port protocol="tcp" port="20243"/>
>   <port protocol="tcp" port="20246"/>
>   <port protocol="tcp" port="20301"/>
>   <port protocol="tcp" port="22251"/>
> </service>
> EOF
[root@agent services]# cat <<'EOF' > JP1AJS3-Manager-to-Agent.xml
> <?xml version="1.0" encoding="utf-8"?>
> <service>
>   <short>JP1AJS3-Manager-to-Agent</short>
>   <description>JP1/AJS3 Manager to JP1/AJS3 Aent</description>
>   <port protocol="tcp" port="20242"/>
>   <port protocol="tcp" port="20247"/>
>   <port protocol="tcp" port="20300"/>
>   <port protocol="tcp" port="22251"/>
>   <port protocol="tcp" port="23139"/>
> </service>
> EOF
[root@agent services]# cat <<'EOF' > JP1AJS3-Manager-to-Manager.xml
> <?xml version="1.0" encoding="utf-8"?>
> <service>
>   <short>JP1AJS3-Manager-to-Manager</short>
>   <description>JP1/AJS3 Manager to JP1/AJS3 Manager</description>
>   <port protocol="tcp" port="20241"/>
>   <port protocol="tcp" port="20244"/>
>   <port protocol="tcp" port="20245"/>
>   <port protocol="tcp" port="23160"/>
> </service>
> EOF
[root@agent services]# cat <<'EOF' > JP1AJS3-SDK-to-Manager.xml
> <?xml version="1.0" encoding="utf-8"?>
> <service>
>   <short>JP1AJS3-SDK-to-Manager</short>
>   <description>JP1/AJS3 SDK to JP1/AJS3 Manager</description>
>   <port protocol="tcp" port="22250"/>
> </service>
> EOF
[root@agent services]# cat <<'EOF' > JP1AJS3-Agent-to-Agent.xml
> <?xml version="1.0" encoding="utf-8"?>
> <service>
>   <short>JP1AJS3-Agent-to-Agent</short>
>   <description>JP1/AJS3 Agent to JP1/AJS3 Agent</description>
>   <port protocol="tcp" port="22251"/>
>   <port protocol="udp" port="22251"/>
> </service>
> EOF
[root@agent services]# cat <<'EOF' > JP1AJS3-Web-Console-to-Manager.xml
> <?xml version="1.0" encoding="utf-8"?>
> <service>
>   <short>JP1AJS3-Web-Console-to-Manager</short>
>   <description>JP1/AJS3 Web Console to JP1/AJS3 Manager</description>
>   <port protocol="tcp" port="22250"/>
> </service>
> EOF
[root@agent services]# cat <<'EOF' > Web-Browser-to-JP1AJS3-Web-Console.xml
> <?xml version="1.0" encoding="utf-8"?>
> <service>
>   <short>Web-Browser-to-JP1AJS3-Web-Console</short>
>   <description>Web Browser to JP1/AJS3 Web Console</description>
>   <port protocol="tcp" port="22252"/>
>   <port protocol="tcp" port="22253"/>
> </service>
> EOF
[root@agent services]#


Firewalld サービスの定義/設定後状態の確認

マネージャホストおよびエージェントホストで以下の通り実行する。
定義されたサービスは、定義をfirewall-cmd --reloadでリロードすることによって反映される。

[root@agent services]# ls *JP1*
JP1AJS3-Agent-to-Agent.xml      JP1AJS3-SDK-to-Manager.xml          JP1Base-to-JP1Base.xml
JP1AJS3-Agent-to-Manager.xml    JP1AJS3-View-to-Manager.xml         Web-Browser-to-JP1AJS3-Web-Console.xml
JP1AJS3-Manager-to-Agent.xml    JP1AJS3-Web-Console-to-Manager.xml
JP1AJS3-Manager-to-Manager.xml  JP1AJS3-to-JP1Base.xml
[root@agent services]# firewall-cmd --reload
success
[root@agent services]# for SERVICE in $(firewall-cmd --get-services); do [[ $SERVICE = *JP1* ]] && echo $SERVICE; done
JP1AJS3-Agent-to-Agent
JP1AJS3-Agent-to-Manager
JP1AJS3-Manager-to-Agent
JP1AJS3-Manager-to-Manager
JP1AJS3-SDK-to-Manager
JP1AJS3-View-to-Manager
JP1AJS3-Web-Console-to-Manager
JP1AJS3-to-JP1Base
JP1Base-to-JP1Base
Web-Browser-to-JP1AJS3-Web-Console
[root@agent services]# for SERVICE in $(firewall-cmd --get-services); do if [[ $SERVICE = *JP1* ]]; then echo "### $SERVICE"; firewall-cmd --info-service=$SERVICE; fi; done
### JP1AJS3-Agent-to-Agent
JP1AJS3-Agent-to-Agent
  ports: 22251/tcp 22251/udp
  protocols:
  source-ports:
  modules:
  destination:
### JP1AJS3-Agent-to-Manager
JP1AJS3-Agent-to-Manager
  ports: 20241/tcp 20243/tcp 20246/tcp 20301/tcp 22251/tcp
  protocols:
  source-ports:
  modules:
  destination:
### JP1AJS3-Manager-to-Agent
JP1AJS3-Manager-to-Agent
  ports: 20242/tcp 20247/tcp 20300/tcp 22251/tcp 23139/tcp
  protocols:
  source-ports:
  modules:
  destination:
### JP1AJS3-Manager-to-Manager
JP1AJS3-Manager-to-Manager
  ports: 20241/tcp 20244/tcp 20245/tcp 23160/tcp
  protocols:
  source-ports:
  modules:
  destination:
### JP1AJS3-SDK-to-Manager
JP1AJS3-SDK-to-Manager
  ports: 22250/tcp
  protocols:
  source-ports:
  modules:
  destination:
### JP1AJS3-View-to-Manager
JP1AJS3-View-to-Manager
  ports: 20244/tcp
  protocols:
  source-ports:
  modules:
  destination:
### JP1AJS3-Web-Console-to-Manager
JP1AJS3-Web-Console-to-Manager
  ports: 22250/tcp
  protocols:
  source-ports:
  modules:
  destination:
### JP1AJS3-to-JP1Base
JP1AJS3-to-JP1Base
  ports: 20240/tcp
  protocols:
  source-ports:
  modules:
  destination:
### JP1Base-to-JP1Base
JP1Base-to-JP1Base
  ports: 20098/tcp 20306/tcp
  protocols:
  source-ports:
  modules:
  destination:
### Web-Browser-to-JP1AJS3-Web-Console
Web-Browser-to-JP1AJS3-Web-Console
  ports: 22252/tcp 22253/tcp
  protocols:
  source-ports:
  modules:
  destination:
[root@agent services]#


Firewalld ルールの定義

Firewalld ルールの定義/設定前状態の確認

マネージャホストおよびエージェントホストで以下の通り実行する。

[root@agent services]# firewall-cmd --get-default-zone
public
[root@agent services]# firewall-cmd --info-zone=public
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens160
  sources:
  services: dhcpv6-client http https ntp smtp ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:

[root@agent services]#

Firewalld ルールの定義/設定

エージェントホストで以下の通り実行する。

[root@agent services]# firewall-cmd --permanent --zone=public --add-service=JP1Base-to-JP1Base --add-service=JP1AJS3-to-JP1Base
success
[root@agent services]# firewall-cmd --permanent --zone=public --add-service=JP1AJS3-Manager-to-Agent --add-service=JP1AJS3-Agent-to-Agent
success
[root@agent services]#

マネージャホストでは、これらのサービスの他に、JP1AJS3-Agent-to-Manager、JP1AJS3-Manager-to-Manager、JP1AJS3-SDK-to-Manager、JP1AJS3-View-to-ManagerおよびJP1AJS3-Web-Console-to-Managerを追加する。

Firewalld ルールの定義/設定後状態の確認

マネージャホストおよびエージェントホストで以下の通り実行する。

[root@agent services]# firewall-cmd --reload
success
[root@agent services]# firewall-cmd --info-zone=public
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens160
  sources:
  services: JP1AJS3-Agent-to-Agent JP1AJS3-Manager-to-Agent JP1AJS3-to-JP1Base JP1Base-to-JP1Base dhcpv6-client http https ntp smtp ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:

[root@agent services]#

2017/05/29

JP1/AJS3環境でWindowsファイアウォールを設定する

はじめに

JP1/Automatic Job Management System 3 (JP1/AJS3)環境において、「セキュリティが強化された Windows ファイアウォール」を Windows Powershell を用いて設定する方法を紹介する。

参考: 『JP1/AJS3環境でRHEL7/CentOS7ファイアウォールを設定する

JP1/Automatic Job Management System 3 (JP1/AJS3)は、業務を自動化する製品。
詳細は、マニュアルを参照。

JP1/AJS3 を構成する主な要素には、マネージャホスト・エージェントホストがある。
マネージャホストは、エージェントホストを制御し、ジョブを実行させる。
マネージャホストは、エージェントホストの機能を含む。
このため、マネージャホスト自身にジョブを実行させることもできる。

JP1/AJS3 は、企業内ネットワーク内部で使用されることが多い。
このため、各構成要素のパーソナルファイアウォールが無効化されていても、一概に安全でないとは言えない。
しかし、無効化しない方がセキュリティ上より安全である。

Windows Serverでは、「セキュリティが強化された Windows ファイアウォール」がパーソナルファイアウォール機能を提供する。
これをGUIで設定する方法もあるが、今回はPowershellを用いて設定する。

JP1/AJS3 環境でのファイアウォール設定要件については、以下を参考にした。

ファイアウォールの設定方針

「セキュリティが強化された Windows ファイアウォール」の流儀に従い、マネージャホストおよびエージェントホストの両方で同じルールを定義し、必要に応じてルールを有効化して使うことにする。
JP1/Base、JP1/AJS3 - ManagerおよびJP1/AJS3 - Agent必要となるファイアウォールルールをグループ化し、グループ名をぞれぞれ、JP1Base、JP1AJS3-ManagerおよびJP1AJS3-Agentとする。
エージェントホストでは、JP1BaseおよびJP1AJS3-Agentに属するルールのみを有効化する。
マネージャホストでは、JP1Base、JP1AJS3-ManagerおよびJP1AJS3-Agentすべてのグループに属するルールを有効化する。
これは、前述の通り、マネージャホストがエージェントホストの機能も併せ持つためである。

なお、以下の実行例では、Powershell のリモート処理機能を用いて作業した。
このため、実行例中のコマンドプロンプトには、[ホスト名]の様にホスト名が含まれている。
マネージャホストのホスト名をmanager、エージェントホストのホスト名をagentとしている。

ルールの定義

Powershellでは、「セキュリティが強化された Windows ファイアウォール」を操作するコマンドレットが提供されている。
新規にルールを作成するためには、New-NetFirewallRuleコマンドレットを使う。
このコマンドレットをそのまま使うとコマンドが長くなるため、作業に先立って、ヘルパ関数fwrhelperを定義する。

このヘルパ関数で定義されるルールは、一旦無効化(-Enabled False)されていることに注意。
従って、定義に続いて、必要なルールのみを有効化する必要がある。

また、適用対象のプロファイルは、Public以外のDomainおよびPrivateとしている。
Publicプロファイルは、信頼性の低い接続の場合に使われるため、JP1/AJS3環境には適切でない場合が多いだろう。

ヘルパ関数fwrhelperの定義

マネージャホストおよびエージェントホストで以下の通り実行する。

[agent]: PS C:\> function fwrhelper($Group,$Name,$DisplayName,$Protocol,$LocalPort){
>>     New-NetFirewallRule -Profile Domain,Private -Action Allow -Enabled False -Direction Inbound `
>>         -Group $Group `
>>         -Name $Name `
>>         -DisplayName $DisplayName `
>>         -Protocol $Protocol `
>>         -LocalPort $LocalPort | ft
>> }
[agent]: PS C:\>

JP1/Base 用ルールの定義

JP1/Base 用のルールを定義する。
マネージャホストおよびエージェントホストで以下の通り実行する。

[agent]: PS C:\> fwrhelper JP1AJS3-Manager JP1AJS3-Agent-to-Manager 'JP1/AJS3 Agent to JP1/AJS3 Manaer' TCP @(20241,20243,20246,20301,22251)

Name                     DisplayName                       DisplayGroup    Enabled Profile         Direction Action
----                     -----------                       ------------    ------- -------         --------- ------
JP1AJS3-Agent-to-Manager JP1/AJS3 Agent to JP1/AJS3 Manaer JP1AJS3-Manager False   Domain, Private Inbound   Allow


[agent]: PS C:\> fwrhelper JP1AJS3-Agent JP1AJS3-Manager-to-Agent 'JP1/AJS3 Manager to JP1/AJS3 Aent' TCP @(20242,20247,20300,22251,23139)

Name                     DisplayName                       DisplayGroup  Enabled Profile         Direction Action
----                     -----------                       ------------  ------- -------         --------- ------
JP1AJS3-Manager-to-Agent JP1/AJS3 Manager to JP1/AJS3 Aent JP1AJS3-Agent False   Domain, Private Inbound   Allow


[agent]: PS C:\> fwrhelper JP1AJS3-Manager JP1AJS3-Manager-to-Manager 'JP1/AJS3 Manager to JP1/AJS3 Manager' TCP @(20241,20244,20245,23160)

Name                       DisplayName                          DisplayGroup    Enabled Profile         Direction Actio
                                                                                                                  n
----                       -----------                          ------------    ------- -------         --------- -----
JP1AJS3-Manager-to-Manager JP1/AJS3 Manager to JP1/AJS3 Manager JP1AJS3-Manager False   Domain, Private Inbound   Allow


[agent]: PS C:\> fwrhelper JP1AJS3-Manager JP1AJS3-SDK-to-Manager 'JP1/AJS3 SDK to JP1/AJS3 Manager' TCP @(22250)

Name                   DisplayName                      DisplayGroup    Enabled Profile         Direction Action
----                   -----------                      ------------    ------- -------         --------- ------
JP1AJS3-SDK-to-Manager JP1/AJS3 SDK to JP1/AJS3 Manager JP1AJS3-Manager False   Domain, Private Inbound   Allow


[agent]: PS C:\> fwrhelper JP1AJS3-Agent JP1AJS3-Agent-to-Agent-TCP 'JP1/AJS3 Agent to JP1/AJS3 Agent (TCP)' TCP @(22251)

Name                       DisplayName                            DisplayGroup  Enabled Profile         Direction Actio
                                                                                                                  n
----                       -----------                            ------------  ------- -------         --------- -----
JP1AJS3-Agent-to-Agent-TCP JP1/AJS3 Agent to JP1/AJS3 Agent (TCP) JP1AJS3-Agent False   Domain, Private Inbound   Allow


[agent]: PS C:\> fwrhelper JP1AJS3-Agent JP1AJS3-Agent-to-Agent-UDP 'JP1/AJS3 Agent to JP1/AJS3 Agent (UDP)' UDP @(22251)

Name                       DisplayName                            DisplayGroup  Enabled Profile         Direction Actio
                                                                                                                  n
----                       -----------                            ------------  ------- -------         --------- -----
JP1AJS3-Agent-to-Agent-UDP JP1/AJS3 Agent to JP1/AJS3 Agent (UDP) JP1AJS3-Agent False   Domain, Private Inbound   Allow


[agent]: PS C:\> fwrhelper JP1AJS3-Manager JP1AJS3-Web-Console-to-Manager 'JP1/AJS3 Web Console to JP1/AJS3 Manager' TCP @(22250)

Name                           DisplayName                              DisplayGroup    Enabled Profile         Directi
                                                                                                                on
----                           -----------                              ------------    ------- -------         -------
JP1AJS3-Web-Console-to-Manager JP1/AJS3 Web Console to JP1/AJS3 Manager JP1AJS3-Manager False   Domain, Private Inbound


[agent]: PS C:\> fwrhelper JP1AJS3-Web-Console Web-Browser-to-JP1AJS3-Web-Console 'Web Browser to JP1/AJS3 Web Console' TCP @(22252,22253)

Name                               DisplayName                         DisplayGroup        Enabled Profile         Dire
                                                                                                                   ctio
                                                                                                                   n
----                               -----------                         ------------        ------- -------         ----
Web-Browser-to-JP1AJS3-Web-Console Web Browser to JP1/AJS3 Web Console JP1AJS3-Web-Console False   Domain, Private I...


[agent]: PS C:\>

定義されたルールの確認

定義されたルールを確認してみよう。
マネージャホストおよびエージェントホストで以下の通り実行する。

[agent]: PS C:\> Get-NetFirewallRule -Group JP1* | ft

Name                               DisplayName                              DisplayGroup        Enabled Profile
----                               -----------                              ------------        ------- -------
JP1Base-to-JP1Base                 JP1/Base to JP1/Base                     JP1Base             False   Domain, Private
JP1AJS3-to-JP1Base                 JP1/AJS3 to JP1/Base                     JP1Base             False   Domain, Private
JP1AJS3-Agent-to-Manager           JP1/AJS3 Agent to JP1/AJS3 Manaer        JP1AJS3-Manager     False   Domain, Private
JP1AJS3-Manager-to-Agent           JP1/AJS3 Manager to JP1/AJS3 Aent        JP1AJS3-Agent       False   Domain, Private
JP1AJS3-Manager-to-Manager         JP1/AJS3 Manager to JP1/AJS3 Manager     JP1AJS3-Manager     False   Domain, Private
JP1AJS3-SDK-to-Manager             JP1/AJS3 SDK to JP1/AJS3 Manager         JP1AJS3-Manager     False   Domain, Private
JP1AJS3-Agent-to-Agent-TCP         JP1/AJS3 Agent to JP1/AJS3 Agent (TCP)   JP1AJS3-Agent       False   Domain, Private
JP1AJS3-Agent-to-Agent-UDP         JP1/AJS3 Agent to JP1/AJS3 Agent (UDP)   JP1AJS3-Agent       False   Domain, Private
JP1AJS3-Web-Console-to-Manager     JP1/AJS3 Web Console to JP1/AJS3 Manager JP1AJS3-Manager     False   Domain, Private
Web-Browser-to-JP1AJS3-Web-Console Web Browser to JP1/AJS3 Web Console      JP1AJS3-Web-Console False   Domain, Private


[agent]: PS C:\>

すべてのルールが無効化されていることに注意。

必要なルールの有効化

マネージャホストおよびエージェントホストそれぞれで、その役割に必要となるルールを有効化する。

必要なルールの有効化 @ エージェントホストt

ファイアウォールグループ JP1Base および JP1AJS3-Agent を有効化する。

[agent]: PS C:\> Enable-NetFirewallRule -Group JP1Base,JP1AJS3-Agent
[agent]: PS C:\> Get-NetFirewallRule -Group JP1* | ft

Name                               DisplayName                              DisplayGroup        Enabled Profile
----                               -----------                              ------------        ------- -------
JP1Base-to-JP1Base                 JP1/Base to JP1/Base                     JP1Base             True    Domain, Private
JP1AJS3-to-JP1Base                 JP1/AJS3 to JP1/Base                     JP1Base             True    Domain, Private
JP1AJS3-Agent-to-Manager           JP1/AJS3 Agent to JP1/AJS3 Manaer        JP1AJS3-Manager     False   Domain, Private
JP1AJS3-Manager-to-Agent           JP1/AJS3 Manager to JP1/AJS3 Aent        JP1AJS3-Agent       True    Domain, Private
JP1AJS3-Manager-to-Manager         JP1/AJS3 Manager to JP1/AJS3 Manager     JP1AJS3-Manager     False   Domain, Private
JP1AJS3-SDK-to-Manager             JP1/AJS3 SDK to JP1/AJS3 Manager         JP1AJS3-Manager     False   Domain, Private
JP1AJS3-Agent-to-Agent-TCP         JP1/AJS3 Agent to JP1/AJS3 Agent (TCP)   JP1AJS3-Agent       True    Domain, Private
JP1AJS3-Agent-to-Agent-UDP         JP1/AJS3 Agent to JP1/AJS3 Agent (UDP)   JP1AJS3-Agent       True    Domain, Private
JP1AJS3-Web-Console-to-Manager     JP1/AJS3 Web Console to JP1/AJS3 Manager JP1AJS3-Manager     False   Domain, Private
Web-Browser-to-JP1AJS3-Web-Console Web Browser to JP1/AJS3 Web Console      JP1AJS3-Web-Console False   Domain, Private


[agent]: PS C:\>

必要なルールの有効化 @ マネージャホストt

ファイアウォールグループ JP1Base、JP1AJS3-Manager および JP1AJS3-Agentを有効化する。
Manager は、Agent の機能も併せ持つため、Agent 用のルールも有効化する必要がある。

[manager]: PS C:\> Enable-NetFirewallRule -Group JP1Base,JP1AJS3-Manager,JP1AJS3-Agent
[manager]: PS C:\> Get-NetFirewallRule -Group JP1* | ft

Name                               DisplayName                              DisplayGroup        Enabled Profile
----                               -----------                              ------------        ------- -------
JP1Base-to-JP1Base                 JP1/Base to JP1/Base                     JP1Base             True    Domain, Private
JP1AJS3-to-JP1Base                 JP1/AJS3 to JP1/Base                     JP1Base             True    Domain, Private
JP1AJS3-Agent-to-Manager           JP1/AJS3 Agent to JP1/AJS3 Manaer        JP1AJS3-Manager     True    Domain, Private
JP1AJS3-Manager-to-Agent           JP1/AJS3 Manager to JP1/AJS3 Aent        JP1AJS3-Agent       True    Domain, Private
JP1AJS3-Manager-to-Manager         JP1/AJS3 Manager to JP1/AJS3 Manager     JP1AJS3-Manager     True    Domain, Private
JP1AJS3-SDK-to-Manager             JP1/AJS3 SDK to JP1/AJS3 Manager         JP1AJS3-Manager     True    Domain, Private
JP1AJS3-Agent-to-Agent-TCP         JP1/AJS3 Agent to JP1/AJS3 Agent (TCP)   JP1AJS3-Agent       True    Domain, Private
JP1AJS3-Agent-to-Agent-UDP         JP1/AJS3 Agent to JP1/AJS3 Agent (UDP)   JP1AJS3-Agent       True    Domain, Private
JP1AJS3-Web-Console-to-Manager     JP1/AJS3 Web Console to JP1/AJS3 Manager JP1AJS3-Manager     True    Domain, Private
Web-Browser-to-JP1AJS3-Web-Console Web Browser to JP1/AJS3 Web Console      JP1AJS3-Web-Console False   Domain, Private


[manager]: PS C:\>

2017/03/21

section フィルタ / Cisco IOS の小技

Cisco IOS で「show running-config」などを実行すると、出力が長くなり、本当に見たい部分を探すのに手間がかかる。
従来から、includeexclude および begin 等のフィルタは準備されていたが、コンフィグの文法に基づいて動作するものではないため、少々不便。
そこで今回紹介するのが section フィルタ。
文字通り、指定したセクションのみを週出してくれるフィルタ。

以下の様に使うことができる:
Switch#sh run | section line
line con 0
line vty 0 4
 transport input ssh
line vty 5 15
 transport input ssh
Switch#

|」(パイプ)の後で使えるフィルタのバリエーションが限られているため、省略形「s」のみで使用することができる。
Switch#sh run | s interface
interface FastEthernet0
 no ip address
interface GigabitEthernet1/0/1
interface GigabitEthernet1/0/2
<<略>>
interface GigabitEthernet1/0/27
interface GigabitEthernet1/0/28

空白で区切って、長いセクション名を指定することができる。
Switch#show conf | s interface FastEthernet
interface FastEthernet0
 no ip address
Switch#

ただし、省略形を使用できない(場合がある)。
Switch#show run | s int Fas
Switch#

正規表現が使えるので、以下の様に実行すれば、期待した動作になる。
Switch#show run | s int.* Fas.*
interface FastEthernet0
 no ip address
Switch#

GigabitEthernet ポートの 20 番台のみを表示しようとして、以下の様に実行しても、ポート 2 が表示され、思った結果にならない。
Switch#show run | s interface GigabitEthernet1/0/2
interface GigabitEthernet1/0/2
interface GigabitEthernet1/0/20
interface GigabitEthernet1/0/21
interface GigabitEthernet1/0/22
interface GigabitEthernet1/0/23
interface GigabitEthernet1/0/24
interface GigabitEthernet1/0/25
interface GigabitEthernet1/0/26
interface GigabitEthernet1/0/27
interface GigabitEthernet1/0/28
Switch#
この場合は、以下の様に実行すればよい。
Switch#show run | s interface GigabitEthernet1/0/2.
interface GigabitEthernet1/0/20
interface GigabitEthernet1/0/21
interface GigabitEthernet1/0/22
interface GigabitEthernet1/0/23
interface GigabitEthernet1/0/24
interface GigabitEthernet1/0/25
interface GigabitEthernet1/0/26
interface GigabitEthernet1/0/27
interface GigabitEthernet1/0/28
Switch#

show コマンドではなく、more コマンドの後でも来した通り動作する。
Switch#$/archive/config-Mar-19-14-03-06.375-41 | section interface Vlan
interface Vlan1
 no ip address
interface Vlan1000
 ip address 10.0.0.1 255.255.255.0
Switch#

2017/02/27

システム起動時のfsck

現状の確認

インストール直後の既定値を確認する。

/etc/fstab

[root@centos01 ~]# cat /etc/fstab | grep /dev/mapper/vg_centos01-lv_root
/dev/mapper/vg_centos01-lv_root /                       ext4    defaults        1 1
[root@centos01 ~]#
第6フィールドが「1」となっている。
この設定では、起動の際にfsck実施条件をチェックし、適宜fsckを実施する。

ボリュームのパラメータ

CentOS 6/RHEL 6の場合、既定ではext4のボリュームは、fsckを実施しない様設定されている。
# ちなみに、CentOS 7/RHEL 7では、既定でxfsのため、起動にfsckは実行されない。
[root@centos01 ~]# tune2fs -l /dev/mapper/vg_centos01-lv_root | egrep -i 'mount count|check'
Mount count:              4
Maximum mount count:      -1
Last checked:             Thu Feb 23 06:06:05 2017
Check interval:           0 (<none>)
[root@centos01 ~]#

現在は、以下の通り設定されていることが判る。
  • マウントされた回数(Mount count)が4、
  • マウント回数によるfsck実行(Maximum mount count)は無し、
  • 最後にfsckが実行されたの(Last checked)が2017.2.23(木) 06:06:05、
  • 経過時間によるfsck実行(Check interval)は無し
結果、既定状態では起動時のfsckは、実行されないことが判る。

マウント回数による条件の検証

Maximum mount countの設定

前に確認した通り、現在のマウント回数は4回なので、Maximum mount countを5に設定する。
[root@centos01 ~]# tune2fs -c 5 /dev/mapper/vg_centos01-lv_root
tune2fs 1.41.12 (17-May-2010)
Setting maximal mount count to 5
[root@centos01 ~]# tune2fs -l /dev/mapper/vg_centos01-lv_root | egrep -i 'mount count|check'
Mount count:              3
Maximum mount count:      5
Last checked:             Thu Feb 23 06:06:05 2017
Check interval:           0 (<none>)
[root@centos01 ~]#

確認1: fsckされない場合

再度再起動する。
[root@centos01 ~]# shutdown -r now
起動後、確認する。
この時点でマウント回数5回だが、Maximum mount countの設定値5を超えていないため、fsckされない。
最後にfsckした時刻(Last checked)が変わっていないことで確認できる。
[root@centos01 ~]# tune2fs -l /dev/mapper/vg_centos01-lv_root | egrep -i 'mount count|check'
Mount count:              5
Maximum mount count:      5
Last checked:             Thu Feb 23 06:06:05 2017
Check interval:           0 (<none>)
[root@centos01 ~]#

確認2: fsckされる場合

再度再起動する。
[root@centos01 ~]# shutdown -r now
起動後、確認する。
この時点でマウント回数6回に達し、Maximum mount countの設定値5を超えるため、fsckされる。
最後にfsckした時刻(Last checked)が変わったことで確認できる。
[root@centos01 ~]# tune2fs -l /dev/mapper/vg_centos01-lv_root | egrep -i 'mount count|check'
Mount count:              1
Maximum mount count:      5
Last checked:             Sat Feb 25 13:42:42 2017
Check interval:           0 (<none>)
[root@centos01 ~]#

復旧

設定を元に戻す。
[root@centos01 ~]# tune2fs -c -1 /dev/mapper/vg_centos01-lv_root
tune2fs 1.41.12 (17-May-2010)
Setting maximal mount count to -1
[root@centos01 ~]#

/fastbootの検証

ファイル/fastbootを作成すると、次回起動時にfsckされなくなることを確認する。

設定

[root@centos01 ~]# tune2fs -c 1 /dev/mapper/vg_centos01-lv_root
tune2fs 1.41.12 (17-May-2010)
Setting maximal mount count to 1
[root@centos01 ~]# tune2fs -l /dev/mapper/vg_centos01-lv_root | egrep -i 'mount count|check'
Mount count:              1
Maximum mount count:      1
Last checked:             Sat Feb 25 13:42:42 2017
Check interval:           0 (<none>)
[root@centos01 ~]#

確認1: fsckされない場合

/fastbootを作成し、再起動する。
[root@centos01 ~]# touch /fastboot
[root@centos01 ~]# shutdown -r now
起動後、確認する。
この時点でマウント回数2回で、Maximum mount countの設定値2を超えているが、/fastbootが作成されていたため、fsckされない。
最後にfsckした時刻(Last checked)が変わっていないことで確認できる。
[root@centos01 ~]# tune2fs -l /dev/mapper/vg_centos01-lv_root | egrep -i 'mount count|check'
Mount count:              2
Maximum mount count:      1
Last checked:             Sat Feb 25 13:42:42 2017
Check interval:           0 (<none>)
[root@centos01 ~]#
再起動前に作成した/fastbootは削除されている。
[root@centos01 ~]# ls /fastboot
ls: cannot access /fastboot: そのようなファイルやディレクトリはありません
[root@centos01 ~]#

確認2: fsckされる場合

/fastbootが設定されていない状態で再起動する。
[root@centos01 ~]# shutdown -r now
起動後、確認する。
この時点でマウント回数3回に達し、Maximum mount countの設定値1を超えるため、fsckされる。
最後にfsckした時刻(Last checked)が変わったことで確認できる。
[root@centos01 ~]# tune2fs -l /dev/mapper/vg_centos01-lv_root | egrep -i 'mount count|check'
Mount count:              1
Maximum mount count:      1
Last checked:             Sat Feb 25 14:35:52 2017
Check interval:           0 (<none>)
[root@centos01 ~]#

復旧

設定を戻す。
[root@centos01 ~]# tune2fs -c -1 /dev/mapper/vg_centos01-lv_root
tune2fs 1.41.12 (17-May-2010)
Setting maximal mount count to -1
[root@centos01 ~]#

/forcefsckの検証

ファイル/forcefsckを作成すると、強制的にfsckを実行させることができる。
これを確認する。

現在状態の確認

現在の状態を確認する。
[root@centos01 ~]# tune2fs -l /dev/mapper/vg_centos01-lv_root | egrep -i 'mount count|check'
Mount count:              1
Maximum mount count:      -1
Last checked:             Sat Feb 25 14:35:52 2017
Check interval:           0 (<none>)
[root@centos01 ~]#
マウント回数、経過時間共にfsckされる条件を満たしていないことが判る。

確認

/forcefsckを作成し、再起動する。
[root@centos01 ~]# touch /forcefsck
[root@centos01 ~]# shutdown -r now
強制的にfsckが実行される。
起動後、確認する。
最後にfsckした時刻(Last checked)が変わったことで確認できる。
[root@centos01 ~]# tune2fs -l /dev/mapper/vg_centos01-lv_root | egrep -i 'mount count|check'
Mount count:              1
Maximum mount count:      -1
Last checked:             Sat Feb 25 14:48:14 2017
Check interval:           0 (<none>)
[root@centos01 ~]#

/etc/fstabの第6フィールドの検証

/etc/fstabの第6フィールドを0に設定すると、fsckが抑制される。

設定

/etc/fstabの第6フィールドを0に設定する。
[root@centos01 ~]# cp -p /etc/fstab /etc/fstab.orig
[root@centos01 ~]# grep lv_root /etc/fstab
/dev/mapper/vg_centos01-lv_root /                       ext4    defaults        1 1
[root@centos01 ~]# sed -i '/lv_root/s/1$/0/' /etc/fstab
[root@centos01 ~]# grep lv_root /etc/fstab
/dev/mapper/vg_centos01-lv_root /                       ext4    defaults        1 0
[root@centos01 ~]#

Maximum mount countを1に設定する。
[root@centos01 ~]# tune2fs -l /dev/mapper/vg_centos01-lv_root | egrep -i 'mount count|check'
Mount count:              1
Maximum mount count:      -1
Last checked:             Sat Feb 25 14:48:14 2017
Check interval:           0 (<none>)
[root@centos01 ~]# tune2fs -c 1 /dev/mapper/vg_centos01-lv_root
tune2fs 1.41.12 (17-May-2010)
Setting maximal mount count to 1
[root@centos01 ~]# tune2fs -l /dev/mapper/vg_centos01-lv_root | egrep -i 'mount count|check'
Mount count:              1
Maximum mount count:      1
Last checked:             Sat Feb 25 14:48:14 2017
Check interval:           0 (<none>)
[root@centos01 ~]#

確認1: fsckされない

再起動する。
[root@centos01 ~]# shutdown -r now
起動後、確認する。
この時点でマウント回数2回に達し、Maximum mount countの設定値1を超えるが、/etc/fstabでfsckを抑制しているため、fsckされない。
最後にfsckした時刻(Last checked)が変わっていないことで確認できる。
[root@centos01 ~]# tune2fs -l /dev/mapper/vg_centos01-lv_root | egrep -i 'mount count|check'
Mount count:              2
Maximum mount count:      1
Last checked:             Sat Feb 25 14:48:14 2017
Check interval:           0 (<none>)
[root@centos01 ~]#

確認2: /etc/fstabの第6フィールド VS /forcefsck

/etc/fstabの第6フィールドを0にした状態で/forcefsckを作成した場合どうなるか検証する。

/forcefsckを作成し、再起動する。
[root@centos01 ~]# touch /forcefsck
[root@centos01 ~]# shutdown -r now
起動後、確認する。
この時点でマウント回数3回に達し、Maximum mount countの設定値1を超え、さらに/etc/forcefsckが作成されているが、/etc/fstabでfsckを抑制しているため、fsckされない。
最後にfsckした時刻(Last checked)が変わっていないことで確認できる。
[root@centos01 ~]# tune2fs -l /dev/mapper/vg_centos01-lv_root | egrep -i 'mount count|check'
Mount count:              3
Maximum mount count:      1
Last checked:             Sat Feb 25 14:48:14 2017
Check interval:           0 (<none>)
[root@centos01 ~]#

復元1: /etc/fstabのみ

/etc/fsckの第6フィールドのみ設定を戻す。
[root@centos01 ~]# mv -f /etc/fstab.orig /etc/fstab
[root@centos01 ~]# grep lv_root /etc/fstab
/dev/mapper/vg_centos01-lv_root /                       ext4    defaults        1 1
[root@centos01 ~]#

確認3: fsckされる

/etc/fsckの第6フィールドの設定を戻すと、fsckされることを確認する。
[root@centos01 ~]# shutdown -r now
起動後、確認する。
この時点でマウント回数4回に達し、Maximum mount countの設定値1を超えるので、fsckされる。
最後にfsckした時刻(Last checked)が変わったことで確認できる。
[root@centos01 ~]# tune2fs -l /dev/mapper/vg_centos01-lv_root | egrep -i 'mount count|check'
Mount count:              1
Maximum mount count:      1
Last checked:             Sat Feb 25 15:21:03 2017
Check interval:           0 (<none>)
[root@centos01 ~]#

復元2: Maximum mount count

Maximum mount countの設定を戻す。
[root@centos01 ~]# tune2fs -c -1 /dev/mapper/vg_centos01-lv_root
tune2fs 1.41.12 (17-May-2010)
Setting maximal mount count to -1
[root@centos01 ~]#

2017/02/21

PowerShellからCMD.exeやpowershell.exeのフォントを追加する

Cmd.exeやpowershell.exeなどで、Windowsのコンソール(ターミナル)を使う場合、既定では日本語が表示できるTrueTypeフォントは、MSゴシックしか選べない。
今回は、PowerShellを使ってWindowsのコンソールにフォントを追加し、選択できるようにする方法を紹介する。

フォントの準備

Windowのコンソールに追加するフォントを準備する。
これらは、いわゆる等幅フォントでなければならない。
RictyMyrica等、好みのフォントをインストールしておく。

現状設定の確認

続いて、現状の設定を確認する。
PowerShellを管理者モードで起動し、以下の通り実行する
PS C:\> $ttf = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont'
PS C:\> Get-Item $ttf


    Hive: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console


Name                           Property
----                           --------
TrueTypeFont                   949 : *굴림체
                               0   : Lucida Console
                               950 : *細明體
                               932 : *MS ゴシック
                               936 : *新宋体
                               00  : Consolas


PS C:\>
「MS ゴシック」とある行の「932」は、いわゆるMicrosoftコードページ932 (CP932)のこと。
既定では、CP932に対して、MSゴシック一つのみが登録されており、唯一選択可能になっていることが解る。

CP932に対して、フォントを追加する場合、この部分を932.1, 932.2, 932.3,…の様に「コードページ.番号」の様な形で追加する必要がある。

なお、選択されたフォントは、フォント名の直前に「*」がついている。
上の例では、CP932に対しては、MSゴシックが選択されていることが解る(と言っても唯一の選択肢だが)。

フォントの追加

今回は、
  • Ricty Discord
  • Ricty
  • MyricaM M
  • Myrica M
を追加する。
フォント名の部分は、適宜読み替える。

以下の通り実行する。
PS C:\> New-ItemProperty $ttf -Name 932.1 -PropertyType string -Value 'Ricty Discord'


932.1        : Ricty Discord
PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFon
               t
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console
PSChildName  : TrueTypeFont
PSDrive      : HKLM
PSProvider   : Microsoft.PowerShell.Core\Registry



PS C:\> New-ItemProperty $ttf -Name 932.2 -PropertyType string -Value 'Ricty'


932.2        : Ricty
PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFon
               t
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console
PSChildName  : TrueTypeFont
PSDrive      : HKLM
PSProvider   : Microsoft.PowerShell.Core\Registry



PS C:\> New-ItemProperty $ttf -Name 932.3 -PropertyType string -Value 'MyricaM M'


932.3        : MyricaM M
PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFon
               t
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console
PSChildName  : TrueTypeFont
PSDrive      : HKLM
PSProvider   : Microsoft.PowerShell.Core\Registry



PS C:\> New-ItemProperty $ttf -Name 932.4 -PropertyType string -Value 'Myrica M'


932.4        : Myrica M
PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFon
               t
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console
PSChildName  : TrueTypeFont
PSDrive      : HKLM
PSProvider   : Microsoft.PowerShell.Core\Registry



PS C:\>

結果の確認

結果を確認する。
PS C:\> Get-Item $ttf


    Hive: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console


Name                           Property
----                           --------
TrueTypeFont                   949   : *굴림체
                               0     : Lucida Console
                               950   : *細明體
                               932   : *MS ゴシック
                               936   : *新宋体
                               00    : Consolas
                               932.1 : Ricty Discord
                               932.2 : Ricty
                               932.3 : MyricaM M
                               932.4 : Myrica M


PS C:\>
932.[1-4]にそれぞれフォントが追加されたのが判る。

この状態で、cmd.exeやpowershell.exeを起動し、プロパティ画面のフォントタブから、複数のフォントが選べるようになっていることを確認できる。