사이버 위협 정보 집계 시스템 EXIST를 CentOS8에 설치해 보았습니다.

8576 단어 보안centos8NICT

소개



NICT가 공개하고 있는 사이버 위협 정보 집계 시스템 「EXIST」를 CentOS8에 인스톨 했을 때의 메모입니다.

사이버 위협 정보 집계 시스템 EXIST
EXIST github

환경


  • 가상 환경:Parallels Desktop 15.1.4
  • OS:CentOS 8.2
  • 메모리 : 2GB
  • CPU : 2 코어
  • Python3.6.8

  • CentOS8은 최소 패키지로 설치됩니다.

    EXIST 설치 전 준비



    SELINUX 비활성화



    뭔가 나쁜 것 같은 생각이 들기 때문에 잘라 둡니다.
    # vi /etc/selinux/config
    
    #SELINUXをオフにする
    SELINUX=disabled
    

    시간대를 일본으로 만들기


    # timedatectl list-timezones
    # timedatectl set-timezone Asia/Tokyo
    

    LANG 확인



    영어라면 뭔가 나쁨을 할 것 같은 느낌이므로 확인합니다.
    # echo $LANG
    ja_JP.UTF-8
    

    괜찮을 것 같습니다.

    업데이트하기



    모두 업데이트해 둡니다.
    # dnf update -y
    

    파이썬 설치



    python3.6.8을 설치합니다.
    # dnf install python3 python3-devel -y
    # dnf groupinstall 'development tools' -y
    # python3 --version
    Python 3.6.8
    

    (python3.8이라면 나중에 pip3 install -r requirements.txt가 작동하지 않았습니다.)

    pip를 업데이트합니다.


    # pip3 install --upgrade pip
    # pip3 --version
    pip 20.1.1 from /usr/local/lib/python3.6/site-packages/pip (python 3.6)
    

    EXIST 설치



    여기에서 거의 Github의 README 거리입니다.

    git clone



    이번은 /opt 부하에 인스톨 해 갑니다.
    # cd /opt
    # git clone https://github.com/nict-csl/exist.git
    

    파이썬 모듈 설치


    # cd /opt/exist
    # pip3 install -r requirements.txt
    

    MariaDB 설치


    # curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
    # dnf install MariaDB-server MariaDB-client
    

    일본어 편지 대책



    이대로라면 일본어가 깨져 버리기 때문에, 디폴트의 문자 코드를 설정합니다.
    vi /etc/my.cnf.d/server.cnf
    
    [mysqld]
    character-set-server=utf8mb4
    

    MariaDB 실행


    # systemctl start mariadb
    # systemctl enable mariadb
    

    MariaDB 설정



    DB와 사용자 만들기


    # mysql -u root -p
    MariaDB [(none)]> CREATE DATABASE intelligence_db;
    MariaDB [(none)]> CREATE USER 'exist'@'localhost' IDENTIFIED BY 'P@ssw0rd!';
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON intelligence_db.* TO 'exist'@'localhost';
    MariaDB [(none)]> quit
    

    DB 정보를 .env로 설정



    샘플 파일을 복사하여 .env를 만듭니다.
    # cp .env.example .env
    

    .env 파일을 편집합니다.
    # vi .env
    #以下のように設定
    # EXIST Database Settings
    EXIST_DB_NAME="intelligence_db"
    EXIST_DB_USER="exist"
    EXIST_DB_PASSWORD="P@ssw0rd!"
    EXIST_DB_HOST="localhost"
    EXIST_DB_PORT="3306"
    

    장고의 개인 키 설정



    개인 키 만들기


    # python3 keygen.py
    70mm6h)()h3r&*b9xq$e52=-7($p=5983gfoyz%$d-j-gd7u5@
    

    개인 키 설정


    # vi .env
    #以下のように設定
    # EXIST Application Settings
    EXIST_SECRET_KEY="70mm6h)()h3r&*b9xq$e52=-7($p=5983gfoyz%$d-j-gd7u5@"
    

    ALLOWED_HOST 설정


    # vi .env
    #ホストのIPアドレスやドメインを設定
    # ALLOWED_HOSTS settings for Django. 
    # Example: "192.168.1.2|localhost|example.com|..." 
    EXIST_ALLOWED_HOSTS="192.168.56.101|localhost"
    

    Migrate 실시


    # python3 manage.py makemigrations exploit reputation threat threat_hunter twitter twitter_hunter news news_hunter vuln
    # python3 manage.py migrate
    

    Redis 설치


    # dnf install redis -y
    # systemctl start redis
    # systemctl enable redis
    

    celery 설정



    celery의 경로 확인


    # which celery
    /usr/local/bin/celery
    

    celery 설정



    celery의 경로를 CELERY_BIN로 설정합니다.
    # vi /etc/sysconfig/celery
    
    # Name of nodes to start
    # here we have a single node
    CELERYD_NODES="w1"
    # or we could have three nodes:
    #CELERYD_NODES="w1 w2 w3"
    
    # Absolute or relative path to the 'celery' command:
    CELERY_BIN="/usr/local/bin/celery"
    
    # App instance to use
    # comment out this line if you don't use an app
    CELERY_APP="intelligence"
    # or fully qualified:
    #CELERY_APP="proj.tasks:app"
    
    # How to call manage.py
    CELERYD_MULTI="multi"
    
    # Extra command-line arguments to the worker
    CELERYD_OPTS="--time-limit=300 --concurrency=8"
    
    # - %n will be replaced with the first part of the nodename.
    # - %I will be replaced with the current child process index
    # and is important when using the prefork pool to avoid race conditions.
    CELERYD_PID_FILE="/var/run/celery/%n.pid"
    CELERYD_LOG_FILE="/var/log/celery/%n%I.log"
    CELERYD_LOG_LEVEL="INFO"
    

    celery를 서비스에 추가


    # vi /etc/systemd/system/celery.service
    
    [Unit]
    Description=Celery Service
    After=network.target
     
    [Service]
    Type=forking
    User=root
    Group=root
    EnvironmentFile=/etc/sysconfig/celery
    WorkingDirectory=/opt/exist
    ExecStart=/bin/sh -c '${CELERY_BIN} multi start ${CELERYD_NODES} \
    -A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE} \
    --logfile=${CELERYD_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL} ${CELERYD_OPTS}'
    ExecStop=/bin/sh -c '${CELERY_BIN} multi stopwait ${CELERYD_NODES} \
    --pidfile=${CELERYD_PID_FILE}'
    ExecReload=/bin/sh -c '${CELERY_BIN} multi restart ${CELERYD_NODES} \
    -A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE} \
    --logfile=${CELERYD_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL} ${CELERYD_OPTS}'
     
    [Install]
    WantedBy=multi-user.target
    

    celery 로그 및 실행 영역 만들기


    # mkdir /var/log/celery; chown root:root /var/log/celery
    # mkdir /var/run/celery; chown root:root /var/run/celery
    

    celery의 구성 파일 작성


    # vi /etc/tmpfiles.d/exist.conf
    
    #Type  Path               Mode  UID        GID         Age  Argument
    d      /var/run/celery    0755  root  root  -
    

    celery 실행


    # systemctl start celery.service
    # systemctl enable celery.service
    

    방화벽 설정


    # firewall-cmd --zone=public --add-service=http --permanent
    # firewall-cmd --zone=public --add-service=https --permanent
    # firewall-cmd --zone=public --add-port=8000/tcp --permanent
    # firewall-cmd --reload
    

    EXIST 시작


    # python3 manage.py runserver 192.168.56.101:8000
    

    부팅 후 http://192.168.56.101:8000/에 액세스하여 동작을 확인할 수 있습니다.

    방문하고 보면 ...




    /opt/exist/static/ 부하의 CSS가 올바르게 로드되지 않고, 스타일이 무너져 버렸습니다. 왜. . .

    여러가지 만져 보았을 때, .env 안의 EXIST_DEBUG_MODETrue 로 바꾸는 것으로 올바르게 표시되게 되었습니다.
    # vi /opt/exist/.env
    EXIST_DEBUG_MODE="True"
    



    DEBUG_MODE로 움직이고 있다고 생각하면 기분 나쁘지만 다른 해결 방법을 모르기 때문에 우선 이대로 가고 싶습니다.
    뭔가 알면 추기하겠습니다.

    자동 시작 설정



    자동 시작하도록 설정합니다.
    # crontab -e
    @reboot /usr/bin/python3 /opt/exist/manage.py runserver 192.168.56.101:8000
    

    끝에



    EXIST 설치까지의 메모를 기재했습니다.
    앞으로는 위협 정보를 캡처하는 방법을 설명할 예정입니다.

    참고 정보



    EXIST @ubuntu 18.4.2
    NICT EXIST를 설치해 보았습니다.
    NICT가 공개한 사이버 위협 정보를 자동 집약할 수 있는 EXIST를 만들어 보았다(설치편)

    좋은 웹페이지 즐겨찾기