From ed1ebef7b328ca073ba4356cf727b7d84e7018f1 Mon Sep 17 00:00:00 2001 From: 8ear Date: Mon, 2 Sep 2019 10:03:32 +0200 Subject: [PATCH 1/7] Bugfixing for MISP-modules --- docs/install.md | 31 +++++++++---------------------- 1 file changed, 9 insertions(+), 22 deletions(-) diff --git a/docs/install.md b/docs/install.md index 7fbd9c7..bc3a13a 100644 --- a/docs/install.md +++ b/docs/install.md @@ -1,29 +1,15 @@ -## How to install and start MISP modules in a Python virtualenv? +## How to install and start MISP modules (in a Python virtualenv)? ~~~~bash -sudo apt-get install python3-dev python3-pip libpq5 libjpeg-dev tesseract-ocr imagemagick -sudo -u www-data virtualenv -p python3 /var/www/MISP/venv +sudo apt-get install python3-dev python3-pip libpq5 libjpeg-dev tesseract-ocr imagemagick ruby-pygments.rb +# With virtualenv: sudo -u www-data virtualenv -p python3 /var/www/MISP/venv cd /usr/local/src/ sudo git clone https://github.com/MISP/misp-modules.git cd misp-modules -sudo -u www-data /var/www/MISP/venv/bin/pip install -I -r REQUIREMENTS -sudo -u www-data /var/www/MISP/venv/bin/pip install . -sudo apt install ruby-pygments.rb -y -sudo gem install asciidoctor-pdf --pre -sudo sed -i -e '$i \sudo -u www-data /var/www/MISP/venv/bin/misp-modules -l 127.0.0.1 -s > /tmp/misp-modules_rc.local.log &\n' /etc/rc.local -/var/www/MISP/venv/bin/misp-modules -l 127.0.0.1 -s & #to start the modules -~~~~ - -## How to install and start MISP modules? - -~~~~bash -sudo apt-get install python3-dev python3-pip libpq5 libjpeg-dev tesseract-ocr imagemagick -cd /usr/local/src/ -sudo git clone https://github.com/MISP/misp-modules.git -cd misp-modules -sudo pip3 install -I -r REQUIREMENTS -sudo pip3 install -I . -sudo apt install ruby-pygments.rb -y +# With virtualenv: sudo -u www-data /var/www/MISP/venv/bin/pip install -I -r REQUIREMENTS +# With virtualenv: sudo -u www-data /var/www/MISP/venv/bin/pip install . +# Without virtualenv: pip install -I -r REQUIREMENTS +# Without virtualenv: pip install . sudo gem install asciidoctor-pdf --pre sudo sed -i -e '$i \sudo -u www-data /var/www/MISP/venv/bin/misp-modules -l 127.0.0.1 -s > /tmp/misp-modules_rc.local.log &\n' /etc/rc.local /var/www/MISP/venv/bin/misp-modules -l 127.0.0.1 -s & #to start the modules @@ -36,6 +22,7 @@ sudo sed -i -e '$i \sudo -u www-data /var/www/MISP/venv/bin/misp-modules -l 127. ~~~~bash # Start Redis docker run --rm -d --name=misp-redis redis:alpine +# Start MISP-modules docker run \ --rm -d --name=misp-modules \ -e REDIS_BACKEND=misp-redis \ @@ -43,7 +30,7 @@ docker run \ -e REDIS_PW="" \ -e REDIS_DATABASE="245" \ -e MISP_MODULES_DEBUG="false" \ - dcso/misp-dockerized-redis + dcso/misp-dockerized-misp-modules ~~~~ ### Docker-compose From a5345c52c8c9563d05fa185a322c6f744ec7a13b Mon Sep 17 00:00:00 2001 From: 8ear Date: Mon, 2 Sep 2019 10:21:37 +0200 Subject: [PATCH 2/7] Update install doc --- docs/install.md | 63 ++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 57 insertions(+), 6 deletions(-) diff --git a/docs/install.md b/docs/install.md index bc3a13a..f1a7469 100644 --- a/docs/install.md +++ b/docs/install.md @@ -1,20 +1,71 @@ ## How to install and start MISP modules (in a Python virtualenv)? ~~~~bash -sudo apt-get install python3-dev python3-pip libpq5 libjpeg-dev tesseract-ocr imagemagick ruby-pygments.rb +sudo apt-get install python3-dev python3-pip libpq5 libjpeg-dev tesseract-ocr libpoppler-cpp-dev imagemagick virtualenv libopencv-dev zbar-tools libzbar0 libzbar-dev libfuzzy-dev # With virtualenv: sudo -u www-data virtualenv -p python3 /var/www/MISP/venv cd /usr/local/src/ sudo git clone https://github.com/MISP/misp-modules.git cd misp-modules -# With virtualenv: sudo -u www-data /var/www/MISP/venv/bin/pip install -I -r REQUIREMENTS -# With virtualenv: sudo -u www-data /var/www/MISP/venv/bin/pip install . -# Without virtualenv: pip install -I -r REQUIREMENTS -# Without virtualenv: pip install . -sudo gem install asciidoctor-pdf --pre + +# BEGIN with virtualenv: +sudo -u www-data /var/www/MISP/venv/bin/pip install -I -r REQUIREMENTS +sudo -u www-data /var/www/MISP/venv/bin/pip install . +# END with virtualenv + +# BEGIN without virtualenv: +pip install -I -r REQUIREMENTS +pip install . +# END without virtualenv + +# To start after reboot: sudo sed -i -e '$i \sudo -u www-data /var/www/MISP/venv/bin/misp-modules -l 127.0.0.1 -s > /tmp/misp-modules_rc.local.log &\n' /etc/rc.local + +# Start the Module: /var/www/MISP/venv/bin/misp-modules -l 127.0.0.1 -s & #to start the modules ~~~~ +## How to install and start MISP modules on RHEL-based distributions ? + +As of this writing, the official RHEL repositories only contain Ruby 2.0.0 and Ruby 2.1 or higher is required. As such, this guide installs Ruby 2.2 from the SCL repository. + +~~~~bash +sudo yum install rh-ruby22 +sudo yum install openjpeg-devel +sudo yum install rubygem-rouge rubygem-asciidoctor zbar-devel opencv-devel gcc-c++ pkgconfig poppler-cpp-devel python-devel redhat-rpm-config +cd /var/www/MISP +git clone https://github.com/MISP/misp-modules.git +cd misp-modules +sudo -u apache /usr/bin/scl enable rh-python36 "virtualenv -p python3 /var/www/MISP/venv" +sudo -u apache /var/www/MISP/venv/bin/pip install -U -I -r REQUIREMENTS +sudo -u apache /var/www/MISP/venv/bin/pip install -U . +~~~~ + +Create the service file /etc/systemd/system/misp-modules.service : + +~~~~bash +echo "[Unit] +Description=MISP's modules +After=misp-workers.service + +[Service] +Type=simple +User=apache +Group=apache +ExecStart=/usr/bin/scl enable rh-python36 rh-ruby22 '/var/www/MISP/venv/bin/misp-modules –l 127.0.0.1 –s' +Restart=always +RestartSec=10 + +[Install] +WantedBy=multi-user.target" | sudo tee /etc/systemd/system/misp-modules.service +~~~~ + +The After=misp-workers.service must be changed or removed if you have not created a misp-workers service. Then, enable the misp-modules service and start it: + +~~~~bash +systemctl daemon-reload +systemctl enable --now misp-modules +~~~~ + ## How to use an MISP modules Docker container ### Docker run From 241824870e9a7057eaead167209c0e3d882e9ccf Mon Sep 17 00:00:00 2001 From: 8ear Date: Mon, 2 Sep 2019 11:45:26 +0200 Subject: [PATCH 3/7] Add Dockerfile, Entrypoint and Healthcheck script --- docker/Dockerfile | 129 ++++++++++++++++++++++++++++++++++++ docker/files/entrypoint.sh | 37 +++++++++++ docker/files/healthcheck.sh | 4 ++ 3 files changed, 170 insertions(+) create mode 100644 docker/Dockerfile create mode 100755 docker/files/entrypoint.sh create mode 100755 docker/files/healthcheck.sh diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..579f56f --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,129 @@ +FROM python:3.7-buster AS build + +ENV DEBIAN_FRONTEND noninteractive +ENV WORKDIR="/usr/local/src/misp_modules" +ENV VENV_DIR="/misp_modules" + +# Install Packages for build +RUN set -eu \ + ;mkdir -p ${WORKDIR} ${VENV_DIR} \ + ;apt-get update \ + ;apt-get install -y \ + git \ + libpq5 \ + libjpeg-dev \ + tesseract-ocr \ + libpoppler-cpp-dev \ + imagemagick virtualenv \ + libopencv-dev \ + zbar-tools \ + libzbar0 \ + libzbar-dev \ + libfuzzy-dev \ + ;apt-get -y autoremove \ + ;apt-get -y clean \ + ;rm -rf /var/lib/apt/lists/* \ + ; + +# Create MISP Modules +RUN set -eu \ + ;git clone https://github.com/MISP/misp-modules.git ${WORKDIR} \ + ;virtualenv -p python3 ${VENV_DIR}/venv \ + ;cd ${WORKDIR} \ + ;${VENV_DIR}/venv/bin/pip3 install -I -r REQUIREMENTS --no-cache-dir \ + ;${VENV_DIR}/venv/bin/pip3 install . --no-cache-dir \ + ;chown -R nobody ${VENV_DIR} \ + ;rm -rf ${WORKDIR} \ + ; + +######################################### + +FROM python:3.7-slim-buster AS final + +ENV DEBIAN_FRONTEND noninteractive +ENV VENV_DIR="/misp_modules" + +# Copy all builded files from build stage +COPY --from=build ${VENV_DIR} ${VENV_DIR} + +# Install Packages to run it +RUN set -eu \ + ;apt-get update \ + ;apt-get install -y \ + curl \ + libpq5 \ + libjpeg-dev \ + tesseract-ocr \ + libpoppler-cpp-dev \ + imagemagick virtualenv \ + libopencv-dev \ + zbar-tools \ + libzbar0 \ + libzbar-dev \ + libfuzzy-dev \ + ;apt-get -y autoremove \ + ;apt-get -y clean \ + ;rm -rf /var/lib/apt/lists/* \ + ;chown -R nobody ${VENV_DIR} \ + ; + +# Entrypoint + COPY files/entrypoint.sh /entrypoint.sh + ENTRYPOINT [ "/entrypoint.sh" ] + +# Add Healthcheck Config + COPY files/healthcheck.sh /healthcheck.sh + HEALTHCHECK --interval=1m --timeout=45s --retries=3 CMD ["/healthcheck.sh"] + +# Change Workdir + WORKDIR ${VENV_DIR} + +# Change from root to www-data + USER nobody + +# Expose Port + EXPOSE 6666 + +# Shortterm ARG Variables: + ARG VENDOR="MISP" + ARG COMPONENT="misp-modules" + ARG BUILD_DATE + ARG GIT_REPO="https://github.com/MISP/misp-modules" + ARG VCS_REF + ARG RELEASE_DATE + ARG NAME="MISP-dockerized-misp-modules" + ARG DESCRIPTION="This docker container contains MISP modules in an Debian Container." + ARG DOCUMENTATION="https://misp.github.io/misp-modules/" + ARG AUTHOR="MISP" + ARG LICENSE="BSD-3-Clause" + +# Longterm Environment Variables +ENV \ + BUILD_DATE=${BUILD_DATE} \ + NAME=${NAME} \ + PATH=$PATH:${VENV_DIR}/venv/bin + +# Labels +LABEL org.label-schema.build-date="${BUILD_DATE}" \ + org.label-schema.name="${NAME}" \ + org.label-schema.description="${DESCRIPTION}" \ + org.label-schema.vcs-ref="${VCS_REF}" \ + org.label-schema.vcs-url="${GIT_REPO}" \ + org.label-schema.url="${GIT_REPO}" \ + org.label-schema.vendor="${VENDOR}" \ + org.label-schema.version="${VERSION}" \ + org.label-schema.usage="${DOCUMENTATION}" \ + org.label-schema.schema-version="1.0.0-rc1" + +LABEL org.opencontainers.image.created="${BUILD_DATE}" \ + org.opencontainers.image.url="${GIT_REPO}" \ + org.opencontainers.image.source="${GIT_REPO}" \ + org.opencontainers.image.version="${VERSION}" \ + org.opencontainers.image.revision="${VCS_REF}" \ + org.opencontainers.image.vendor="${VENDOR}" \ + org.opencontainers.image.title="${NAME}" \ + org.opencontainers.image.description="${DESCRIPTION}" \ + org.opencontainers.image.documentation="${DOCUMENTATION}" \ + org.opencontainers.image.authors="${AUTHOR}" \ + org.opencontainers.image.licenses="${LICENSE}" + diff --git a/docker/files/entrypoint.sh b/docker/files/entrypoint.sh new file mode 100755 index 0000000..fda2af4 --- /dev/null +++ b/docker/files/entrypoint.sh @@ -0,0 +1,37 @@ +#!/bin/sh +set -eu + +# Variables +NC='\033[0m' # No Color +Light_Green='\033[1;32m' +STARTMSG="${Light_Green}[ENTRYPOINT_MISP_MODULES]${NC}" +VENV_DIR=${VENV_DIR:-"/misp-modules"} +MISP_MODULES_BINARY="${VENV_DIR}/venv/bin/misp-modules" +DEBUG="" + +# Functions +echo (){ + command echo -e "$STARTMSG $*" +} + +# Environment Variables +MISP_MODULES_DEBUG=${MISP_MODULES_DEBUG:-"false"} + +# +# MAIN +# + + +# Check if debugging mode should be enabled +[ "$MISP_MODULES_DEBUG" = "true" ] && DEBUG="-d" + +# check if a command parameter exists and start misp-modules +if [ $# = 0 ] +then + # If no cmd parameter is set + echo "Start MISP Modules" && $MISP_MODULES_BINARY $DEBUG -l 0.0.0.0 > /dev/stdout 2> /dev/stderr +else + # If cmd parameter is set + echo "Start MISP Modules" && $MISP_MODULES_BINARY $DEBUG -l 0.0.0.0 > /dev/stdout 2> /dev/stderr & + exec "$@" +fi diff --git a/docker/files/healthcheck.sh b/docker/files/healthcheck.sh new file mode 100755 index 0000000..d6a1f91 --- /dev/null +++ b/docker/files/healthcheck.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# If no contain is there or curl get an error back: exit 1. Docker restart then the container. +curl -fk http://0.0.0.0:6666/modules || exit 1 \ No newline at end of file From e82789cba82048df124a08e3c0d5b48750a67e5e Mon Sep 17 00:00:00 2001 From: 8ear Date: Mon, 2 Sep 2019 12:12:31 +0200 Subject: [PATCH 4/7] Improve the Dockerfile --- docker/Dockerfile | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 579f56f..e7a4eec 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -14,7 +14,8 @@ RUN set -eu \ libjpeg-dev \ tesseract-ocr \ libpoppler-cpp-dev \ - imagemagick virtualenv \ + imagemagick \ + virtualenv \ libopencv-dev \ zbar-tools \ libzbar0 \ @@ -32,12 +33,11 @@ RUN set -eu \ ;cd ${WORKDIR} \ ;${VENV_DIR}/venv/bin/pip3 install -I -r REQUIREMENTS --no-cache-dir \ ;${VENV_DIR}/venv/bin/pip3 install . --no-cache-dir \ - ;chown -R nobody ${VENV_DIR} \ - ;rm -rf ${WORKDIR} \ ; ######################################### - +# Start Final Docker Image +# FROM python:3.7-slim-buster AS final ENV DEBIAN_FRONTEND noninteractive @@ -52,15 +52,16 @@ RUN set -eu \ ;apt-get install -y \ curl \ libpq5 \ - libjpeg-dev \ + # libjpeg-dev \ tesseract-ocr \ libpoppler-cpp-dev \ - imagemagick virtualenv \ - libopencv-dev \ + imagemagick \ + virtualenv \ + # libopencv-dev \ zbar-tools \ libzbar0 \ - libzbar-dev \ - libfuzzy-dev \ + # libzbar-dev \ + # libfuzzy-dev \ ;apt-get -y autoremove \ ;apt-get -y clean \ ;rm -rf /var/lib/apt/lists/* \ From cdbe99824ec50a22af1e91424441b38f95e8615f Mon Sep 17 00:00:00 2001 From: 8ear Date: Mon, 2 Sep 2019 12:19:57 +0200 Subject: [PATCH 5/7] Fix entrypoint bug --- docker/files/entrypoint.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/files/entrypoint.sh b/docker/files/entrypoint.sh index fda2af4..73d8f39 100755 --- a/docker/files/entrypoint.sh +++ b/docker/files/entrypoint.sh @@ -11,7 +11,7 @@ DEBUG="" # Functions echo (){ - command echo -e "$STARTMSG $*" + command echo "$STARTMSG $*" } # Environment Variables From a9a4ec385180118a83aaeb7a0dacbc21a15d3cba Mon Sep 17 00:00:00 2001 From: 8ear Date: Mon, 2 Sep 2019 12:20:18 +0200 Subject: [PATCH 6/7] Disable not required package virtualenv for final stage --- docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index e7a4eec..8ac6d9f 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -56,7 +56,7 @@ RUN set -eu \ tesseract-ocr \ libpoppler-cpp-dev \ imagemagick \ - virtualenv \ + # virtualenv \ # libopencv-dev \ zbar-tools \ libzbar0 \ From 4f0237508e57d9273cfb39dae9ad39116821b3ab Mon Sep 17 00:00:00 2001 From: 8ear Date: Mon, 2 Sep 2019 14:10:49 +0200 Subject: [PATCH 7/7] Add .travis.yml command for docker build --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index 18c02c6..db66efd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,6 +10,9 @@ python: - "3.6-dev" - "3.7-dev" +before_install: + - docker build -t misp-modules --build-arg BUILD_DATE=$(date -u +"%Y-%m-%d") docker/ + install: - sudo apt-get install libzbar0 libzbar-dev libpoppler-cpp-dev - pip install pipenv