JUNOSの設定方法(Juniper SRX100)

セットアップ

ファイアウォール製品であるJuniper SRX100には、FreeBSDベースのOSであるJUNOSという制御OSが搭載されている。UNIXライクなコマンド操作ができるので、UNIX/Linuxに慣れ親しんだ人には非常に操作しやすい。一方、電源ON時にはOSの起動に2〜3分ほど掛かり、また電源OFF時には、シャットダウンコマンドを打ってOSのシャットダウン処理を行う必要があることに注意が必要である。

login: root

初期設定では、ルートユーザはノーパスワードでログインすることができる。

request system power-off

JUNOSには、「シェルコマンドモード」->「オペレーションモード」->「コンフィギュレーションモード」の順に3つのモードがあり、それぞれ以下のコマンドで遷移できる。1つ上のモードにはexitコマンドで戻ることができる。

cli
configure

初期設定状態では、ルートユーザにノーパスワードでログインできてしまうので、コンフィギュレーションモードの状態で、以下のコマンドを打ち、パスワードの設定を行う。

set system root-authentication plain-text-password

また初期状態では、筐体全面のアラームランプが橙点灯している。これは、レスキューコンフィグと呼ばれる、障害時などに使用するコンフィグが設定されていないために起こる。アラームの原因を調査した上で、現在アクティブなコンフィグをレスキューコンフィグとして設定するためには、以下のコマンドを実行する。

> show system alarms 
20XX-XX-XX XX:XX:XX UTC Minor Autorecovery information needs to be saved
20XX-XX-XX XX:XX:XX UTC Minor Rescue configuration is not set
> request system configuration rescue save
> show system configuration rescue
> show system autorecovery state 
Configuration:
  File             Recovery Information    Integrity Check    Action / Status
  rescue.conf.gz   Saved                   Passed             None
BSD Labels:
  Slice            Recovery Information    Integrity Check    Action / Status
  s1               Not Saved               Not checked        Requires save
  s2               Not Saved               Not checked        Requires save
  s3               Not Saved               Not checked        Requires save
  s4               Not Saved               Not checked        Requires save
> request system autorecovery state save
> show system autorecovery state
Configuration:
  File             Recovery Information    Integrity Check    Action / Status
  rescue.conf.gz   Saved                   Passed             None
BSD Labels:
  Slice            Recovery Information    Integrity Check    Action / Status
  s1               Saved                   Passed             None
  s2               Saved                   Passed             None
  s3               Saved                   Passed             None
  s4               Saved                   Passed             None

AWS S3(1)MacのデータをGlacierにバックアップする

iMacに保存されているデータをAmazon Glacierに定期バックアップする。

Amazon Glacierは、長期バックアップに最適なストレージで、非常に低コストであることが特徴である。費用はリージョンごとに異なり、バージニアリージョンであれば0.007USD/GB、東京リージョンであれば0.0114USD/GB、1TBのデータを保存しても月額800円程度と安価である。Glacierは、データをアーカイブとして保存するため、アップロード後にデータを改変することができない。S3ではデータの保存先にGlacierを指定することが可能で、ライフサイクル設定によりデータを定期的にGlacierにアーカイブ可能となっている。

AWS CLI のインストール

MacからAWSにアクセスするためには、コマンドラインツールであるAWS CLIの利用が便利である。AWS CLIは、pip(Pythonパッケージ管理システム)からインストールが可能である。

$ sudo pip install awscli
  Downloading six-1.10.0-py2.py3-none-any.whl
Installing collected packages: pyasn1, rsa, futures, jmespath, six, python-dateutil, docutils, botocore, s3transfer, colorama, awscli
  Found existing installation: six 1.4.1
    DEPRECATION: Uninstalling a distutils installed project (six) has been deprecated and will be removed in a future version. This is due to the fact that uninstalling a distutils project will only partially uninstall the project.
    Uninstalling six-1.4.1:
Exception:
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/pip/basecommand.py", line 209, in main
    status = self.run(options, args)
  File "/Library/Python/2.7/site-packages/pip/commands/install.py", line 317, in run
    prefix=options.prefix_path,
  File "/Library/Python/2.7/site-packages/pip/req/req_set.py", line 726, in install
    requirement.uninstall(auto_confirm=True)
  File "/Library/Python/2.7/site-packages/pip/req/req_install.py", line 746, in uninstall
    paths_to_remove.remove(auto_confirm)
  File "/Library/Python/2.7/site-packages/pip/req/req_uninstall.py", line 115, in remove
    renames(path, new_path)
  File "/Library/Python/2.7/site-packages/pip/utils/__init__.py", line 267, in renames
    shutil.move(old, new)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 302, in move
    copy2(src, real_dst)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 131, in copy2
    copystat(src, dst)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 103, in copystat
    os.chflags(dst, st.st_flags)
OSError: [Errno 1] Operation not permitted: '/tmp/pip-oO8sKD-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six-1.4.1-py2.7.egg-info'

上記のようにsixが既にインストールされているという警告が出てインストールできない場合は、以下のコマンドでインストールを行う。

$ sudo pip install awscli --upgrade --ignore-installed six

インストール完了後は、認証情報の設定を行う。AWS Access Key IDAWS Secret Access Keyなどの認証情報は、AWSマネージメントコンソールのAWS Identity and Access Managementから設定が可能である。

$ aws configure
AWS Access Key ID [None]: xxxxxxxxxxxxxxxxxxxxx
AWS Secret Access Key [None]: xxxxxxxxxxxxxxxxxxxxxxxxxx
Default region name [None]: ap-northeast-1
Default output format [None]: json

S3初期設定

S3の設定を行い、データを格納するバケットの生成および、Glacierへバックアップを行うライフサイクル設定をする。安価にデータをバックアップするという目的でGlacierを使用することから、今回は単価が最も安いバージニアリージョンをする。

バケットの生成

バケットを生成する。
このときAWS CLIに設定したユーザにS3へのアクセス権限がないとエラーが発生する。

$ aws s3 mb s3://backup-hoge --region us-east-1
make_bucket failed: s3://backup-hoge/ A client error (AccessDenied) occurred when calling the CreateBucket operation: Access Denied

そこで、AWSマネージメントコンソールのAWS Identity and Access Managementで、該当ユーザにAmazon S3 Full Access権限を付与する。

ポリシーのアタッチ

また、S3のバケット名はユニークである必要があるので、既に同一名称のバケットが存在する場合は、下記のようなエラーが発生するので注意が必要である。

$ aws s3 mb s3://backup-hoge  --region us-east-1
make_bucket failed: s3://backup-hoge/ A client error (BucketAlreadyExists) occurred when calling the CreateBucket operation: The requested bucket name is not available. The bucket namespace is shared by all users of the system. Please select a different name and try again.

ライフサイクル設定

次にライフサイクル設定で、どの程度の頻度でGlacierへアーカイブするかを設定する。
今回は、以下の設定としている。

設定内容 JSON
即日アーカイブする “Days”: 0″
特定のディレクトリに限定することなくバケット全体をアーカイブする “Prefix”: “”
Glacierへアーカイブする “StorageClass”: “GLACIER”

このとき、「”Prefix”: null」とすると、フォーマットエラーとなる。

vi /tmp/lifecycle.json

{
    "Rules": [
        {
            "Status": "Enabled", 
            "Prefix": "", 
            "Transition": {
                "Days": 0, 
                "StorageClass": "GLACIER"
            }, 
            "ID": "backup for xxx"
        }
    ]
}

JSONが作成できたら、ライフサイクル設定の反映を行う。

aws s3api put-bucket-lifecycle --bucket backup-hoge --lifecycle file://lifecycle.json

同期処理

同期処理は以下のコマンドにより実行できる。deleteオプションによりファイル削除も同期される。また、excludeオプションによって同期対象外のファイルやフォルダを指定できるので、.DS_Storeファイルなどを指定しておくと良い。excludeオプションは、条件の数だけいくつでも追記できる。

aws s3 sync /Volumes/hoge/ s3://backup-hoge --delete --exclude '*.DS_Store'