こんにちは、ひろかずです。
前回、Deep Security ~ AWS WAF連携ツールを評価しましたが、DSaaSに対する連携という制限が付いていました。
2016年2月20日にアップデートされ、インスタンスに構築したDeep Security Manager(以下、個別DSM)に対応したとのことなので、一筆書きます。
#参考
Githubリポジトリ deep-security/aws-waf
#前提
- Deep Security Managerの導入が完了していること。
- ライセンスを投入していること。
- 前回の内容を踏んでいること。
- 前回起動したインスタンスが、連携先Deep Security Managerのポート4119に到達できること。
#工程
- Deep Securty ~ AWS WAF連携ツールの更新
- 動作確認
#1. Deep Securty ~ AWS WAF連携ツールの更新
前回、a877db1
にロールバックしていたので、最新版の0e4712e
に更新します。
$ git pull origin master
remote: Counting objects: 20, done.
remote: Total 20 (delta 1), reused 1 (delta 1), pack-reused 19
Unpacking objects: 100% (20/20), done.
From https://github.com/deep-security/aws-waf
* branch master -> FETCH_HEAD
46e3e5b..0e4712e master -> origin/master
Updating a877db1..0e4712e
Fast-forward
:
更新されていますね。
$ ll
合計 20
-rw-rw-r-- 1 ec2-user ec2-user 1081 2月 10 10:08 LICENSE
-rw-rw-r-- 1 ec2-user ec2-user 7060 2月 27 23:48 README.md
drwxrwxr-x 5 ec2-user ec2-user 4096 2月 27 23:48 dsawswaf
-rw-rw-r-- 1 ec2-user ec2-user 33 2月 10 10:08 requirements.txt
念のためにアップデート確認
pipの警告は置いておいて、特にアップデートは不要だったようですね。
$ sudo pip install -r requirements.txt
You are using pip version 6.1.1, however version 8.0.3 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Requirement already satisfied (use --upgrade to upgrade): netaddr>=0.7.18 in /usr/local/lib/python2.7/site-packages (from -r requirements.txt (line 1))
Requirement already satisfied (use --upgrade to upgrade): boto3>=1.2.1 in /usr/local/lib/python2.7/site-packages (from -r requirements.txt (line 2))
Requirement already satisfied (use --upgrade to upgrade): jmespath<1.0.0,>=0.7.1 in /usr/lib/python2.7/dist-packages (from boto3>=1.2.1->-r requirements.txt (line 2))
Requirement already satisfied (use --upgrade to upgrade): futures<4.0.0,>=2.2.0 in /usr/local/lib/python2.7/site-packages (from boto3>=1.2.1->-r requirements.txt (line 2))
Requirement already satisfied (use --upgrade to upgrade): botocore<1.4.0,>=1.3.0 in /usr/lib/python2.7/dist-packages (from boto3>=1.2.1->-r requirements.txt (line 2))
Requirement already satisfied (use --upgrade to upgrade): python-dateutil<3.0.0,>=2.1 in /usr/lib/python2.7/dist-packages (from botocore<1.4.0,>=1.3.0->boto3>=1.2.1->-r requirements.txt (line 2))
Requirement already satisfied (use --upgrade to upgrade): docutils>=0.10 in /usr/lib/python2.7/dist-packages (from botocore<1.4.0,>=1.3.0->boto3>=1.2.1->-r requirements.txt (line 2))
Requirement already satisfied (use --upgrade to upgrade): six in /usr/lib/python2.7/dist-packages (from python-dateutil<3.0.0,>=2.1->botocore<1.4.0,>=1.3.0->boto3>=1.2.1->-r requirements.txt (line 2))
#2. 動作確認
readme.mdを見ると、個別DSMへの連携には -m
オプションで対向の個別DSMを指定して、 --dsm-port
でポートを指定する必要がありそうですね。
では、実行してみます。
期待値は、前回同様に個別DSMに登録されているIPリストとAWS WAFのCondition(IP List)一覧の表示です。
$ python ip_list_to_set.py --list -m xxx.xxx.xxx.xxx --dsm-port 4119 -u webapi -p xxxxxxxx
Available Deep Security IP Lists
================================
--- No IP lists available
Available AWS WAF IP Sets
=========================
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx test3
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx myIP
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx test2
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx test
そんなもんはねぇ!と言われてしまいました。
ip_list_to_set.py
を見ると、以下の引き数処理が追加されています。
parser.add_argument('--ignore-ssl-validation', action='store_true', dest='ignore_ssl_validation', required=False, help='Ignore SSL certification validation. Be careful when you use this as it disables a recommended security check. Required for Deep Security Managers using a self-signed SSL certificate')
そう言えば、個別DSMはデフォルトで自己署名証明書が使用されています。
個別DSMに対しては、このオプションが必要なようですね。
では、もう一度
$ python ip_list_to_set.py --list -m xxx.xxx.xxx.xxx --dsm-port 4119 -u webapi -p xxxxxxxx --ignore-ssl-validation
***********************************************************************
* IGNORING SSL CERTIFICATE VALIDATION
* ===================================
* You have requested to ignore SSL certificate validation. This is a less secure method
* of connecting to a Deep Security Manager (DSM). Please ensure that you have other
* mitigations and security controls in place (like restricting IP space that can access
* the DSM, implementing least privilege for the Deep Security user/role accessing the
* API, etc).
*
* During script execution, you'll see a number of "InsecureRequestWarning" messages.
* These are to be expected when operating without validation.
***********************************************************************
/home/ec2-user/aws-waf/dsawswaf/requests/packages/urllib3/connectionpool.py:789: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.org/en/latest/security.html
InsecureRequestWarning)
Available Deep Security IP Lists
================================
1 Ignore Reconnaissance
2 Network Broadcast
3 Ingress Filters
4 Domain Controller(s)
5 Off Domain IPs
6 Corporate Network IPs
7 VPN Tunnel IPs
21 awswaf
Available AWS WAF IP Sets
=========================
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx test3
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx myIP
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx test2
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx test
/home/ec2-user/aws-waf/dsawswaf/requests/packages/urllib3/connectionpool.py:789: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.org/en/latest/security.html
InsecureRequestWarning)
なんかすごく警告文がずらずら出ますが、情報は取れましたね。
では、21 awswaf
をAWS WAFのConditionに追加しましょう。
まずは、dryrun。
大丈夫そうですね。(自己署名証明書に起因する警告は省略しました)
$ python ip_list_to_set.py -d 21 -m xxx.xxx.xxx.xxx --dsm-port 4119 -u webapi -p xxxxxxxx --ignore-ssl-validation --dryrun
:
***********************************************************************
* DRY RUN ENABLED. NO CHANGES WILL BE MADE
***********************************************************************
Will request the creation of [awswaf]
:
では、実行。
できたみたいですね。
$ python ip_list_to_set.py -d 21 -m xxx.xxx.xxx.xxx --dsm-port 4119 -u webapi -p xxxxxxxx --ignore-ssl-validation
:
Converted 4 IP List entries to 4 IP Set entries
Updated IP Set [awswaf] with ID [xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx]
:
できました。
python ip_list_to_set.py --list -m xxx.xxx.xxx.xxx --dsm-port 4119 -u webapi -p xxxxxxxx --ignore-ssl-validation
:
Available Deep Security IP Lists
================================
1 Ignore Reconnaissance
2 Network Broadcast
3 Ingress Filters
4 Domain Controller(s)
5 Off Domain IPs
6 Corporate Network IPs
7 VPN Tunnel IPs
21 awswaf
Available AWS WAF IP Sets
=========================
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx test3
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx myIP
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx test2
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx test
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx awswaf ★★★
:
#おまけ
Deep Security 側のIPリストに空行が入っていると処理ができないようです。
IPリストは、コメントや空行が入ってないものを使用しましょう。
今日はここまでです。
お疲れ様でした。