Deep Security~AWS WAF 제휴 도구를 평가했습니다.

14882 단어 AWSWAFAWSDeepSecurity
안녕하세요, 저는 광미입니다.
2015년 11월 27일 딥 시큐리티~AWS WAF 제휴 도구가 Giithub에 공개됐다.
애초에 아무리 해도 순조롭지 못했지만, 마침내 평가할 만한 곳을 그렸기 때문에 한 획을 썼다.

참고 자료


Giithub 창고 deep-security/aws-waf

기능 개요


Deep Security의 IP 목록을 AWS WAF의 condition과 결합시킵니다.
실체는python에서 쓴 스크립트 그룹입니다.

작업 환경


도구 실행 면


pythn2.7 계열
boto3 1.3.1
awscli 1.9.1

기타 준비물


DSaaS
AWS WAF

공사.

  • 준비 작업 환경
  • 도구 준비
  • 집행 및 평가
  • 1. 액션 환경 준비


    이번에 사용Amazon Linux AMI 2015.09.1 (HVM), SSD Volume Type - ami-383c1956.
    시작하기 전에 AWS WAF에 액세스할 수 있는 IAM 역할을 만듭니다.
    이번에는 이렇게 설정했습니다.

    제작된 IAM 스크롤 막대, t2를 지정합니다.나노에서 시작합니다.
    파이썬 버전 확인
    도구는python 2.6 시스템에서 지원하지 않는 설명을 포함합니다.
    2.7 계열의 환경을 준비하세요.
    $ python
    Python 2.7.10 (default, Aug 11 2015, 23:39:10)
    [GCC 4.8.3 20140911 (Red Hat 4.8.3-9)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    
    awscli와boto3 버전 확인
    $ aws --version
    aws-cli/1.9.1 Python/2.7.10 Linux/4.1.10-17.31.amzn1.x86_64 botocore/1.3.1
    
    git를 설치합니다.
    $ sudo yum -y install git
    :
    $ git --version
    git version 2.4.3
    
    복제 창고.
    $ git clone https://github.com/deep-security/aws-waf.git
    Cloning into 'aws-waf'...
    remote: Counting objects: 205, done.
    remote: Total 205 (delta 0), reused 0 (delta 0), pack-reused 205
    Receiving objects: 100% (205/205), 604.94 KiB | 157.00 KiB/s, done.
    Resolving deltas: 100% (42/42), done.
    Checking connectivity... done.
    
    다 했네.
    $ ll
    合計 4
    drwxrwxr-x 4 ec2-user ec2-user 4096  2月 10 10:08 aws-waf
    
    $ cd aws-waf/
    $ ll
    合計 20
    -rw-rw-r-- 1 ec2-user ec2-user 1081  2月 10 10:08 LICENSE
    -rw-rw-r-- 1 ec2-user ec2-user 4762  2月 10 10:08 README.md
    drwxrwxr-x 5 ec2-user ec2-user 4096  2月 10 10:08 dsawswaf
    -rw-rw-r-- 1 ec2-user ec2-user   33  2月 10 10:08 requirements.txt
    
    조작 가능한 버전 (a877db1) 으로 되돌려줍니다.
    ※ 현재 버전에서는 동작하지 않습니다.
    $ git checkout a877db1adb53b790f470065ed71df96f6ead82fb
    Note: checking out 'a877db1adb53b790f470065ed71df96f6ead82fb'.
    
    You are in 'detached HEAD' state. You can look around, make experimental
    changes and commit them, and you can discard any commits you make in this
    state without impacting any branches by performing another checkout.
    
    If you want to create a new branch to retain commits you create, you may
    do so (now or later) by using -b with the checkout command again. Example:
    
      git checkout -b <new-branch-name>
    
    HEAD is now at a877db1... Fixed typo in boto3 version
    
    확인바뀌었네.
    $ ll
    合計 20
    -rw-rw-r-- 1 ec2-user ec2-user 1081  2月 10 10:08 LICENSE
    -rw-rw-r-- 1 ec2-user ec2-user 4586  2月 10 10:12 README.md ★
    drwxrwxr-x 5 ec2-user ec2-user 4096  2月 10 10:12 dsawswaf ★
    -rw-rw-r-- 1 ec2-user ec2-user   33  2月 10 10:08 requirements.txt
    
    readme.md에서 보듯이 설치에 필요합니다.
    $ sudo pip install -r requirements.txt
    You are using pip version 6.1.1, however version 8.0.2 is available.
    You should consider upgrading via the 'pip install --upgrade pip' command.
    Collecting netaddr>=0.7.18 (from -r requirements.txt (line 1))
      Downloading netaddr-0.7.18-py2.py3-none-any.whl (1.5MB)
        100% |████████████████████████████████| 1.5MB 308kB/s
    Collecting boto3>=1.2.1 (from -r requirements.txt (line 2))
      Downloading boto3-1.2.3-py2.py3-none-any.whl (108kB)
        100% |████████████████████████████████| 110kB 4.0MB/s
    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))
    Collecting futures<4.0.0,>=2.2.0 (from boto3>=1.2.1->-r requirements.txt (line 2))
      Downloading futures-3.0.4-py2-none-any.whl
    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))
    Installing collected packages: netaddr, futures, boto3
    Successfully installed boto3-1.2.3 futures-3.0.4 netaddr-0.7.18
    
    동작 확인.괜찮은 것 같은데.
    $ python ip_list_to_set.py -h
    usage: ip_list_to_set.py [-h] [-d IP_LIST] [-l] [-m DSM] -u USERNAME -p
                             PASSWORD [-t TENANT] [--dryrun] [--verbose]
    :
    
    

    2. DSaS의 준비


    이 도구는 뒤집을 때 DSaS만 지원되며 서버에 설치된 DSM은 지원되지 않습니다.
    DSaS 계정을 준비하고 API 사용자를 생성합니다.
    설정은 이런 느낌.
    우선 캐릭터를 만든다.

    그리고 사용자를 만들고 캐릭터를 부여합니다.

    미리 만들어진 IP 목록.
    원래는 성숙한 IP 리스트를 활용하는 곳이었다.

    3. AWS WAF 준비


    특별한 것은 없습니다. 콘디션의 상황은 이렇습니다.

    4. 집행과 평가


    4-1. 먼저 실행하다


    그럼 실행하세요.
    우선 리스트를 얻는 것이다.
    사용자가 방금 만든 것을 지정합니다.
    임차인 이름 DSaS 계정 이름을 지정합니다.
    생성된 IP 목록 myIP 의 ID가 21 인 거 아시죠?
    또한 AWS WAF의 condition(IP Sets)이 표시됩니다.
    $ python ip_list_to_set.py -l -u webapi -p xxxxxxxx -t tenant_name
    
    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  myIP
    
    Available AWS WAF IP Sets
    =========================
    xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx    test3
    xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx    test2
    xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx    test
    
    그렇다면 IP 리스트myIP와 AWS WAF의 condition(IP Sets)을 결합시켜보자.
    IP 목록myIP의 ID21를 지정합니다.
    우선--dryrun 추가 옵션이 실행되면 Will request the creation of [myIP]이 나타납니다.
    $ python ip_list_to_set.py -d 21 -u webapi -p xxxxxxxx -t tenant_name --dryrun
    ***********************************************************************
    * DRY RUN ENABLED. NO CHANGES WILL BE MADE
    ***********************************************************************
    Will request the creation of [myIP]
    
    --dryrun 옵션을 선택하면 실제로 공동 작업을 수행합니다.
    출력은 Created IP Set [myIP]입니다.
    $ python ip_list_to_set.py -d 21 -u webapi -p xxxxxxxx -t tenant_name
    Converted 1 IP List entries to 1 IP Set entries
    Created IP Set [myIP] with ID [xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx]
    
    AWS WAF의 condition을 보면 추가myIP입니다.

    내용은 이런 느낌.

    4-2. 평점


    추가 1


    IPList에 정보를 추가하여 다시 합작하다.
    $ python ip_list_to_set.py -d 21 -u webapi -p xxxxxxxx -t tenant_name --dryrun
    ***********************************************************************
    * DRY RUN ENABLED. NO CHANGES WILL BE MADE
    ***********************************************************************
    Converted 2 IP List entries to 2 IP Set entries
    Will request the addition of 2 entries in IP Set xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    Will update IP Set [myIP] with ID [xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx]
    
    실행하면 Converted 2 IP List entries to 2 IP Set entries 나와요.
    두 개의 IP List entries라고 하나 더 추가되었습니다.
    $ python ip_list_to_set.py -d 21 -u webapi -p xxxxxxxx -t tenant_name
    Converted 2 IP List entries to 2 IP Set entries
    Updated IP Set [myIP] with ID [xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx]
    
    결과는 다음과 같다.
    추가적인 부분을 반영했다.

    수정 1


    방금 추가된 115.xxx.xxx.xxx/32를 변경합니다.
    다음은 Deep Security 약간 변화구로 지원하지만 AWS가 지원하지 않는 표현 형식으로 사용해 보자.
    Deep Security에서 지원하는 디스플레이는 다음과 같습니다.

    우선 115.xxx.xxx.xxx/32115.xxx.xxx.0/255.255.255.0로 변경한다.

    명령 집행을 생략하다.(동일하게 표시되기 때문)
    뜻밖에도 115.xxx.xxx.xxx/32 변경 없이 그대로 남아 115.xxx.xxx.0/24로 추가 등록되었다.
    너는 정말 똑똑하다.

    수정 2


    이어서 115.xxx.xxx.0/255.255.255.0123.xxx.xxx.0 - 123.xxx.xxx.255로 설정합니다.
    기대치는123.xxx.xxx.0/24 が追加される입니다.
    $ python ip_list_to_set.py -d 21 -u webapi -p nPxwcrV3 -t [email protected] --dryrun
    ***********************************************************************
    * DRY RUN ENABLED. NO CHANGES WILL BE MADE
    ***********************************************************************
    Converted 2 IP List entries to 1 IP Set entries
    Will request the addition of 1 entries in IP Set xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    Will update IP Set [myIP] with ID [xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx]
    
    출력이 바뀌었네.Converted 2 IP List entries to 1 IP Set entries.
    $ python ip_list_to_set.py -d 21 -u webapi -p nPxwcrV3 -t [email protected]
    Converted 2 IP List entries to 1 IP Set entries
    Updated IP Set [myIP] with ID [xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx]
    
    123.xxx.xxx.0/24 추가되지 않습니다.
    전자레인지 표시는 지원되지 않는 것 같습니다.

    추가 2(2016/22 보충)


    CIDER와 마스크가 없으면 문제가 있을 수 있으니 절개해야 한다.
    추가123.xxx.xxx.0, 연합을 시도해 보자.

    명령 실행은 생략되었지만 결과는123.xxx.xxx.0/32 및 CIDER 형식입니다.
    무척

    추가 3(2016/22 보충)


    실제 운용 중인 IP 리스트에서 구상에 많은 댓글이 달릴 테니 댓글로 남겨주세요.
    이번에 추가123.42.99.1/32 #hogehoge.

    아이고, 실수했네.# 잘 안 되는 것 같아요.
    운용에 좀 곤란하다.(2016/3/4 수정됨)
    $ python ip_list_to_set.py -d 21 -u webapi -p xxxxxxxx -t tenant_name --dryrun
    ***********************************************************************
    * DRY RUN ENABLED. NO CHANGES WILL BE MADE
    ***********************************************************************
    Traceback (most recent call last):
      File "ip_list_to_set.py", line 385, in <module>
        if __name__ == '__main__': main()
      File "ip_list_to_set.py", line 381, in main
        context.create_ip_set(ip_list)
      File "ip_list_to_set.py", line 321, in create_ip_set
        updates = self._convert_ds_addresses_to_waf(ds_list)
      File "ip_list_to_set.py", line 274, in _convert_ds_addresses_to_waf
        addresses = self._parse_ds_addresses(ds_list)
      File "ip_list_to_set.py", line 239, in _parse_ds_addresses
        if "#" in address: address = split('#').strip() # remove any comments
    NameError: global name 'split' is not defined
    

    총결산


    Deep Security~AWS WAF 협력 도구에 대한 평가는 다음과 같습니다.
  • 조작 가능한 버전(a877db1)의 최신 버전
  • DSaS의 IP 리스트를 지정하고 AWS WAF의 condition(IP Lists)에 추가된 기능
  • 같은 이름의 condition(IP Lists)이 없으면 제작
  • 같은 이름의 condition(IP Lists)이 있으면 차점追加이 생긴다.(삭제 안 함)
  • IP 목록의 마스크 표현을 CIDER 형식으로 변환합니다.
  • IP 목록에 범위가 표시되지 않은 정보입니다.

  • 주석#이 순조롭게 처리되지 않기 때문에 IP 목록에서 주석의 내용을 삭제할 준비가 필요합니다(2016/22 추가)(2016/3/4 수정 완료)
  • 상기 특성을 이해하고 활용하고 싶습니다.
    활용의 용례에 관해서 나는 따로 쓰고 싶다.
    Giithub에 등록된 도구이기 때문에 문의와 오류 지적은 Giithub이 가장 좋다.
    개발자와 직접 교류할 수 있는 것이 매력이다.
    오늘은 여기까지.
    수고하셨습니다.

    좋은 웹페이지 즐겨찾기