mirror of
				https://github.com/wazuh/wazuh-docker.git
				synced 2025-10-31 03:53:33 +00:00 
			
		
		
		
	Compare commits
	
		
			107 Commits
		
	
	
		
			3.10-wazuh
			...
			devel
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | e9fec0e497 | ||
|  | 7042854bfa | ||
|  | b63c294288 | ||
|  | 9df61de961 | ||
|  | 86ff04c0b3 | ||
|  | 0992111200 | ||
|  | a1a27922de | ||
|  | eba6bc6752 | ||
|  | 2df878f040 | ||
|  | 4acc3b402b | ||
|  | eba4fdf8eb | ||
|  | 1f825c13be | ||
|  | 3cfa63fc2e | ||
|  | 77b163bf10 | ||
|  | 2921d67de1 | ||
|  | edb1c69294 | ||
|  | 9536ff5963 | ||
|  | 146dbff787 | ||
|  | 489bd01f36 | ||
|  | 54c5c643da | ||
|  | 7e9abfab60 | ||
|  | 183519e2d5 | ||
|  | 75e7f3df62 | ||
|  | 99ddc15cf6 | ||
|  | c0a503bc81 | ||
|  | 966a3dcef7 | ||
|  | 9fc689206d | ||
|  | 9b329b095e | ||
|  | f0ba8c3e63 | ||
|  | edae7d3c6a | ||
|  | af5db1efac | ||
|  | 14f0d6d622 | ||
|  | cb60fc8b77 | ||
|  | 4f612e5426 | ||
|  | 90074777da | ||
|  | 320061f022 | ||
|  | 125f83e6df | ||
|  | 707fe87804 | ||
|  | c9a43bd5ff | ||
|  | 26679d46f6 | ||
|  | 627e9517d8 | ||
|  | ced83faef0 | ||
|  | 3b1814ec7b | ||
|  | 26d381b403 | ||
|  | 79f402ca2f | ||
|  | d0ba0465fe | ||
|  | 5dbfa958b7 | ||
|  | c13680e084 | ||
|  | e2559957da | ||
|  | 6afb9d0779 | ||
|  | 6412cb90f9 | ||
|  | bde4351a2a | ||
|  | 4f7ae19d81 | ||
|  | d1f1e401b1 | ||
|  | ea27c239b2 | ||
|  | e437c1a4ec | ||
|  | 1f57ad6619 | ||
|  | 61a1385462 | ||
|  | 427b87d6e1 | ||
|  | 8615cd4d21 | ||
|  | a4a64e66f4 | ||
|  | a561deeaec | ||
|  | 9f710f90c3 | ||
|  | 4b054e88ca | ||
|  | 43da69277f | ||
|  | 17865358d8 | ||
|  | 95cb2fa3aa | ||
|  | bba5b90716 | ||
|  | afb1c1fba3 | ||
|  | 95b6b70a70 | ||
|  | 44a7a9b16f | ||
|  | 49f1b476b5 | ||
|  | e83a092449 | ||
|  | 380ba92708 | ||
|  | 7e8e11bfd6 | ||
|  | 3c7d0f441d | ||
|  | 23fffddf95 | ||
|  | 88ec0fc043 | ||
|  | 774d14ee18 | ||
|  | 66f50039b0 | ||
|  | 99361ee0e4 | ||
|  | 89eda06a27 | ||
|  | 6c0af46903 | ||
|  | 846ff81102 | ||
|  | 35914c35e1 | ||
|  | 237f55d7e2 | ||
|  | 8cdfca24cf | ||
|  | 60f04d3987 | ||
|  | 2c31757953 | ||
|  | 505767ef31 | ||
|  | 6c9fce8964 | ||
|  | 1f7e3a4498 | ||
|  | 6d44063077 | ||
|  | 8fc6512164 | ||
|  | aaed0058ce | ||
|  | 1562808cf6 | ||
|  | 7a6c3f5f5e | ||
|  | ee0303fd36 | ||
|  | 286714606b | ||
|  | 0af05f88fa | ||
|  | f60195a075 | ||
|  | 7c49e389a8 | ||
|  | b43b1b4299 | ||
|  | 03f87a0927 | ||
|  | dab0f53634 | ||
|  | c01c17623a | ||
|  | 582e93b955 | 
							
								
								
									
										111
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										111
									
								
								CHANGELOG.md
									
									
									
									
									
								
							| @@ -1,6 +1,115 @@ | |||||||
| # Change Log | # Change Log | ||||||
| All notable changes to this project will be documented in this file. | All notable changes to this project will be documented in this file. | ||||||
|  |  | ||||||
|  | ## Wazuh Docker v3.13.1_7.8.0 | ||||||
|  |  | ||||||
|  | ### Added | ||||||
|  |  | ||||||
|  | - Update to Wazuh version 3.13.1_7.8.0 | ||||||
|  |  | ||||||
|  | ## Wazuh Docker v3.13.0_7.7.1 | ||||||
|  |  | ||||||
|  | ### Added | ||||||
|  |  | ||||||
|  | - Update to Wazuh version 3.13.3_7.7.1 | ||||||
|  |  | ||||||
|  | ### Fixed | ||||||
|  |  | ||||||
|  | - Save agentless state ([@xr09](https://github.com/xr09)) [#350](https://github.com/wazuh/wazuh-docker/pull/350) | ||||||
|  | - Use HTTP credentials for service check when required ([@xr09](https://github.com/xr09)) [#356](https://github.com/wazuh/wazuh-docker/pull/356) | ||||||
|  |  | ||||||
|  | ## Wazuh Docker v3.12.3_7.6.2 | ||||||
|  |  | ||||||
|  | ### Added | ||||||
|  |  | ||||||
|  | - Update to Wazuh version 3.12.3_7.6.2 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Wazuh Docker v3.12.2_7.6.2 | ||||||
|  |  | ||||||
|  | ### Added | ||||||
|  |  | ||||||
|  | - Update to Wazuh version 3.12.2_7.6.2 | ||||||
|  |  | ||||||
|  | ## Wazuh Docker v3.12.1_7.6.2 | ||||||
|  |  | ||||||
|  | ### Added | ||||||
|  |  | ||||||
|  | - Update to Wazuh version 3.12.1_7.6.2 | ||||||
|  |  | ||||||
|  | ### Fixed | ||||||
|  |  | ||||||
|  | - Agent timestamp not being properly saved ([@xr09](https://github.com/xr09)) [#323](https://github.com/wazuh/wazuh-docker/pull/323) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Wazuh Docker v3.12.0_7.6.1 | ||||||
|  |  | ||||||
|  | ### Added | ||||||
|  |  | ||||||
|  | - Update to Wazuh version 3.12.0_7.6.1 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Wazuh Docker v3.11.4_7.6.1 | ||||||
|  |  | ||||||
|  | ### Added | ||||||
|  |  | ||||||
|  | - Update to Wazuh version 3.11.4_7.6.1 | ||||||
|  |  | ||||||
|  | - Enable HTTP v2 on nginx ([@xr09](https://github.com/xr09)) [#308](https://github.com/wazuh/wazuh-docker/pull/308) | ||||||
|  |  | ||||||
|  | ### Fixed | ||||||
|  |  | ||||||
|  | - Updated NGINX config syntax ([@xr09](https://github.com/xr09)) [#303](https://github.com/wazuh/wazuh-docker/pull/303) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Wazuh Docker v3.11.3_7.5.2 | ||||||
|  |  | ||||||
|  | ### Added | ||||||
|  |  | ||||||
|  | - Update to Wazuh version 3.11.3_7.5.2 | ||||||
|  |  | ||||||
|  | ## Wazuh Docker v3.11.2_7.5.1 | ||||||
|  |  | ||||||
|  | ### Added | ||||||
|  |  | ||||||
|  | - Bumped Node.js to version 10 ([@xr09](https://github.com/xr09)) [#8615cd4](https://github.com/wazuh/wazuh-docker/commit/8615cd4d2152601e55becc7c3675360938e74b6a) | ||||||
|  |  | ||||||
|  | ### Fixed | ||||||
|  |  | ||||||
|  | - Fix S3 Plugin ([@AnthonySendra](https://github.com/AnthonySendra)) [#293](https://github.com/wazuh/wazuh-docker/pull/293) | ||||||
|  |  | ||||||
|  | ## Wazuh Docker v3.11.1_7.5.1 | ||||||
|  |  | ||||||
|  | ### Added | ||||||
|  |  | ||||||
|  | - Update to Wazuh version 3.11.1_7.5.1 | ||||||
|  | - Filebeat configuration file updated to latest version ([@manuasir](https://github.com/manuasir)) [#271](https://github.com/wazuh/wazuh-docker/pull/271) | ||||||
|  | - Allow using the hostname as node_name for managers ([@JPLachance](https://github.com/JPLachance)) [#261](https://github.com/wazuh/wazuh-docker/pull/261) | ||||||
|  |  | ||||||
|  | ## Wazuh Docker v3.11.0_7.5.1 | ||||||
|  |  | ||||||
|  | ### Added | ||||||
|  |  | ||||||
|  | - Update to Wazuh version 3.11.0_7.5.1 | ||||||
|  |  | ||||||
|  | ## Wazuh Docker v3.10.2_7.5.0 | ||||||
|  |  | ||||||
|  | ### Added | ||||||
|  |  | ||||||
|  | - Update to Wazuh version 3.10.2_7.5.0 | ||||||
|  |  | ||||||
|  | ## Wazuh Docker v3.10.2_7.3.2 | ||||||
|  |  | ||||||
|  | ### Added | ||||||
|  |  | ||||||
|  | - Update to Wazuh version 3.10.2_7.3.2 | ||||||
|  |  | ||||||
|  | ## Wazuh Docker v3.10.0_7.3.2 | ||||||
|  |  | ||||||
|  | ### Added | ||||||
|  |  | ||||||
|  | - Update to Wazuh version 3.10.0_7.3.2 | ||||||
|  |  | ||||||
| ## Wazuh Docker v3.9.5_7.2.1 | ## Wazuh Docker v3.9.5_7.2.1 | ||||||
|  |  | ||||||
| ### Added | ### Added | ||||||
| @@ -140,7 +249,7 @@ All notable changes to this project will be documented in this file. | |||||||
| - Add env credentials for nginx. ([#86](https://github.com/wazuh/wazuh-docker/pull/86)) | - Add env credentials for nginx. ([#86](https://github.com/wazuh/wazuh-docker/pull/86)) | ||||||
| - Improve filebeat configuration ([#88](https://github.com/wazuh/wazuh-docker/pull/88)) | - Improve filebeat configuration ([#88](https://github.com/wazuh/wazuh-docker/pull/88)) | ||||||
|  |  | ||||||
| ### Fixed  | ### Fixed | ||||||
|  |  | ||||||
| - Temporary fix for Wazuh cluster master node in Kubernetes. ([#84](https://github.com/wazuh/wazuh-docker/pull/84)) | - Temporary fix for Wazuh cluster master node in Kubernetes. ([#84](https://github.com/wazuh/wazuh-docker/pull/84)) | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								LICENSE
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								LICENSE
									
									
									
									
									
								
							| @@ -1,5 +1,5 @@ | |||||||
|  |  | ||||||
|  Portions Copyright (C) 2019 Wazuh, Inc. |  Portions Copyright (C) 2020 Wazuh, Inc. | ||||||
|  Based on work Copyright (C) 2003 - 2013 Trend Micro, Inc. |  Based on work Copyright (C) 2003 - 2013 Trend Micro, Inc. | ||||||
|  |  | ||||||
|  This program is a free software; you can redistribute it and/or modify |  This program is a free software; you can redistribute it and/or modify | ||||||
|   | |||||||
| @@ -10,9 +10,9 @@ In this repository you will find the containers to run: | |||||||
| * wazuh: It runs the Wazuh manager, Wazuh API and Filebeat (for integration with Elastic Stack) | * wazuh: It runs the Wazuh manager, Wazuh API and Filebeat (for integration with Elastic Stack) | ||||||
| * wazuh-kibana: Provides a web user interface to browse through alerts data. It includes Wazuh plugin for Kibana, that allows you to visualize agents configuration and status. | * wazuh-kibana: Provides a web user interface to browse through alerts data. It includes Wazuh plugin for Kibana, that allows you to visualize agents configuration and status. | ||||||
| * wazuh-nginx: Proxies the Kibana container, adding HTTPS (via self-signed SSL certificate) and [Basic authentication](https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication#Basic_authentication_scheme). | * wazuh-nginx: Proxies the Kibana container, adding HTTPS (via self-signed SSL certificate) and [Basic authentication](https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication#Basic_authentication_scheme). | ||||||
| * wazuh-elasticsearch: An Elasticsearch container (working as a single-node cluster) using Elastic Stack Docker images. **Be aware to increase the `vm.max_map_count` setting, as it's detailed in the [Wazuh documentation](https://documentation.wazuh.com/current/docker/wazuh-container.html#increase-max-map-count-on-your-host-linux).**  | * wazuh-elasticsearch: An Elasticsearch container (working as a single-node cluster) using Elastic Stack Docker images. **Be aware to increase the `vm.max_map_count` setting, as it's detailed in the [Wazuh documentation](https://documentation.wazuh.com/current/docker/wazuh-container.html#increase-max-map-count-on-your-host-linux).** | ||||||
|  |  | ||||||
| In addition, a docker-compose file is provided to launch the containers mentioned above.  | In addition, a docker-compose file is provided to launch the containers mentioned above. | ||||||
|  |  | ||||||
| * Elasticsearch cluster. In the Elasticsearch Dockerfile we can visualize variables to configure an Elasticsearch Cluster. These variables are used in the file *config_cluster.sh* to set them in the *elasticsearch.yml* configuration file. You can see the meaning of the node variables [here](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html) and other cluster settings [here](https://github.com/elastic/elasticsearch/blob/master/distribution/src/config/elasticsearch.yml). | * Elasticsearch cluster. In the Elasticsearch Dockerfile we can visualize variables to configure an Elasticsearch Cluster. These variables are used in the file *config_cluster.sh* to set them in the *elasticsearch.yml* configuration file. You can see the meaning of the node variables [here](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html) and other cluster settings [here](https://github.com/elastic/elasticsearch/blob/master/distribution/src/config/elasticsearch.yml). | ||||||
|  |  | ||||||
| @@ -57,7 +57,7 @@ In addition, a docker-compose file is provided to launch the containers mentione | |||||||
|  |  | ||||||
| * `stable` branch on correspond to the latest Wazuh-Docker stable version. | * `stable` branch on correspond to the latest Wazuh-Docker stable version. | ||||||
| * `master` branch contains the latest code, be aware of possible bugs on this branch. | * `master` branch contains the latest code, be aware of possible bugs on this branch. | ||||||
| * `Wazuh.Version_ElasticStack.Version` (for example 3.9.5_7.2.1) branch. This branch contains the current release referenced in Docker Hub. The container images are installed under the current version of this branch. | * `Wazuh.Version_ElasticStack.Version` (for example 3.13.1_7.8.0) branch. This branch contains the current release referenced in Docker Hub. The container images are installed under the current version of this branch. | ||||||
|  |  | ||||||
| ## Credits and Thank you | ## Credits and Thank you | ||||||
|  |  | ||||||
| @@ -70,7 +70,7 @@ We thank you them and everyone else who has contributed to this project. | |||||||
|  |  | ||||||
| ## License and copyright | ## License and copyright | ||||||
|  |  | ||||||
| Wazuh Docker Copyright (C) 2019 Wazuh Inc. (License GPLv2) | Wazuh Docker Copyright (C) 2020 Wazuh Inc. (License GPLv2) | ||||||
|  |  | ||||||
| ## Web references | ## Web references | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								VERSION
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								VERSION
									
									
									
									
									
								
							| @@ -1,2 +1,2 @@ | |||||||
| WAZUH-DOCKER_VERSION="3.9.5_7.2.1" | WAZUH-DOCKER_VERSION="3.13.1_7.8.0" | ||||||
| REVISION="3950" | REVISION="31310" | ||||||
|   | |||||||
| @@ -1,9 +1,9 @@ | |||||||
| # Wazuh Docker Copyright (C) 2019 Wazuh Inc. (License GPLv2) | # Wazuh App Copyright (C) 2020 Wazuh Inc. (License GPLv2) | ||||||
| version: '2' | version: '2' | ||||||
|  |  | ||||||
| services: | services: | ||||||
|   wazuh: |   wazuh: | ||||||
|     build: wazuh |     image: wazuh/wazuh:3.13.1_7.8.0 | ||||||
|     hostname: wazuh-manager |     hostname: wazuh-manager | ||||||
|     restart: always |     restart: always | ||||||
|     ports: |     ports: | ||||||
| @@ -11,10 +11,9 @@ services: | |||||||
|       - "1515:1515" |       - "1515:1515" | ||||||
|       - "514:514/udp" |       - "514:514/udp" | ||||||
|       - "55000:55000" |       - "55000:55000" | ||||||
|     volumes: |  | ||||||
|       - '/mnt/wazuh/:/var/ossec/data:z' |  | ||||||
|   elasticsearch: |   elasticsearch: | ||||||
|     build: elasticsearch |     image: wazuh/wazuh-elasticsearch:3.13.1_7.8.0 | ||||||
|     hostname: elasticsearch |     hostname: elasticsearch | ||||||
|     restart: always |     restart: always | ||||||
|     ports: |     ports: | ||||||
| @@ -31,7 +30,7 @@ services: | |||||||
|     mem_limit: 2g |     mem_limit: 2g | ||||||
|  |  | ||||||
|   kibana: |   kibana: | ||||||
|     build: kibana |     image: wazuh/wazuh-kibana:3.13.1_7.8.0 | ||||||
|     hostname: kibana |     hostname: kibana | ||||||
|     restart: always |     restart: always | ||||||
|     depends_on: |     depends_on: | ||||||
| @@ -41,7 +40,7 @@ services: | |||||||
|       - wazuh:wazuh |       - wazuh:wazuh | ||||||
|  |  | ||||||
|   nginx: |   nginx: | ||||||
|     build: nginx |     image: wazuh/wazuh-nginx:3.13.1_7.8.0 | ||||||
|     hostname: nginx |     hostname: nginx | ||||||
|     restart: always |     restart: always | ||||||
|     environment: |     environment: | ||||||
| @@ -53,4 +52,4 @@ services: | |||||||
|     depends_on: |     depends_on: | ||||||
|       - kibana |       - kibana | ||||||
|     links: |     links: | ||||||
|       - kibana:kibana |       - kibana:kibana | ||||||
| @@ -1,6 +1,8 @@ | |||||||
| # Wazuh Docker Copyright (C) 2019 Wazuh Inc. (License GPLv2) | # Wazuh Docker Copyright (C) 2020 Wazuh Inc. (License GPLv2) | ||||||
| ARG ELASTIC_VERSION=7.3.0 | ARG ELASTIC_VERSION=7.8.0 | ||||||
| FROM docker.elastic.co/elasticsearch/elasticsearch:${ELASTIC_VERSION} | FROM docker.elastic.co/elasticsearch/elasticsearch:${ELASTIC_VERSION} | ||||||
|  | ARG ELASTIC_VERSION | ||||||
|  | ARG S3_PLUGIN_URL="https://artifacts.elastic.co/downloads/elasticsearch-plugins/repository-s3/repository-s3-${ELASTIC_VERSION}.zip" | ||||||
|  |  | ||||||
| ENV ELASTICSEARCH_URL="http://elasticsearch:9200" | ENV ELASTICSEARCH_URL="http://elasticsearch:9200" | ||||||
|  |  | ||||||
| @@ -10,17 +12,18 @@ ENV ALERTS_SHARDS="1" \ | |||||||
| ENV API_USER="foo" \ | ENV API_USER="foo" \ | ||||||
|     API_PASS="bar" |     API_PASS="bar" | ||||||
|  |  | ||||||
| ENV XPACK_ML="true"  | ENV XPACK_ML="true" | ||||||
|  |  | ||||||
| ENV ENABLE_CONFIGURE_S3="false" | ENV ENABLE_CONFIGURE_S3="false" | ||||||
|  |  | ||||||
| ARG TEMPLATE_VERSION=v3.9.5 | ARG TEMPLATE_VERSION=v3.13.1 | ||||||
|  |  | ||||||
| # Elasticearch cluster configuration environment variables | # Elasticearch cluster configuration environment variables | ||||||
| # If ELASTIC_CLUSTER is set to "true" the following variables will be added to the Elasticsearch configuration | # If ELASTIC_CLUSTER is set to "true" the following variables will be added to the Elasticsearch configuration | ||||||
| # CLUSTER_INITIAL_MASTER_NODES set to own node by default. | # CLUSTER_INITIAL_MASTER_NODES set to own node by default. | ||||||
| ENV ELASTIC_CLUSTER="false" \ | ENV ELASTIC_CLUSTER="false" \ | ||||||
|     CLUSTER_NAME="wazuh" \ |     CLUSTER_NAME="wazuh" \ | ||||||
|  |     CLUSTER_NETWORK_HOST="0.0.0.0" \ | ||||||
|     CLUSTER_NODE_MASTER="false" \ |     CLUSTER_NODE_MASTER="false" \ | ||||||
|     CLUSTER_NODE_DATA="true" \ |     CLUSTER_NODE_DATA="true" \ | ||||||
|     CLUSTER_NODE_INGEST="true" \ |     CLUSTER_NODE_INGEST="true" \ | ||||||
| @@ -33,7 +36,7 @@ ENV ELASTIC_CLUSTER="false" \ | |||||||
|     CLUSTER_DELAYED_TIMEOUT="1m" \ |     CLUSTER_DELAYED_TIMEOUT="1m" \ | ||||||
|     CLUSTER_INITIAL_MASTER_NODES="wazuh-elasticsearch" |     CLUSTER_INITIAL_MASTER_NODES="wazuh-elasticsearch" | ||||||
|  |  | ||||||
| COPY config/entrypoint.sh /entrypoint.sh  | COPY config/entrypoint.sh /entrypoint.sh | ||||||
|  |  | ||||||
| RUN chmod 755 /entrypoint.sh | RUN chmod 755 /entrypoint.sh | ||||||
|  |  | ||||||
| @@ -41,7 +44,7 @@ COPY --chown=elasticsearch:elasticsearch ./config/load_settings.sh ./ | |||||||
|  |  | ||||||
| RUN chmod +x ./load_settings.sh | RUN chmod +x ./load_settings.sh | ||||||
|  |  | ||||||
| RUN ${bin/elasticsearch-plugin install --batch repository-s3} | RUN bin/elasticsearch-plugin install --batch $S3_PLUGIN_URL | ||||||
|  |  | ||||||
| COPY config/configure_s3.sh ./config/configure_s3.sh | COPY config/configure_s3.sh ./config/configure_s3.sh | ||||||
| RUN chmod 755 ./config/configure_s3.sh | RUN chmod 755 ./config/configure_s3.sh | ||||||
|   | |||||||
| @@ -1,11 +1,11 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| # Wazuh Docker Copyright (C) 2019 Wazuh Inc. (License GPLv2) | # Wazuh Docker Copyright (C) 2020 Wazuh Inc. (License GPLv2) | ||||||
|  |  | ||||||
| elastic_config_file="/usr/share/elasticsearch/config/elasticsearch.yml" | elastic_config_file="/usr/share/elasticsearch/config/elasticsearch.yml" | ||||||
|  |  | ||||||
| remove_single_node_conf(){ | remove_single_node_conf(){ | ||||||
|   if grep -Fq "discovery.type" $1; then |   if grep -Fq "discovery.type" $1; then | ||||||
|     sed -i '/discovery.type\: /d' $1  |     sed -i '/discovery.type\: /d' $1 | ||||||
|   fi |   fi | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -24,12 +24,12 @@ if [[ $CLUSTER_NODE_MASTER == "true" ]]; then | |||||||
| # cluster.initial_master_nodes for bootstrap the cluster | # cluster.initial_master_nodes for bootstrap the cluster | ||||||
| cat > $elastic_config_file << EOF | cat > $elastic_config_file << EOF | ||||||
| # cluster node | # cluster node | ||||||
| network.host: 0.0.0.0 | network.host: $CLUSTER_NETWORK_HOST | ||||||
| node.name: $CLUSTER_MASTER_NODE_NAME | node.name: $CLUSTER_MASTER_NODE_NAME | ||||||
| node.master: $CLUSTER_NODE_MASTER | node.master: $CLUSTER_NODE_MASTER | ||||||
| cluster.initial_master_nodes:  | cluster.initial_master_nodes: | ||||||
|   - $CLUSTER_MASTER_NODE_NAME |   - $CLUSTER_MASTER_NODE_NAME | ||||||
| # end cluster config"  | # end cluster config" | ||||||
| EOF | EOF | ||||||
|  |  | ||||||
| elif [[ $CLUSTER_NODE_NAME != "" ]];then | elif [[ $CLUSTER_NODE_NAME != "" ]];then | ||||||
| @@ -39,13 +39,13 @@ remove_cluster_config $elastic_config_file | |||||||
|  |  | ||||||
| cat > $elastic_config_file << EOF | cat > $elastic_config_file << EOF | ||||||
| # cluster node | # cluster node | ||||||
| network.host: 0.0.0.0 | network.host: $CLUSTER_NETWORK_HOST | ||||||
| node.name: $CLUSTER_NODE_NAME | node.name: $CLUSTER_NODE_NAME | ||||||
| node.master: false | node.master: false | ||||||
| discovery.seed_hosts:  | discovery.seed_hosts: | ||||||
|   - $CLUSTER_MASTER_NODE_NAME |   - $CLUSTER_MASTER_NODE_NAME | ||||||
|   - $CLUSTER_NODE_NAME |   - $CLUSTER_NODE_NAME | ||||||
| # end cluster config"  | # end cluster config" | ||||||
| EOF | EOF | ||||||
| fi | fi | ||||||
| # If the cluster is disabled, then set a single-node configuration | # If the cluster is disabled, then set a single-node configuration | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| # Wazuh Docker Copyright (C) 2019 Wazuh Inc. (License GPLv2) | # Wazuh Docker Copyright (C) 2020 Wazuh Inc. (License GPLv2) | ||||||
|  |  | ||||||
| set -e | set -e | ||||||
|  |  | ||||||
| @@ -10,7 +10,7 @@ function CheckArgs() | |||||||
| { | { | ||||||
|     if [ $1 != 4 ] && [ $1 != 5 ];then |     if [ $1 != 4 ] && [ $1 != 5 ];then | ||||||
|         echo "Use: configure_s3.sh <Elastic_Server_IP:Port> <Bucket> <Path> <RepositoryName> (By default <current_elasticsearch_major_version> is added to the path and the repository name)" |         echo "Use: configure_s3.sh <Elastic_Server_IP:Port> <Bucket> <Path> <RepositoryName> (By default <current_elasticsearch_major_version> is added to the path and the repository name)" | ||||||
|         echo "or use: configure_s3.sh <Elastic_Server_IP:Port> <Bucket> <Path> <RepositoryName> <Elasticsearch major version>"  |         echo "or use: configure_s3.sh <Elastic_Server_IP:Port> <Bucket> <Path> <RepositoryName> <Elasticsearch major version>" | ||||||
|         exit 1 |         exit 1 | ||||||
|  |  | ||||||
|     fi |     fi | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| # Wazuh Docker Copyright (C) 2019 Wazuh Inc. (License GPLv2) | # Wazuh Docker Copyright (C) 2020 Wazuh Inc. (License GPLv2) | ||||||
|  |  | ||||||
| # For more information https://github.com/elastic/elasticsearch-docker/blob/6.8.0/build/elasticsearch/bin/docker-entrypoint.sh | # For more information https://github.com/elastic/elasticsearch-docker/blob/6.8.0/build/elasticsearch/bin/docker-entrypoint.sh | ||||||
|  |  | ||||||
| @@ -24,7 +24,7 @@ run_as_other_user_if_needed() { | |||||||
|  |  | ||||||
| elasticsearch_config_file="/usr/share/elasticsearch/config/elasticsearch.yml" | elasticsearch_config_file="/usr/share/elasticsearch/config/elasticsearch.yml" | ||||||
| if grep -Fq  "#xpack features" "$elasticsearch_config_file"; | if grep -Fq  "#xpack features" "$elasticsearch_config_file"; | ||||||
| then  | then | ||||||
|   declare -A CONFIG_MAP=( |   declare -A CONFIG_MAP=( | ||||||
|   [xpack.ml.enabled]=$XPACK_ML |   [xpack.ml.enabled]=$XPACK_ML | ||||||
|   ) |   ) | ||||||
| @@ -49,4 +49,4 @@ fi | |||||||
|  |  | ||||||
| # Execute elasticsearch | # Execute elasticsearch | ||||||
|  |  | ||||||
| run_as_other_user_if_needed /usr/share/elasticsearch/bin/elasticsearch  | run_as_other_user_if_needed /usr/share/elasticsearch/bin/elasticsearch | ||||||
|   | |||||||
| @@ -1,15 +1,10 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| # Wazuh Docker Copyright (C) 2019 Wazuh Inc. (License GPLv2) | # Wazuh Docker Copyright (C) 2020 Wazuh Inc. (License GPLv2) | ||||||
|  |  | ||||||
| set -e | set -e | ||||||
|  |  | ||||||
| el_url=${ELASTICSEARCH_URL} | el_url=${ELASTICSEARCH_URL} | ||||||
|  |  | ||||||
| if [ "x${WAZUH_API_URL}" = "x" ]; then |  | ||||||
|   wazuh_url="https://wazuh" |  | ||||||
| else |  | ||||||
|   wazuh_url="${WAZUH_API_URL}" |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| if [[ ${ENABLED_XPACK} != "true" || "x${ELASTICSEARCH_USERNAME}" = "x" || "x${ELASTICSEARCH_PASSWORD}" = "x" ]]; then | if [[ ${ENABLED_XPACK} != "true" || "x${ELASTICSEARCH_USERNAME}" = "x" || "x${ELASTICSEARCH_PASSWORD}" = "x" ]]; then | ||||||
|   auth="" |   auth="" | ||||||
| @@ -29,13 +24,13 @@ if [ $ENABLE_CONFIGURE_S3 ]; then | |||||||
|   sleep 10 |   sleep 10 | ||||||
|   IP_PORT="${ELASTICSEARCH_IP}:${ELASTICSEARCH_PORT}" |   IP_PORT="${ELASTICSEARCH_IP}:${ELASTICSEARCH_PORT}" | ||||||
|  |  | ||||||
|   if [ "x$S3_PATH" != "x" ]; then  |   if [ "x$S3_PATH" != "x" ]; then | ||||||
|  |  | ||||||
|     if [ "x$S3_ELASTIC_MAJOR" != "x" ]; then  |     if [ "x$S3_ELASTIC_MAJOR" != "x" ]; then | ||||||
|       ./config/configure_s3.sh $IP_PORT $S3_BUCKET_NAME $S3_PATH $S3_REPOSITORY_NAME $S3_ELASTIC_MAJOR  |       ./config/configure_s3.sh $IP_PORT $S3_BUCKET_NAME $S3_PATH $S3_REPOSITORY_NAME $S3_ELASTIC_MAJOR | ||||||
|  |  | ||||||
|     else |     else | ||||||
|       ./config/configure_s3.sh $IP_PORT $S3_BUCKET_NAME $S3_PATH $S3_REPOSITORY_NAME  |       ./config/configure_s3.sh $IP_PORT $S3_BUCKET_NAME $S3_PATH $S3_REPOSITORY_NAME | ||||||
|  |  | ||||||
|     fi |     fi | ||||||
|  |  | ||||||
| @@ -43,45 +38,7 @@ if [ $ENABLE_CONFIGURE_S3 ]; then | |||||||
|  |  | ||||||
| fi | fi | ||||||
|  |  | ||||||
| #Insert default templates | if [ ${ENABLED_XPACK} = "true" ]; then | ||||||
|  |  | ||||||
| API_PASS_Q=`echo "$API_PASS" | tr -d '"'` |  | ||||||
| API_USER_Q=`echo "$API_USER" | tr -d '"'` |  | ||||||
| API_PASSWORD=`echo -n $API_PASS_Q | base64` |  | ||||||
|  |  | ||||||
| echo "Setting API credentials into Wazuh APP" |  | ||||||
| CONFIG_CODE=$(curl -s -o /dev/null -w "%{http_code}" -XGET $el_url/.wazuh/_doc/1513629884013 ${auth}) |  | ||||||
|  |  | ||||||
| if [ "x$CONFIG_CODE" != "x200" ]; then |  | ||||||
|   curl -s -XPOST $el_url/.wazuh/_doc/1513629884013 ${auth} -H 'Content-Type: application/json' -d' |  | ||||||
|   { |  | ||||||
|     "api_user": "'"$API_USER_Q"'", |  | ||||||
|     "api_password": "'"$API_PASSWORD"'", |  | ||||||
|     "url": "'"$wazuh_url"'", |  | ||||||
|     "api_port": "55000", |  | ||||||
|     "insecure": "true", |  | ||||||
|     "component": "API", |  | ||||||
|     "cluster_info": { |  | ||||||
|       "manager": "wazuh-manager", |  | ||||||
|       "cluster": "Disabled", |  | ||||||
|       "status": "disabled" |  | ||||||
|     }, |  | ||||||
|     "extensions": { |  | ||||||
|       "oscap": true, |  | ||||||
|       "audit": true, |  | ||||||
|       "pci": true, |  | ||||||
|       "aws": true, |  | ||||||
|       "virustotal": true, |  | ||||||
|       "gdpr": true, |  | ||||||
|       "ciscat": true |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|   ' > /dev/null |  | ||||||
| else |  | ||||||
|   echo "Wazuh APP already configured" |  | ||||||
| fi |  | ||||||
| sleep 5 |  | ||||||
|  |  | ||||||
| curl -XPUT "$el_url/_cluster/settings" ${auth} -H 'Content-Type: application/json' -d' | curl -XPUT "$el_url/_cluster/settings" ${auth} -H 'Content-Type: application/json' -d' | ||||||
| { | { | ||||||
|   "persistent": { |   "persistent": { | ||||||
| @@ -89,6 +46,7 @@ curl -XPUT "$el_url/_cluster/settings" ${auth} -H 'Content-Type: application/jso | |||||||
|   } |   } | ||||||
| } | } | ||||||
| ' | ' | ||||||
|  | fi | ||||||
|  |  | ||||||
| # Set cluster delayed timeout when node falls | # Set cluster delayed timeout when node falls | ||||||
| curl -X PUT "$el_url/_all/_settings" -H 'Content-Type: application/json' -d' | curl -X PUT "$el_url/_all/_settings" -H 'Content-Type: application/json' -d' | ||||||
|   | |||||||
| @@ -1,21 +1,18 @@ | |||||||
| # Wazuh Docker Copyright (C) 2019 Wazuh Inc. (License GPLv2) | # Wazuh Docker Copyright (C) 2020 Wazuh Inc. (License GPLv2) | ||||||
| FROM docker.elastic.co/kibana/kibana:7.3.0 | FROM docker.elastic.co/kibana/kibana:7.8.0 | ||||||
| ARG ELASTIC_VERSION=7.3.0 | USER kibana | ||||||
| ARG WAZUH_VERSION=3.9.5 | ARG ELASTIC_VERSION=7.8.0 | ||||||
|  | ARG WAZUH_VERSION=3.13.1 | ||||||
| ARG WAZUH_APP_VERSION="${WAZUH_VERSION}_${ELASTIC_VERSION}" | ARG WAZUH_APP_VERSION="${WAZUH_VERSION}_${ELASTIC_VERSION}" | ||||||
|  |  | ||||||
|  | WORKDIR /usr/share/kibana | ||||||
|  | RUN ./bin/kibana-plugin install https://packages.wazuh.com/wazuhapp/wazuhapp-${WAZUH_APP_VERSION}.zip | ||||||
|  |  | ||||||
|  | WORKDIR / | ||||||
| USER root | USER root | ||||||
|  |  | ||||||
| ADD  https://packages.wazuh.com/wazuhapp/wazuhapp-${WAZUH_APP_VERSION}.zip /tmp |  | ||||||
|  |  | ||||||
| RUN /usr/share/kibana/bin/kibana-plugin install --allow-root file:///tmp/wazuhapp-${WAZUH_APP_VERSION}.zip  |  | ||||||
| RUN rm -rf /tmp/wazuhapp-${WAZUH_APP_VERSION}.zip |  | ||||||
|  |  | ||||||
| COPY config/entrypoint.sh ./entrypoint.sh | COPY config/entrypoint.sh ./entrypoint.sh | ||||||
| RUN chmod 755 ./entrypoint.sh | RUN chmod 755 ./entrypoint.sh | ||||||
|  |  | ||||||
| USER kibana |  | ||||||
|  |  | ||||||
| ENV PATTERN="" \ | ENV PATTERN="" \ | ||||||
|     CHECKS_PATTERN="" \ |     CHECKS_PATTERN="" \ | ||||||
|     CHECKS_TEMPLATE="" \ |     CHECKS_TEMPLATE="" \ | ||||||
| @@ -72,7 +69,7 @@ COPY --chown=kibana:kibana ./config/welcome_wazuh.sh ./ | |||||||
| RUN chmod +x ./welcome_wazuh.sh | RUN chmod +x ./welcome_wazuh.sh | ||||||
|  |  | ||||||
| RUN ./welcome_wazuh.sh | RUN ./welcome_wazuh.sh | ||||||
|  | USER kibana | ||||||
| RUN /usr/local/bin/kibana-docker --optimize | RUN NODE_OPTIONS="--max-old-space-size=2048" /usr/local/bin/kibana-docker --optimize | ||||||
|  |  | ||||||
| ENTRYPOINT ./entrypoint.sh | ENTRYPOINT ./entrypoint.sh | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| # Wazuh Docker Copyright (C) 2019 Wazuh Inc. (License GPLv2) | # Wazuh Docker Copyright (C) 2020 Wazuh Inc. (License GPLv2) | ||||||
|  |  | ||||||
| set -e | set -e | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,12 +1,12 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| # Wazuh Docker Copyright (C) 2019 Wazuh Inc. (License GPLv2) | # Wazuh Docker Copyright (C) 2020 Wazuh Inc. (License GPLv2) | ||||||
|  |  | ||||||
| WAZUH_MAJOR=3 | WAZUH_MAJOR=3 | ||||||
|  |  | ||||||
| ############################################################################## | ############################################################################## | ||||||
| # Wait for the Kibana API to start. It is necessary to do it in this container | # Wait for the Kibana API to start. It is necessary to do it in this container | ||||||
| # because the others are running Elastic Stack and we can not interrupt them.  | # because the others are running Elastic Stack and we can not interrupt them. | ||||||
| #  | # | ||||||
| # The following actions are performed: | # The following actions are performed: | ||||||
| # | # | ||||||
| # Add the wazuh alerts index as default. | # Add the wazuh alerts index as default. | ||||||
| @@ -44,12 +44,17 @@ else | |||||||
|   kibana_ip="kibana" |   kibana_ip="kibana" | ||||||
| fi | fi | ||||||
|  |  | ||||||
| while [[ "$(curl -XGET -I  -s -o /dev/null -w ''%{http_code}'' $kibana_ip:5601/status)" != "200" ]]; do | # Add auth headers if required | ||||||
|  | if [ "$ELASTICSEARCH_USERNAME" != "" ] && [ "$ELASTICSEARCH_PASSWORD" != "" ]; then | ||||||
|  |     curl_auth="-u $ELASTICSEARCH_USERNAME:$ELASTICSEARCH_PASSWORD" | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | while [[ "$(curl $curl_auth -XGET -I  -s -o /dev/null -w ''%{http_code}'' $kibana_ip:5601/status)" != "200" ]]; do | ||||||
|   echo "Waiting for Kibana API. Sleeping 5 seconds" |   echo "Waiting for Kibana API. Sleeping 5 seconds" | ||||||
|   sleep 5 |   sleep 5 | ||||||
| done | done | ||||||
|  |  | ||||||
| # Prepare index selection.  | # Prepare index selection. | ||||||
| echo "Kibana API is running" | echo "Kibana API is running" | ||||||
|  |  | ||||||
| default_index="/tmp/default_index.json" | default_index="/tmp/default_index.json" | ||||||
|   | |||||||
| @@ -1,7 +1,14 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| # Wazuh Docker Copyright (C) 2019 Wazuh Inc. (License GPLv2) | # Wazuh Docker Copyright (C) 2020 Wazuh Inc. (License GPLv2) | ||||||
|  |  | ||||||
| kibana_config_file="/usr/share/kibana/plugins/wazuh/config.yml" | wazuh_url="${WAZUH_API_URL:-https://wazuh}" | ||||||
|  | wazuh_port="${API_PORT:-55000}" | ||||||
|  | api_user="${API_USER:-foo}" | ||||||
|  | api_password="${API_PASS:-bar}" | ||||||
|  |  | ||||||
|  | kibana_config_file="/usr/share/kibana/optimize/wazuh/config/wazuh.yml" | ||||||
|  | mkdir -p /usr/share/kibana/optimize/wazuh/config/ | ||||||
|  | touch $kibana_config_file | ||||||
|  |  | ||||||
| declare -A CONFIG_MAP=( | declare -A CONFIG_MAP=( | ||||||
|   [pattern]=$PATTERN |   [pattern]=$PATTERN | ||||||
| @@ -38,3 +45,24 @@ do | |||||||
|         sed -i 's/.*#'"$i"'.*/'"$i"': '"${CONFIG_MAP[$i]}"'/' $kibana_config_file |         sed -i 's/.*#'"$i"'.*/'"$i"': '"${CONFIG_MAP[$i]}"'/' $kibana_config_file | ||||||
|     fi |     fi | ||||||
| done | done | ||||||
|  |  | ||||||
|  | # remove default API entry (new in 3.11.0_7.5.1) | ||||||
|  | sed -ie '/- default:/,+4d' $kibana_config_file | ||||||
|  |  | ||||||
|  | CONFIG_CODE=$(curl -s -o /dev/null -w "%{http_code}" -XGET $el_url/.wazuh/_doc/1513629884013 ${auth}) | ||||||
|  |  | ||||||
|  | grep -q 1513629884013 $kibana_config_file | ||||||
|  | _config_exists=$? | ||||||
|  |  | ||||||
|  | if [[ "x$CONFIG_CODE" != "x200" && $_config_exists -ne 0 ]]; then | ||||||
|  | cat << EOF > $kibana_config_file | ||||||
|  | hosts: | ||||||
|  |   - 1513629884013: | ||||||
|  |       url: $wazuh_url | ||||||
|  |       port: $wazuh_port | ||||||
|  |       user: $api_user | ||||||
|  |       password: $api_password | ||||||
|  | EOF | ||||||
|  | else | ||||||
|  |   echo "Wazuh APP already configured" | ||||||
|  | fi | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| # Wazuh Docker Copyright (C) 2019 Wazuh Inc. (License GPLv2) | # Wazuh Docker Copyright (C) 2020 Wazuh Inc. (License GPLv2) | ||||||
|  |  | ||||||
| if [[ $CHANGE_WELCOME == "true" ]] | if [[ $CHANGE_WELCOME == "true" ]] | ||||||
| then | then | ||||||
| @@ -21,4 +21,3 @@ then | |||||||
|     sed -i 's#visible: true#visible: false#g' $kibana_path/node_modules/x-pack/plugins/rollup/public/crud_app/index.js |     sed -i 's#visible: true#visible: false#g' $kibana_path/node_modules/x-pack/plugins/rollup/public/crud_app/index.js | ||||||
|     sed -i 's#visible: true#visible: false#g' $kibana_path/node_modules/x-pack/plugins/license_management/public/management_section.js |     sed -i 's#visible: true#visible: false#g' $kibana_path/node_modules/x-pack/plugins/license_management/public/management_section.js | ||||||
| fi | fi | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,9 +1,9 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| # Wazuh Docker Copyright (C) 2019 Wazuh Inc. (License GPLv2) | # Wazuh Docker Copyright (C) 2020 Wazuh Inc. (License GPLv2) | ||||||
|  |  | ||||||
| kibana_config_file="/usr/share/kibana/config/kibana.yml" | kibana_config_file="/usr/share/kibana/config/kibana.yml" | ||||||
| if grep -Fq  "#xpack features" "$kibana_config_file"; | if grep -Fq  "#xpack features" "$kibana_config_file"; | ||||||
| then  | then | ||||||
|   declare -A CONFIG_MAP=( |   declare -A CONFIG_MAP=( | ||||||
|     [xpack.apm.ui.enabled]=$XPACK_APM |     [xpack.apm.ui.enabled]=$XPACK_APM | ||||||
|     [xpack.grokdebugger.enabled]=$XPACK_DEVTOOLS |     [xpack.grokdebugger.enabled]=$XPACK_DEVTOOLS | ||||||
| @@ -11,7 +11,7 @@ then | |||||||
|     [xpack.ml.enabled]=$XPACK_ML |     [xpack.ml.enabled]=$XPACK_ML | ||||||
|     [xpack.canvas.enabled]=$XPACK_CANVAS |     [xpack.canvas.enabled]=$XPACK_CANVAS | ||||||
|     [xpack.infra.enabled]=$XPACK_INFRA |     [xpack.infra.enabled]=$XPACK_INFRA | ||||||
|     [xpack.monitoring.enabled]=$XPACK_MONITORING |     [monitoring.enabled]=$XPACK_MONITORING | ||||||
|     [console.enabled]=$XPACK_DEVTOOLS |     [console.enabled]=$XPACK_DEVTOOLS | ||||||
|   ) |   ) | ||||||
|   for i in "${!CONFIG_MAP[@]}" |   for i in "${!CONFIG_MAP[@]}" | ||||||
| @@ -23,7 +23,7 @@ then | |||||||
| else | else | ||||||
|   echo " |   echo " | ||||||
| #xpack features | #xpack features | ||||||
| xpack.apm.ui.enabled: $XPACK_APM  | xpack.apm.ui.enabled: $XPACK_APM | ||||||
| xpack.grokdebugger.enabled: $XPACK_DEVTOOLS | xpack.grokdebugger.enabled: $XPACK_DEVTOOLS | ||||||
| xpack.searchprofiler.enabled: $XPACK_DEVTOOLS | xpack.searchprofiler.enabled: $XPACK_DEVTOOLS | ||||||
| xpack.ml.enabled: $XPACK_ML | xpack.ml.enabled: $XPACK_ML | ||||||
|   | |||||||
| @@ -1,138 +0,0 @@ | |||||||
| #!/bin/bash  |  | ||||||
| # Copyright (C) 2019, Wazuh Inc. |  | ||||||
|  |  | ||||||
| # Script to update old environments containing /var/ossec/data with symbolic links the new structure |  | ||||||
|  |  | ||||||
| wazuh_path=/var/ossec/ |  | ||||||
| data_path=/var/ossec/data/ |  | ||||||
| wazuh_dirs=(api/configuration etc logs queue var/multigroups active-response/bin integrations) |  | ||||||
| no_wazuh_dirs=(/etc/filebeat) |  | ||||||
|  |  | ||||||
| wazuh_preserve_links=(/var/ossec/api/configuration/auth/htpasswd /var/ossec/etc/ossec-init.conf) |  | ||||||
| wazuh_files=(/var/ossec/queue/agents-timestamp) |  | ||||||
| filebeat_files=(/var/lib/filebeat/registry /var/lib/filebeat/meta.json) |  | ||||||
| postfix_files=(/etc/postfix/dynamicmaps.cf /etc/postfix/main.cf /etc/postfix/main.cf.proto /etc/postfix/master.cf /etc/postfix/master.cf.proto /etc/postfix/postfix-files /etc/postfix/sasl /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db /etc/postfix/postfix-script /etc/postfix/post-install) |  | ||||||
|  |  | ||||||
| for dir in "${wazuh_dirs[@]}"; do |  | ||||||
|   if [ ! -e $data_path"wazuh"$wazuh_path$dir ] |  | ||||||
|   then |  | ||||||
|     mkdir -p $data_path"wazuh"$wazuh_path$dir |  | ||||||
|   fi |  | ||||||
|   echo "Copying $wazuh_path$dir to $data_path"wazuh"$wazuh_path$dir" |  | ||||||
|   cp -LR --preserve=all $wazuh_path$dir/* $data_path"wazuh"$wazuh_path$dir |  | ||||||
| done |  | ||||||
|  |  | ||||||
| for dir in "${no_wazuh_dirs[@]}"; do |  | ||||||
|   base=$(basename $dir) |  | ||||||
|   if [ ! -e $data_path$base$dir ] |  | ||||||
|   then |  | ||||||
|     mkdir -p $data_path$base$dir |  | ||||||
|   fi |  | ||||||
|   echo "Copying $dir to $data_path$base$dir" |  | ||||||
|   cp -a $dir/* $data_path$base$dir |  | ||||||
| done |  | ||||||
|  |  | ||||||
|  |  | ||||||
| for file in "${wazuh_files[@]}"; do |  | ||||||
|   echo "Copying $file to $data_path"wazuh"$file" |  | ||||||
|   cp -LR --preserve=all $file $data_path"wazuh"$file |  | ||||||
| done |  | ||||||
|  |  | ||||||
| echo ">> Checking filebeat files"  |  | ||||||
| mkdir -p $data_path"filebeat/var/lib/filebeat" |  | ||||||
|  |  | ||||||
| for file in "${filebeat_files[@]}"; do |  | ||||||
|   if [[ -e $file ]]; then |  | ||||||
|     if [[ -d $file ]]; then |  | ||||||
|         mkdir -p $data_path"filebeat"$file |  | ||||||
|         echo "Copying $file to $data_path"filebeat"$file" |  | ||||||
|         cp -a $file/* $data_path"filebeat"$file |  | ||||||
|     else |  | ||||||
|         echo "Copying $file to $data_path"filebeat"$file" |  | ||||||
|         cp -a $file $data_path"filebeat"$file |  | ||||||
|     fi |  | ||||||
|   fi |  | ||||||
| done |  | ||||||
|  |  | ||||||
| echo ">> Checking postfix files" |  | ||||||
| mkdir -p $data_path"postfix/etc/postfix" |  | ||||||
|  |  | ||||||
| for file in "${postfix_files[@]}"; do |  | ||||||
|   if [[ -e $file ]]; then |  | ||||||
|     if [[ -d $file ]]; then |  | ||||||
|         mkdir -p $data_path"postfix"$file |  | ||||||
|         echo "Copying $file to $data_path"postfix"$file" |  | ||||||
|         cp -a $file/* $data_path"postfix"$file |  | ||||||
|     else |  | ||||||
|         echo "Copying $file to $data_path"postfix"$file" |  | ||||||
|         cp -a $file $data_path"postfix"$file |  | ||||||
|     fi |  | ||||||
|   fi |  | ||||||
| done |  | ||||||
|  |  | ||||||
| echo ">> Preserving Wazuh symbolic links files" |  | ||||||
| for file in "${wazuh_preserve_links[@]}"; do |  | ||||||
|   rm  $wazuh_path"data/wazuh"$file |  | ||||||
|   cp -a $file $wazuh_path"data/wazuh"$file |  | ||||||
| done |  | ||||||
|  |  | ||||||
| # Grant proper permissions |  | ||||||
|  |  | ||||||
| chmod 750 /var/ossec/data/wazuh/var/ossec/api/configuration |  | ||||||
| chown root:ossec /var/ossec/data/wazuh/var/ossec/api/configuration |  | ||||||
| chmod 750 /var/ossec/data/wazuh/var/ossec/api/configuration/auth |  | ||||||
| chmod 740 /var/ossec/data/wazuh/var/ossec/api/configuration/config.js |  | ||||||
| chmod 750 /var/ossec/data/wazuh/var/ossec/api/configuration/preloaded_vars.conf |  | ||||||
| chmod 750 /var/ossec/data/wazuh/var/ossec/api/configuration/ssl |  | ||||||
| chmod 400 /var/ossec/data/wazuh/var/ossec/api/configuration/ssl/server.crt |  | ||||||
| chmod 400 /var/ossec/data/wazuh/var/ossec/api/configuration/ssl/server.key |  | ||||||
| chmod 770 /var/ossec/data/wazuh/var/ossec/etc |  | ||||||
| chown ossec:ossec /var/ossec/data/wazuh/var/ossec/etc |  | ||||||
| chmod 640 /var/ossec/data/wazuh/var/ossec/etc/client.keys |  | ||||||
| chmod 640 /var/ossec/data/wazuh/var/ossec/etc/decoders/local_decoder.xml |  | ||||||
| chown root:ossec /var/ossec/data/wazuh/var/ossec/etc/decoders/local_decoder.xml |  | ||||||
| chmod 660 /var/ossec/data/wazuh/var/ossec/etc/lists/amazon/aws-sources.cdb |  | ||||||
| chown ossec:ossec /var/ossec/data/wazuh/var/ossec/etc/lists/amazon/aws-sources.cdb |  | ||||||
| chmod 640 /var/ossec/data/wazuh/var/ossec/etc/lists/audit-keys |  | ||||||
| chmod 640 /var/ossec/data/wazuh/var/ossec/etc/lists/audit-keys.cdb |  | ||||||
| chmod 640 /var/ossec/data/wazuh/var/ossec/etc/lists/security-eventchannel |  | ||||||
| chmod 640 /var/ossec/data/wazuh//var/ossec/etc/lists/security-eventchannel.cdb |  | ||||||
| chmod 640 /var/ossec/data/wazuh/var/ossec/etc/local_internal_options.conf |  | ||||||
| chmod 640 /var/ossec/data/wazuh/var/ossec/etc/localtime |  | ||||||
| chmod 640 /var/ossec/data/wazuh/var/ossec/etc/ossec.conf |  | ||||||
| chmod 640 /var/ossec/data/wazuh/var/ossec/etc/rules/local_rules.xml |  | ||||||
| chown root:ossec /var/ossec/data/wazuh/var/ossec/etc/rules/local_rules.xml |  | ||||||
| chown root:ossec /var/ossec/data/wazuh/var/ossec/etc/shared/default/agent.conf |  | ||||||
| chmod 640 /var/ossec/data/wazuh/var/ossec/etc/sslmanager.cert |  | ||||||
| chmod 640 /var/ossec/data/wazuh/var/ossec/etc/sslmanager.key |  | ||||||
| chmod 770 /var/ossec/data/wazuh/var/ossec/logs |  | ||||||
| chown ossec:ossec /var/ossec/data/wazuh/var/ossec/logs |  | ||||||
| chmod 750 /var/ossec/data/wazuh/var/ossec/logs/alerts |  | ||||||
| chmod 750 /var/ossec/data/wazuh/var/ossec/logs/alerts/2019 |  | ||||||
| chmod 750 /var/ossec/data/wazuh/var/ossec/logs/alerts/2019/May |  | ||||||
| chmod 750 /var/ossec/data/wazuh/var/ossec/logs/api |  | ||||||
| chmod 750 /var/ossec/data/wazuh/var/ossec/logs/archives |  | ||||||
| chmod 750 /var/ossec/data/wazuh/var/ossec/logs/archives/2019 |  | ||||||
| chmod 750 /var/ossec/data/wazuh/var/ossec/logs/archives/2019/May |  | ||||||
| chmod 750 /var/ossec/data/wazuh/var/ossec/logs/cluster |  | ||||||
| chmod 750 /var/ossec/data/wazuh/var/ossec/logs/firewall |  | ||||||
| chmod 750 /var/ossec/data/wazuh/var/ossec/logs/firewall/2019 |  | ||||||
| chmod 750 /var/ossec/data/wazuh/var/ossec/logs/firewall/2019/May |  | ||||||
| chmod 640 /var/ossec/data/wazuh/var/ossec/logs/integrations.log |  | ||||||
| chmod 750 /var/ossec/data/wazuh/var/ossec/logs/ossec |  | ||||||
| chmod 750 /var/ossec/data/wazuh/var/ossec/queue |  | ||||||
| chown root:ossec /var/ossec/data/wazuh/var/ossec/queue |  | ||||||
| chmod 750 /var/ossec/data/wazuh/var/ossec/queue/agentless |  | ||||||
| chmod 600 /var/ossec/data/wazuh/var/ossec/queue/agents-timestamp |  | ||||||
| chmod 750 /var/ossec/data/wazuh/var/ossec/queue/db  |  | ||||||
| chmod 640 /var/ossec/data/wazuh/var/ossec/queue/db/000.db |  | ||||||
| chmod 640 /var/ossec/data/wazuh/var/ossec/queue/db/000.db-shm |  | ||||||
| chmod 640 /var/ossec/data/wazuh/var/ossec/queue/db/000.db-wal |  | ||||||
| chmod 750 /var/ossec/data/wazuh/var/ossec/queue/fts |  | ||||||
| chmod 640 /var/ossec/data/wazuh/var/ossec/queue/fts/fts-queue |  | ||||||
| chmod 640 /var/ossec/data/wazuh/var/ossec/queue/fts/hostinfo |  | ||||||
| chmod 640 /var/ossec/data/wazuh/var/ossec/queue/fts/ig-queue |  | ||||||
| chmod 644 /var/ossec/data/wazuh/var/ossec/queue/rids/sender_counter |  | ||||||
| chmod 750 /var/ossec/data/wazuh/var/ossec/queue/rootcheck |  | ||||||
| chmod 770 /var/ossec/data/wazuh/var/ossec/var/multigroups |  | ||||||
| chown root:ossec /var/ossec/data/wazuh/var/ossec/var/multigroups |  | ||||||
| @@ -1,4 +1,4 @@ | |||||||
| # Wazuh Docker Copyright (C) 2019 Wazuh Inc. (License GPLv2) | # Wazuh Docker Copyright (C) 2020 Wazuh Inc. (License GPLv2) | ||||||
| FROM nginx:latest | FROM nginx:latest | ||||||
|  |  | ||||||
| ENV DEBIAN_FRONTEND noninteractive | ENV DEBIAN_FRONTEND noninteractive | ||||||
| @@ -16,4 +16,4 @@ VOLUME ["/etc/nginx/conf.d"] | |||||||
| ENV NGINX_NAME="foo" \ | ENV NGINX_NAME="foo" \ | ||||||
|     NGINX_PWD="bar" |     NGINX_PWD="bar" | ||||||
|  |  | ||||||
| ENTRYPOINT /entrypoint.sh | ENTRYPOINT [ "/entrypoint.sh" ] | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| # Wazuh Docker Copyright (C) 2019 Wazuh Inc. (License GPLv2) | # Wazuh Docker Copyright (C) 2020 Wazuh Inc. (License GPLv2) | ||||||
|  |  | ||||||
| set -e | set -e | ||||||
|  |  | ||||||
| @@ -30,14 +30,14 @@ if [ ! -f /etc/nginx/conf.d/kibana.htpasswd ]; then | |||||||
|     do |     do | ||||||
|       IFS=':' read -r -a credentials <<< "${users[index]}" |       IFS=':' read -r -a credentials <<< "${users[index]}" | ||||||
|       if [ $index -eq 0 ]; then |       if [ $index -eq 0 ]; then | ||||||
|         echo ${credentials[1]}|htpasswd -i -c /etc/nginx/conf.d/kibana.htpasswd ${credentials[0]} >/dev/null |         htpasswd -b -c /etc/nginx/conf.d/kibana.htpasswd ${credentials[0]} ${credentials[1]} >/dev/null | ||||||
|       else |       else | ||||||
|         echo ${credentials[1]}|htpasswd -i /etc/nginx/conf.d/kibana.htpasswd  ${credentials[0]} >/dev/null |         htpasswd -b /etc/nginx/conf.d/kibana.htpasswd  ${credentials[0]} ${credentials[1]} >/dev/null | ||||||
|       fi |       fi | ||||||
|     done |     done | ||||||
|   else |   else | ||||||
|     # NGINX_PWD and NGINX_NAME are declared in nginx/Dockerfile  |     # NGINX_PWD and NGINX_NAME are declared in nginx/Dockerfile | ||||||
|     echo $NGINX_PWD|htpasswd -i -c /etc/nginx/conf.d/kibana.htpasswd $NGINX_NAME >/dev/null |     htpasswd -b -c /etc/nginx/conf.d/kibana.htpasswd $NGINX_NAME $NGINX_PWD >/dev/null | ||||||
|   fi |   fi | ||||||
| else | else | ||||||
|   echo "Kibana credentials already configured" |   echo "Kibana credentials already configured" | ||||||
| @@ -52,17 +52,19 @@ if [ "x${KIBANA_HOST}" = "x" ]; then | |||||||
| fi | fi | ||||||
|  |  | ||||||
| echo "Configuring NGINX" | echo "Configuring NGINX" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | if [ "${NGINX_PORT}" = "443" ]; then | ||||||
| cat > /etc/nginx/conf.d/default.conf <<EOF | cat > /etc/nginx/conf.d/default.conf <<EOF | ||||||
| server { | server { | ||||||
|     listen 80; |     listen 80; | ||||||
|     listen [::]:80; |     listen [::]:80; | ||||||
|     return 301 https://\$host:${NGINX_PORT}\$request_uri; |     return 301 https://\$host\$request_uri; | ||||||
| } | } | ||||||
|  |  | ||||||
| server { | server { | ||||||
|     listen ${NGINX_PORT} default_server; |     listen ${NGINX_PORT} default_server ssl http2; | ||||||
|     listen [::]:${NGINX_PORT}; |     listen [::]:${NGINX_PORT} ssl http2; | ||||||
|     ssl on; |  | ||||||
|     ssl_certificate /etc/nginx/conf.d/ssl/certs/kibana-access.pem; |     ssl_certificate /etc/nginx/conf.d/ssl/certs/kibana-access.pem; | ||||||
|     ssl_certificate_key /etc/nginx/conf.d/ssl/private/kibana-access.key; |     ssl_certificate_key /etc/nginx/conf.d/ssl/private/kibana-access.key; | ||||||
|     location / { |     location / { | ||||||
| @@ -75,5 +77,21 @@ server { | |||||||
|     } |     } | ||||||
| } | } | ||||||
| EOF | EOF | ||||||
|  | else | ||||||
|  | cat > /etc/nginx/conf.d/default.conf <<EOF | ||||||
|  | server { | ||||||
|  |     listen ${NGINX_PORT}; | ||||||
|  |     listen [::]:${NGINX_PORT}; | ||||||
|  |     location / { | ||||||
|  |         auth_basic "Restricted"; | ||||||
|  |         auth_basic_user_file /etc/nginx/conf.d/kibana.htpasswd; | ||||||
|  |         proxy_pass http://${KIBANA_HOST}/; | ||||||
|  |         proxy_buffer_size          128k; | ||||||
|  |         proxy_buffers              4 256k; | ||||||
|  |         proxy_busy_buffers_size    256k; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | EOF | ||||||
|  | fi | ||||||
|  |  | ||||||
| nginx -g 'daemon off;' | exec nginx -g 'daemon off;' | ||||||
|   | |||||||
							
								
								
									
										153
									
								
								wazuh/Dockerfile
									
									
									
									
									
								
							
							
						
						
									
										153
									
								
								wazuh/Dockerfile
									
									
									
									
									
								
							| @@ -1,52 +1,66 @@ | |||||||
| # Wazuh Docker Copyright (C) 2019 Wazuh Inc. (License GPLv2) | # Wazuh Docker Copyright (C) 2020 Wazuh Inc. (License GPLv2) | ||||||
| FROM phusion/baseimage:master | FROM phusion/baseimage:0.10.2 | ||||||
|  |  | ||||||
| # Arguments | ARG FILEBEAT_VERSION=7.8.0 | ||||||
| ARG FILEBEAT_VERSION=7.3.0 |  | ||||||
| ARG WAZUH_VERSION=3.9.5-1 | ARG WAZUH_VERSION=3.13.1-1 | ||||||
|  |  | ||||||
| # Environment variables |  | ||||||
| ENV API_USER="foo" \ | ENV API_USER="foo" \ | ||||||
|     API_PASS="bar" |    API_PASS="bar" | ||||||
|  |  | ||||||
| # Install packages | ARG TEMPLATE_VERSION="v3.13.1" | ||||||
| RUN set -x && \  |  | ||||||
|     echo "deb https://packages.wazuh.com/3.x/apt/ stable main" | tee /etc/apt/sources.list.d/wazuh.list && \ |  | ||||||
|     curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | apt-key add - && \ |  | ||||||
|     curl --silent --location https://deb.nodesource.com/setup_8.x | bash - && \ |  | ||||||
|     echo "postfix postfix/mailname string wazuh-manager" | debconf-set-selections && \ |  | ||||||
|     echo "postfix postfix/main_mailer_type string 'Internet Site'" | debconf-set-selections && \ |  | ||||||
|     groupadd -g 1000 ossec && \ |  | ||||||
|     useradd -u 1000 -g 1000 -d /var/ossec ossec && \ |  | ||||||
|     add-apt-repository universe && \ |  | ||||||
|     apt-get update && \ |  | ||||||
|     apt-get upgrade -y -o Dpkg::Options::="--force-confold" && \ |  | ||||||
|     apt-get --no-install-recommends --no-install-suggests -y install openssl apt-transport-https vim expect python-boto python-pip python-cryptography && \ |  | ||||||
|     apt-get --no-install-recommends --no-install-suggests -y install postfix bsd-mailx mailutils libsasl2-2 ca-certificates libsasl2-modules && \ |  | ||||||
|     apt-get --no-install-recommends --no-install-suggests -y install wazuh-manager=${WAZUH_VERSION} && \ |  | ||||||
|     apt-get --no-install-recommends --no-install-suggests -y install nodejs wazuh-api=${WAZUH_VERSION} && \ |  | ||||||
|     apt-get clean && \ |  | ||||||
|     rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \ |  | ||||||
|     rm -f /var/ossec/logs/alerts/*/*/* && \ |  | ||||||
|     rm -f /var/ossec/logs/archives/*/*/* && \ |  | ||||||
|     rm -f /var/ossec/logs/firewall/*/*/* && \  |  | ||||||
|     rm -f /var/ossec/logs/api/*/*/* && \ |  | ||||||
|     rm -f /var/ossec/logs/cluster/*/*/* && \ |  | ||||||
|     rm -f /var/ossec/logs/ossec/*/*/* && \ |  | ||||||
|     rm /var/ossec/var/run/* && \ |  | ||||||
|     curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-${FILEBEAT_VERSION}-amd64.deb && \ |  | ||||||
|     dpkg -i filebeat-${FILEBEAT_VERSION}-amd64.deb && rm -f filebeat-${FILEBEAT_VERSION}-amd64.deb && \ |  | ||||||
|     curl -so /etc/filebeat/wazuh-template.json https://raw.githubusercontent.com/wazuh/wazuh/v3.9.5/extensions/elasticsearch/7.x/wazuh-template.json && \ |  | ||||||
|     chmod go+r /etc/filebeat/wazuh-template.json && \ |  | ||||||
|     curl -s https://packages.wazuh.com/3.x/filebeat/wazuh-filebeat-0.1.tar.gz | tar -xvz -C /usr/share/filebeat/module && \ |  | ||||||
|     mkdir -p /usr/share/filebeat/module/wazuh && \ |  | ||||||
|     chmod 755 -R /usr/share/filebeat/module/wazuh |  | ||||||
|  |  | ||||||
| # Services | # Set repositories. | ||||||
|  | RUN set -x && echo "deb https://packages.wazuh.com/3.x/apt/ stable main" | tee /etc/apt/sources.list.d/wazuh.list && \ | ||||||
|  |    curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | apt-key add - && \ | ||||||
|  |    curl --silent --location https://deb.nodesource.com/setup_10.x | bash - && \ | ||||||
|  |    echo "postfix postfix/mailname string wazuh-manager" | debconf-set-selections && \ | ||||||
|  |    echo "postfix postfix/main_mailer_type string 'Internet Site'" | debconf-set-selections && \ | ||||||
|  |    groupadd -g 1000 ossec && useradd -u 1000 -g 1000 -d /var/ossec ossec | ||||||
|  |  | ||||||
|  | RUN add-apt-repository universe && apt-get update && apt-get upgrade -y -o Dpkg::Options::="--force-confold" && \ | ||||||
|  |    apt-get --no-install-recommends --no-install-suggests -y install openssl postfix bsd-mailx python-boto python-pip  \ | ||||||
|  |    apt-transport-https vim expect nodejs python-cryptography mailutils libsasl2-modules wazuh-manager=${WAZUH_VERSION} \ | ||||||
|  |    wazuh-api=${WAZUH_VERSION} && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && rm -f \ | ||||||
|  |    /var/ossec/logs/alerts/*/*/*.log && rm -f /var/ossec/logs/alerts/*/*/*.json && rm -f \ | ||||||
|  |    /var/ossec/logs/archives/*/*/*.log && rm -f /var/ossec/logs/archives/*/*/*.json && rm -f \ | ||||||
|  |    /var/ossec/logs/firewall/*/*/*.log && rm -f /var/ossec/logs/firewall/*/*/*.json | ||||||
|  |  | ||||||
|  | # Adding first run script and entrypoint | ||||||
|  | COPY config/data_dirs.env /data_dirs.env | ||||||
|  | COPY config/init.bash /init.bash | ||||||
|  | RUN mkdir /entrypoint-scripts | ||||||
|  | COPY config/entrypoint.sh /entrypoint.sh | ||||||
|  | COPY config/00-wazuh.sh /entrypoint-scripts/00-wazuh.sh | ||||||
|  | COPY config/01-config_filebeat.sh /entrypoint-scripts/01-config_filebeat.sh | ||||||
|  |  | ||||||
|  | # Sync calls are due to https://github.com/docker/docker/issues/9547 | ||||||
|  | RUN chmod 755 /init.bash && \ | ||||||
|  |    sync && /init.bash && \ | ||||||
|  |    sync && rm /init.bash && \ | ||||||
|  |    curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-${FILEBEAT_VERSION}-amd64.deb &&\ | ||||||
|  |    dpkg -i filebeat-${FILEBEAT_VERSION}-amd64.deb && rm -f filebeat-${FILEBEAT_VERSION}-amd64.deb && \ | ||||||
|  |    chmod 755 /entrypoint.sh && \ | ||||||
|  |    chmod 755 /entrypoint-scripts/00-wazuh.sh && \ | ||||||
|  |    chmod 755 /entrypoint-scripts/01-config_filebeat.sh | ||||||
|  |  | ||||||
|  | COPY config/filebeat.yml /etc/filebeat/ | ||||||
|  | RUN chmod go-w /etc/filebeat/filebeat.yml | ||||||
|  |  | ||||||
|  | # Setting volumes | ||||||
|  | VOLUME ["/var/ossec/data"] | ||||||
|  | VOLUME ["/etc/filebeat"] | ||||||
|  | VOLUME ["/etc/postfix"] | ||||||
|  | VOLUME ["/var/lib/filebeat"] | ||||||
|  |  | ||||||
|  | # Services ports | ||||||
|  | EXPOSE 55000/tcp 1514/udp 1515/tcp 514/udp 1516/tcp | ||||||
|  |  | ||||||
|  | # Adding services | ||||||
| RUN mkdir /etc/service/wazuh && \ | RUN mkdir /etc/service/wazuh && \ | ||||||
|     mkdir /etc/service/wazuh-api && \ |    mkdir /etc/service/wazuh-api && \ | ||||||
|     mkdir /etc/service/postfix && \ |    mkdir /etc/service/postfix && \ | ||||||
|     mkdir /etc/service/filebeat |    mkdir /etc/service/filebeat | ||||||
|  |  | ||||||
| COPY config/wazuh.runit.service /etc/service/wazuh/run | COPY config/wazuh.runit.service /etc/service/wazuh/run | ||||||
| COPY config/wazuh-api.runit.service /etc/service/wazuh-api/run | COPY config/wazuh-api.runit.service /etc/service/wazuh-api/run | ||||||
| @@ -54,55 +68,16 @@ COPY config/postfix.runit.service /etc/service/postfix/run | |||||||
| COPY config/filebeat.runit.service /etc/service/filebeat/run | COPY config/filebeat.runit.service /etc/service/filebeat/run | ||||||
|  |  | ||||||
| RUN chmod +x /etc/service/wazuh-api/run && \ | RUN chmod +x /etc/service/wazuh-api/run && \ | ||||||
|     chmod +x /etc/service/wazuh/run && \ |    chmod +x /etc/service/wazuh/run && \ | ||||||
|     chmod +x /etc/service/postfix/run && \ |    chmod +x /etc/service/postfix/run && \ | ||||||
|     chmod +x /etc/service/filebeat/run  |    chmod +x /etc/service/filebeat/run | ||||||
|  |  | ||||||
| # Copy configuration files from repository |  | ||||||
| COPY config/filebeat.yml /etc/filebeat/ |  | ||||||
| RUN chmod go-w /etc/filebeat/filebeat.yml  |  | ||||||
|  |  | ||||||
| # Prepare permanent data | ADD https://raw.githubusercontent.com/wazuh/wazuh/$TEMPLATE_VERSION/extensions/elasticsearch/7.x/wazuh-template.json /etc/filebeat | ||||||
| # Sync calls are due to https://github.com/docker/docker/issues/9547 | RUN chmod go-w /etc/filebeat/wazuh-template.json | ||||||
| COPY config/permanent_data.env /permanent_data.env |  | ||||||
| COPY config/permanent_data.sh /permanent_data.sh |  | ||||||
| RUN chmod 755 /permanent_data.sh && \ |  | ||||||
|     sync && \ |  | ||||||
|     /permanent_data.sh && \ |  | ||||||
|     sync && \ |  | ||||||
|     rm /permanent_data.sh |  | ||||||
|  |  | ||||||
| # Expose ports | ARG WAZUH_FILEBEAT_MODULE="wazuh-filebeat-0.1.tar.gz" | ||||||
| EXPOSE 55000/tcp 1514/udp 1515/tcp 514/udp 1516/tcp | RUN curl -s https://packages.wazuh.com/3.x/filebeat/${WAZUH_FILEBEAT_MODULE} | tar -xvz -C /usr/share/filebeat/module | ||||||
|  |  | ||||||
| # Setting volumes |  | ||||||
| # Once we declared a volume in the Dockerfile, changes made to that path will have no effect. In other words, any changes made |  | ||||||
| # to the these paths from here to the end of the Dockerfile will not be taken into account when mounting the volume. |  | ||||||
| VOLUME ["/var/ossec/api/configuration"] |  | ||||||
| VOLUME ["/var/ossec/etc"] |  | ||||||
| VOLUME ["/var/ossec/logs"] |  | ||||||
| VOLUME ["/var/ossec/queue"] |  | ||||||
| VOLUME ["/var/ossec/var/multigroups"] |  | ||||||
| VOLUME ["/var/ossec/integrations"] |  | ||||||
| VOLUME ["/var/ossec/active-response/bin"] |  | ||||||
| VOLUME ["/etc/filebeat"] |  | ||||||
| VOLUME ["/etc/postfix"] |  | ||||||
| VOLUME ["/var/lib/filebeat"] |  | ||||||
|  |  | ||||||
| # Prepare entrypoint scripts |  | ||||||
| # Entrypoint scripts must be added to the entrypoint-scripts directory |  | ||||||
| RUN mkdir /entrypoint-scripts |  | ||||||
|  |  | ||||||
| COPY config/entrypoint.sh /entrypoint.sh |  | ||||||
| COPY config/01-wazuh.sh /entrypoint-scripts/01-wazuh.sh |  | ||||||
|  |  | ||||||
| # Migration scripts |  | ||||||
| COPY migration/data_dirs.env /data_dirs.env |  | ||||||
| COPY migration/02-volume_loader.sh /entrypoint-scripts/02-volume_loader.sh |  | ||||||
|  |  | ||||||
| RUN chmod 755 /entrypoint.sh && \ |  | ||||||
|     chmod 755 /entrypoint-scripts/01-wazuh.sh && \ |  | ||||||
|     chmod 755 /entrypoint-scripts/02-volume_loader.sh |  | ||||||
|  |  | ||||||
| # Run all services | # Run all services | ||||||
| ENTRYPOINT ["/entrypoint.sh"] | ENTRYPOINT ["/entrypoint.sh"] | ||||||
|   | |||||||
							
								
								
									
										155
									
								
								wazuh/config/00-wazuh.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										155
									
								
								wazuh/config/00-wazuh.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,155 @@ | |||||||
|  | #!/bin/bash | ||||||
|  | # Wazuh Docker Copyright (C) 2020 Wazuh Inc. (License GPLv2) | ||||||
|  |  | ||||||
|  | # Wazuh container bootstrap. See the README for information of the environment | ||||||
|  | # variables expected by this script. | ||||||
|  |  | ||||||
|  | # Startup the services | ||||||
|  | source /data_dirs.env | ||||||
|  |  | ||||||
|  | FIRST_TIME_INSTALLATION=false | ||||||
|  |  | ||||||
|  | WAZUH_INSTALL_PATH=/var/ossec | ||||||
|  | DATA_PATH=${WAZUH_INSTALL_PATH}/data | ||||||
|  |  | ||||||
|  | WAZUH_CONFIG_MOUNT=/wazuh-config-mount | ||||||
|  |  | ||||||
|  | print() { | ||||||
|  |     echo -e $1 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | error_and_exit() { | ||||||
|  |     echo "Error executing command: '$1'." | ||||||
|  |     echo 'Exiting.' | ||||||
|  |     exit 1 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | exec_cmd() { | ||||||
|  |     eval $1 > /dev/null 2>&1 || error_and_exit "$1" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | exec_cmd_stdout() { | ||||||
|  |     eval $1 2>&1 || error_and_exit "$1" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | edit_configuration() { # $1 -> setting,  $2 -> value | ||||||
|  |     sed -i "s/^config.$1\s=.*/config.$1 = \"$2\";/g" "${DATA_PATH}/api/configuration/config.js" || error_and_exit "sed (editing configuration)" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | for ossecdir in "${DATA_DIRS[@]}"; do | ||||||
|  |   if [ ! -e "${DATA_PATH}/${ossecdir}" ] | ||||||
|  |   then | ||||||
|  |     print "Installing ${ossecdir}" | ||||||
|  |     exec_cmd "mkdir -p $(dirname ${DATA_PATH}/${ossecdir})" | ||||||
|  |     exec_cmd "cp -pr /var/ossec/${ossecdir}-template ${DATA_PATH}/${ossecdir}" | ||||||
|  |     FIRST_TIME_INSTALLATION=true | ||||||
|  |   fi | ||||||
|  | done | ||||||
|  |  | ||||||
|  | if [  -e ${WAZUH_INSTALL_PATH}/etc-template  ] | ||||||
|  | then | ||||||
|  |     cp -p /var/ossec/etc-template/internal_options.conf /var/ossec/etc/internal_options.conf | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | # copy missing files from queue-template (in case this is an upgrade from previous versions) | ||||||
|  | for filename in /var/ossec/queue-template/*; do | ||||||
|  |   fname=$(basename $filename) | ||||||
|  |   echo $fname | ||||||
|  |   if test ! -e "/var/ossec/data/queue/$fname"; then | ||||||
|  |     cp -rp "/var/ossec/queue-template/$fname" /var/ossec/data/queue/ | ||||||
|  |   fi | ||||||
|  | done | ||||||
|  |  | ||||||
|  | touch ${DATA_PATH}/process_list | ||||||
|  | chgrp ossec ${DATA_PATH}/process_list | ||||||
|  | chmod g+rw ${DATA_PATH}/process_list | ||||||
|  |  | ||||||
|  | AUTO_ENROLLMENT_ENABLED=${AUTO_ENROLLMENT_ENABLED:-true} | ||||||
|  | API_GENERATE_CERTS=${API_GENERATE_CERTS:-true} | ||||||
|  |  | ||||||
|  | if [ $FIRST_TIME_INSTALLATION == true ] | ||||||
|  | then | ||||||
|  |   if [ $AUTO_ENROLLMENT_ENABLED == true ] | ||||||
|  |   then | ||||||
|  |     if [ ! -e ${DATA_PATH}/etc/sslmanager.key ] | ||||||
|  |     then | ||||||
|  |       print "Creating ossec-authd key and cert" | ||||||
|  |       exec_cmd "openssl genrsa -out ${DATA_PATH}/etc/sslmanager.key 4096" | ||||||
|  |       exec_cmd "openssl req -new -x509 -key ${DATA_PATH}/etc/sslmanager.key -out ${DATA_PATH}/etc/sslmanager.cert -days 3650 -subj /CN=${HOSTNAME}/" | ||||||
|  |     fi | ||||||
|  |   fi | ||||||
|  |   if [ $API_GENERATE_CERTS == true ] | ||||||
|  |   then | ||||||
|  |     if [ ! -e ${DATA_PATH}/api/configuration/ssl/server.crt ] | ||||||
|  |     then | ||||||
|  |       print "Enabling Wazuh API HTTPS" | ||||||
|  |       edit_configuration "https" "yes" | ||||||
|  |       print "Create Wazuh API key and cert" | ||||||
|  |       exec_cmd "openssl genrsa -out ${DATA_PATH}/api/configuration/ssl/server.key 4096" | ||||||
|  |       exec_cmd "openssl req -new -x509 -key ${DATA_PATH}/api/configuration/ssl/server.key -out ${DATA_PATH}/api/configuration/ssl/server.crt -days 3650 -subj /CN=${HOSTNAME}/" | ||||||
|  |     fi | ||||||
|  |   fi | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | ############################################################################## | ||||||
|  | # Copy all files from $WAZUH_CONFIG_MOUNT to $DATA_PATH and respect | ||||||
|  | # destination files permissions | ||||||
|  | # | ||||||
|  | # For example, to mount the file /var/ossec/data/etc/ossec.conf, mount it at | ||||||
|  | # $WAZUH_CONFIG_MOUNT/etc/ossec.conf in your container and this code will | ||||||
|  | # replace the ossec.conf file in /var/ossec/data/etc with yours. | ||||||
|  | ############################################################################## | ||||||
|  | if [ -e "$WAZUH_CONFIG_MOUNT" ] | ||||||
|  | then | ||||||
|  |   print "Identified Wazuh configuration files to mount..." | ||||||
|  |  | ||||||
|  |   exec_cmd_stdout "cp --verbose -r $WAZUH_CONFIG_MOUNT/* $DATA_PATH" | ||||||
|  | else | ||||||
|  |   print "No Wazuh configuration files to mount..." | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | function ossec_shutdown(){ | ||||||
|  |   ${WAZUH_INSTALL_PATH}/bin/ossec-control stop; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | ############################################################################## | ||||||
|  | # Allow users to set the container hostname as <node_name> dynamically on | ||||||
|  | # container start. | ||||||
|  | # | ||||||
|  | # To use this: | ||||||
|  | # 1. Create your own ossec.conf file | ||||||
|  | # 2. In your ossec.conf file, set to_be_replaced_by_hostname as your node_name | ||||||
|  | # 3. Mount your custom ossec.conf file at $WAZUH_CONFIG_MOUNT/etc/ossec.conf | ||||||
|  | ############################################################################## | ||||||
|  | sed -i 's/<node_name>to_be_replaced_by_hostname<\/node_name>/<node_name>'"${HOSTNAME}"'<\/node_name>/g' ${WAZUH_INSTALL_PATH}/etc/ossec.conf | ||||||
|  |  | ||||||
|  | # Trap exit signals and do a proper shutdown | ||||||
|  | trap "ossec_shutdown; exit" SIGINT SIGTERM | ||||||
|  |  | ||||||
|  | chmod -R g+rw ${DATA_PATH} | ||||||
|  | chmod 750 /var/ossec/agentless/* | ||||||
|  |  | ||||||
|  | ############################################################################## | ||||||
|  | # Interpret any passed arguments (via docker command to this entrypoint) as | ||||||
|  | # paths or commands, and execute them. | ||||||
|  | # | ||||||
|  | # This can be useful for actions that need to be run before the services are | ||||||
|  | # started, such as "/var/ossec/bin/ossec-control enable agentless". | ||||||
|  | ############################################################################## | ||||||
|  | for CUSTOM_COMMAND in "$@" | ||||||
|  | do | ||||||
|  |   echo "Executing command \`${CUSTOM_COMMAND}\`" | ||||||
|  |   exec_cmd_stdout "${CUSTOM_COMMAND}" | ||||||
|  | done | ||||||
|  |  | ||||||
|  | ############################################################################## | ||||||
|  | # Change Wazuh API user credentials. | ||||||
|  | ############################################################################## | ||||||
|  |  | ||||||
|  | pushd /var/ossec/api/configuration/auth/ | ||||||
|  |  | ||||||
|  | echo "Change Wazuh API user credentials" | ||||||
|  | change_user="node htpasswd -b -c user $API_USER $API_PASS" | ||||||
|  | eval $change_user | ||||||
|  |  | ||||||
|  | popd | ||||||
							
								
								
									
										10
									
								
								wazuh/config/01-config_filebeat.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								wazuh/config/01-config_filebeat.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | |||||||
|  | #!/bin/bash | ||||||
|  | # Wazuh App Copyright (C) 2020 Wazuh Inc. (License GPLv2) | ||||||
|  |  | ||||||
|  | set -e | ||||||
|  |  | ||||||
|  | # Modify the output to Elasticsearch if th ELASTICSEARCH_URL is set | ||||||
|  | if [ "$ELASTICSEARCH_URL" != "" ]; then | ||||||
|  |   >&2 echo "Customize Elasticsearch ouput IP." | ||||||
|  |   sed -i 's|http://elasticsearch:9200|'$ELASTICSEARCH_URL'|g' /etc/filebeat/filebeat.yml | ||||||
|  | fi | ||||||
| @@ -1,264 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
| # Wazuh Docker Copyright (C) 2019 Wazuh Inc. (License GPLv2) |  | ||||||
|  |  | ||||||
| # Variables |  | ||||||
| source /permanent_data.env |  | ||||||
|  |  | ||||||
| WAZUH_INSTALL_PATH=/var/ossec |  | ||||||
| WAZUH_CONFIG_MOUNT=/wazuh-config-mount |  | ||||||
| AUTO_ENROLLMENT_ENABLED=${AUTO_ENROLLMENT_ENABLED:-true} |  | ||||||
| API_GENERATE_CERTS=${API_GENERATE_CERTS:-true} |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ############################################################################## |  | ||||||
| # Aux functions |  | ||||||
| ############################################################################## |  | ||||||
| print() { |  | ||||||
|   echo -e $1 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| error_and_exit() { |  | ||||||
|   echo "Error executing command: '$1'." |  | ||||||
|   echo 'Exiting.' |  | ||||||
|   exit 1 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| exec_cmd() { |  | ||||||
|   eval $1 > /dev/null 2>&1 || error_and_exit "$1" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| exec_cmd_stdout() { |  | ||||||
|   eval $1 2>&1 || error_and_exit "$1" |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ############################################################################## |  | ||||||
| # Edit configuration |  | ||||||
| ############################################################################## |  | ||||||
|  |  | ||||||
| edit_configuration() { # $1 -> setting,  $2 -> value |  | ||||||
|   sed -i "s/^config.$1\s=.*/config.$1 = \"$2\";/g" "${WAZUH_INSTALL_PATH}/api/configuration/config.js" || error_and_exit "sed (editing configuration)" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| ############################################################################## |  | ||||||
| # This function will attempt to mount every directory in PERMANENT_DATA  |  | ||||||
| # into the respective path.  |  | ||||||
| # If the path is empty means permanent data volume is also empty, so a backup   |  | ||||||
| # will be copied into it. Otherwise it will not be copied because there is   |  | ||||||
| # already data inside the volume for the specified path. |  | ||||||
| ############################################################################## |  | ||||||
|  |  | ||||||
| mount_permanent_data() { |  | ||||||
|   for permanent_dir in "${PERMANENT_DATA[@]}"; do |  | ||||||
|     # Check if the path is not empty |  | ||||||
|     if find ${permanent_dir} -mindepth 1 | read; then |  | ||||||
|       print "The path ${permanent_dir} is already mounted" |  | ||||||
|     else |  | ||||||
|       print "Installing ${permanent_dir}" |  | ||||||
|       exec_cmd "cp -a ${WAZUH_INSTALL_PATH}/data_tmp/permanent${permanent_dir}/. ${permanent_dir}" |  | ||||||
|     fi |  | ||||||
|   done |  | ||||||
| } |  | ||||||
|  |  | ||||||
| ############################################################################## |  | ||||||
| # This function will replace from the permanent data volume every file  |  | ||||||
| # contained in PERMANENT_DATA_EXCP |  | ||||||
| # Some files as 'internal_options.conf' are saved as permanent data, but  |  | ||||||
| # they must be updated to work properly if wazuh version is changed. |  | ||||||
| ############################################################################## |  | ||||||
|  |  | ||||||
| apply_exclusion_data() { |  | ||||||
|   for exclusion_file in "${PERMANENT_DATA_EXCP[@]}"; do |  | ||||||
|     if [  -e ${WAZUH_INSTALL_PATH}/data_tmp/exclusion/${exclusion_file}  ] |  | ||||||
|     then |  | ||||||
|       print "Updating ${exclusion_file}" |  | ||||||
|       exec_cmd "cp -p ${WAZUH_INSTALL_PATH}/data_tmp/exclusion/${exclusion_file} ${exclusion_file}" |  | ||||||
|     fi |  | ||||||
|   done |  | ||||||
| } |  | ||||||
|  |  | ||||||
| ############################################################################## |  | ||||||
| # This function will delete from the permanent data volume every file  |  | ||||||
| # contained in PERMANENT_DATA_DEL |  | ||||||
| ############################################################################## |  | ||||||
|  |  | ||||||
| remove_data_files() { |  | ||||||
|   for del_file in "${PERMANENT_DATA_DEL[@]}"; do |  | ||||||
|     if [ -e ${del_file} ] |  | ||||||
|     then  |  | ||||||
|       print "Removing ${del_file}" |  | ||||||
|       exec_cmd "rm ${del_file}" |  | ||||||
|     fi |  | ||||||
|   done |  | ||||||
| } |  | ||||||
|  |  | ||||||
| ############################################################################## |  | ||||||
| # Create certificates: Manager |  | ||||||
| ############################################################################## |  | ||||||
|  |  | ||||||
| create_ossec_key_cert() { |  | ||||||
|   print "Creating ossec-authd key and cert" |  | ||||||
|   exec_cmd "openssl genrsa -out ${WAZUH_INSTALL_PATH}/etc/sslmanager.key 4096" |  | ||||||
|   exec_cmd "openssl req -new -x509 -key ${WAZUH_INSTALL_PATH}/etc/sslmanager.key -out ${WAZUH_INSTALL_PATH}/etc/sslmanager.cert -days 3650 -subj /CN=${HOSTNAME}/" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| ############################################################################## |  | ||||||
| # Create certificates: API |  | ||||||
| ############################################################################## |  | ||||||
|  |  | ||||||
| create_api_key_cert() { |  | ||||||
|   print "Enabling Wazuh API HTTPS" |  | ||||||
|   edit_configuration "https" "yes" |  | ||||||
|   print "Create Wazuh API key and cert" |  | ||||||
|   exec_cmd "openssl genrsa -out ${WAZUH_INSTALL_PATH}/api/configuration/ssl/server.key 4096" |  | ||||||
|   exec_cmd "openssl req -new -x509 -key ${WAZUH_INSTALL_PATH}/api/configuration/ssl/server.key -out ${WAZUH_INSTALL_PATH}/api/configuration/ssl/server.crt -days 3650 -subj /CN=${HOSTNAME}/" |  | ||||||
|  |  | ||||||
|   # Granting proper permissions  |  | ||||||
|   chmod 400 ${WAZUH_INSTALL_PATH}/api/configuration/ssl/server.key |  | ||||||
|   chmod 400 ${WAZUH_INSTALL_PATH}/api/configuration/ssl/server.crt |  | ||||||
| } |  | ||||||
|  |  | ||||||
| ############################################################################## |  | ||||||
| # Copy all files from $WAZUH_CONFIG_MOUNT to $WAZUH_INSTALL_PATH and respect |  | ||||||
| # destination files permissions |  | ||||||
| # |  | ||||||
| # For example, to mount the file /var/ossec/data/etc/ossec.conf, mount it at |  | ||||||
| # $WAZUH_CONFIG_MOUNT/etc/ossec.conf in your container and this code will |  | ||||||
| # replace the ossec.conf file in /var/ossec/data/etc with yours. |  | ||||||
| ############################################################################## |  | ||||||
|  |  | ||||||
| mount_files() { |  | ||||||
|   if [ -e "$WAZUH_CONFIG_MOUNT" ] |  | ||||||
|   then |  | ||||||
|     print "Identified Wazuh configuration files to mount..." |  | ||||||
|     exec_cmd_stdout "cp --verbose -r $WAZUH_CONFIG_MOUNT/* $WAZUH_INSTALL_PATH" |  | ||||||
|   else |  | ||||||
|     print "No Wazuh configuration files to mount..." |  | ||||||
|   fi |  | ||||||
| } |  | ||||||
|  |  | ||||||
| ############################################################################## |  | ||||||
| # Stop OSSEC |  | ||||||
| ############################################################################## |  | ||||||
|  |  | ||||||
| function ossec_shutdown(){ |  | ||||||
|   ${WAZUH_INSTALL_PATH}/bin/ossec-control stop; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| ############################################################################## |  | ||||||
| # Interpret any passed arguments (via docker command to this entrypoint) as |  | ||||||
| # paths or commands, and execute them.  |  | ||||||
| # |  | ||||||
| # This can be useful for actions that need to be run before the services are |  | ||||||
| # started, such as "/var/ossec/bin/ossec-control enable agentless". |  | ||||||
| ############################################################################## |  | ||||||
|  |  | ||||||
| docker_custom_args() { |  | ||||||
|   for CUSTOM_COMMAND in "$@" |  | ||||||
|   do |  | ||||||
|     echo "Executing command \`${CUSTOM_COMMAND}\`" |  | ||||||
|     exec_cmd_stdout "${CUSTOM_COMMAND}" |  | ||||||
|   done |  | ||||||
| } |  | ||||||
|  |  | ||||||
| ############################################################################## |  | ||||||
| # Change Wazuh API user credentials. |  | ||||||
| ############################################################################## |  | ||||||
|  |  | ||||||
| change_api_user_credentials() { |  | ||||||
|   pushd /var/ossec/api/configuration/auth/ |  | ||||||
|   if [[ "x${SECURITY_CREDENTIALS_FILE}" == "x" ]]; then |  | ||||||
|     WAZUH_API_USER=${API_USER} |  | ||||||
|     WAZUH_API_PASS=${API_PASS} |  | ||||||
|   else |  | ||||||
|     input=${SECURITY_CREDENTIALS_FILE} |  | ||||||
|     while IFS= read -r line |  | ||||||
|     do |  | ||||||
|       if [[ $line == *"WAZUH_API_USER"* ]]; then |  | ||||||
|         arrIN=(${line//:/ }) |  | ||||||
|         WAZUH_API_USER=${arrIN[1]} |  | ||||||
|       elif [[ $line == *"WAZUH_API_PASS"* ]]; then |  | ||||||
|         arrIN=(${line//:/ }) |  | ||||||
|         WAZUH_API_PASS=${arrIN[1]} |  | ||||||
|       fi |  | ||||||
|     done < "$input" |  | ||||||
|   fi |  | ||||||
|  |  | ||||||
|   echo "Change Wazuh API user credentials" |  | ||||||
|   change_user="node htpasswd -b -c user $WAZUH_API_USER $WAZUH_API_PASS" |  | ||||||
|   eval $change_user |  | ||||||
|   popd |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ############################################################################## |  | ||||||
| # Customize filebeat output ip |  | ||||||
| ############################################################################## |  | ||||||
|  |  | ||||||
|  |  | ||||||
| custom_filebeat_output_ip() { |  | ||||||
|   if [ "$FILEBEAT_OUTPUT" != "" ]; then |  | ||||||
|     sed 's|http://elasticsearch:9200|$FILEBEAT_OUTPUT|g' filebeat.yml |  | ||||||
|   fi |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ############################################################################## |  | ||||||
| # Main function |  | ||||||
| ############################################################################## |  | ||||||
|  |  | ||||||
| main() { |  | ||||||
|   # Mount permanent data  (i.e. ossec.conf) |  | ||||||
|   mount_permanent_data |  | ||||||
|  |  | ||||||
|   # Restore files stored in permanent data that are not permanent  (i.e. internal_options.conf) |  | ||||||
|   apply_exclusion_data |  | ||||||
|  |  | ||||||
|   # Remove some files in permanent_data (i.e. .template.db) |  | ||||||
|   remove_data_files |  | ||||||
|  |  | ||||||
|   # Generate ossec-authd certs if AUTO_ENROLLMENT_ENABLED is true and does not exist |  | ||||||
|   if [ $AUTO_ENROLLMENT_ENABLED == true ] |  | ||||||
|   then |  | ||||||
|     if [ ! -e ${WAZUH_INSTALL_PATH}/etc/sslmanager.key ] |  | ||||||
|     then |  | ||||||
|       create_ossec_key_cert |  | ||||||
|     fi |  | ||||||
|   fi |  | ||||||
|  |  | ||||||
|   # Generate API certs if API_GENERATE_CERTS is true and does not exist |  | ||||||
|   if [ $API_GENERATE_CERTS == true ] |  | ||||||
|   then |  | ||||||
|     if [ ! -e ${WAZUH_INSTALL_PATH}/api/configuration/ssl/server.crt ] |  | ||||||
|     then |  | ||||||
|       create_api_key_cert |  | ||||||
|     fi |  | ||||||
|   fi |  | ||||||
|  |  | ||||||
|   # Mount selected files (WAZUH_CONFIG_MOUNT) to container |  | ||||||
|   mount_files |  | ||||||
|  |  | ||||||
|   # Trap exit signals and do a proper shutdown |  | ||||||
|   trap "ossec_shutdown; exit" SIGINT SIGTERM |  | ||||||
|  |  | ||||||
|   # Execute custom args |  | ||||||
|   docker_custom_args |  | ||||||
|  |  | ||||||
|   # Change API user credentials |  | ||||||
|   change_api_user_credentials |  | ||||||
|  |  | ||||||
|   # Update filebeat configuration |  | ||||||
|   custom_filebeat_output_ip |  | ||||||
|  |  | ||||||
|   # Delete temporary data folder |  | ||||||
|   rm -rf ${WAZUH_INSTALL_PATH}/data_tmp |  | ||||||
|  |  | ||||||
|   # Grant proper permissions |  | ||||||
|   # When modifiying some files using the Wazuh API (i.e. /var/ossec/etc/ossec.conf), group rw permissions are needed for changes to take place.   |  | ||||||
|   # https://github.com/wazuh/wazuh/issues/3647 |  | ||||||
|   chmod -R g+rw ${WAZUH_INSTALL_PATH} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| main |  | ||||||
							
								
								
									
										8
									
								
								wazuh/config/data_dirs.env
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								wazuh/config/data_dirs.env
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | |||||||
|  | i=0 | ||||||
|  | DATA_DIRS[((i++))]="api/configuration" | ||||||
|  | DATA_DIRS[((i++))]="etc" | ||||||
|  | DATA_DIRS[((i++))]="logs" | ||||||
|  | DATA_DIRS[((i++))]="queue" | ||||||
|  | DATA_DIRS[((i++))]="agentless" | ||||||
|  | DATA_DIRS[((i++))]="var/multigroups" | ||||||
|  | export DATA_DIRS | ||||||
| @@ -1,13 +1,14 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| # Wazuh Docker Copyright (C) 2019 Wazuh Inc. (License GPLv2) | # Wazuh Docker Copyright (C) 2020 Wazuh Inc. (License GPLv2) | ||||||
|  |  | ||||||
| # It will run every .sh script located in entrypoint-scripts folder in lexicographical order | # It will run every .sh script located in entrypoint-scripts folder in lexicographical order | ||||||
| for script in `ls /entrypoint-scripts/*.sh | sort -n`; do | for script in `ls /entrypoint-scripts/*.sh | sort -n`; do | ||||||
|   bash "$script" |   bash "$script" | ||||||
|  |  | ||||||
| done | done | ||||||
|  |  | ||||||
| ############################################################################## | ############################################################################## | ||||||
| # Start Wazuh Server. | # Start Wazuh Server. | ||||||
| ############################################################################## | ############################################################################## | ||||||
|  |  | ||||||
| /sbin/my_init  | /sbin/my_init | ||||||
|   | |||||||
| @@ -1,3 +1,4 @@ | |||||||
| #!/bin/sh | #!/bin/sh | ||||||
|  | # Wazuh Docker Copyright (C) 2020 Wazuh Inc. (License GPLv2) | ||||||
| service filebeat start | service filebeat start | ||||||
| tail -f /var/log/filebeat/filebeat | tail -f /var/log/filebeat/filebeat | ||||||
|   | |||||||
| @@ -1,53 +1,15 @@ | |||||||
| # Wazuh Docker Copyright (C) 2019 Wazuh Inc. (License GPLv2) | # Wazuh - Filebeat configuration file | ||||||
| filebeat.inputs: | filebeat.modules: | ||||||
|   - type: log |   - module: wazuh | ||||||
|     paths: |     alerts: | ||||||
|       - '/var/ossec/logs/alerts/alerts.json' |       enabled: true | ||||||
|  |     archives: | ||||||
|  |       enabled: false | ||||||
|  |  | ||||||
| setup.template.json.enabled: true | setup.template.json.enabled: true | ||||||
| setup.template.json.path: "/etc/filebeat/wazuh-template.json" | setup.template.json.path: '/etc/filebeat/wazuh-template.json' | ||||||
| setup.template.json.name: "wazuh" | setup.template.json.name: 'wazuh' | ||||||
| setup.template.overwrite: true | setup.template.overwrite: true | ||||||
|  | setup.ilm.enabled: false | ||||||
|  |  | ||||||
| processors: | output.elasticsearch.hosts: ['http://elasticsearch:9200'] | ||||||
|   - decode_json_fields: |  | ||||||
|       fields: ['message'] |  | ||||||
|       process_array: true |  | ||||||
|       max_depth: 200 |  | ||||||
|       target: '' |  | ||||||
|       overwrite_keys: true |  | ||||||
|   - drop_fields: |  | ||||||
|       fields: ['message', 'ecs', 'beat', 'input_type', 'tags', 'count', '@version', 'log', 'offset', 'type', 'host'] |  | ||||||
|   - rename: |  | ||||||
|       fields: |  | ||||||
|         - from: "data.aws.sourceIPAddress" |  | ||||||
|           to: "@src_ip" |  | ||||||
|       ignore_missing: true |  | ||||||
|       fail_on_error: false |  | ||||||
|       when: |  | ||||||
|         regexp: |  | ||||||
|           data.aws.sourceIPAddress: \b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b |  | ||||||
|   - rename: |  | ||||||
|       fields: |  | ||||||
|         - from: "data.srcip" |  | ||||||
|           to: "@src_ip" |  | ||||||
|       ignore_missing: true |  | ||||||
|       fail_on_error: false |  | ||||||
|       when: |  | ||||||
|         regexp: |  | ||||||
|           data.srcip: \b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b |  | ||||||
|   - rename: |  | ||||||
|       fields: |  | ||||||
|         - from: "data.win.eventdata.ipAddress" |  | ||||||
|           to: "@src_ip" |  | ||||||
|       ignore_missing: true |  | ||||||
|       fail_on_error: false |  | ||||||
|       when: |  | ||||||
|         regexp: |  | ||||||
|           data.win.eventdata.ipAddress: \b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b |  | ||||||
|  |  | ||||||
| output.elasticsearch: |  | ||||||
|   hosts: ['http://elasticsearch:9200'] |  | ||||||
|   #pipeline: geoip |  | ||||||
|   indices: |  | ||||||
|     - index: 'wazuh-alerts-3.x-%{+yyyy.MM.dd}' |  | ||||||
							
								
								
									
										11
									
								
								wazuh/config/init.bash
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								wazuh/config/init.bash
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | #!/bin/bash | ||||||
|  | # Wazuh Docker Copyright (C) 2020 Wazuh Inc. (License GPLv2) | ||||||
|  |  | ||||||
|  | # Initialize the custom data directory layout | ||||||
|  | source /data_dirs.env | ||||||
|  |  | ||||||
|  | cd /var/ossec | ||||||
|  | for ossecdir in "${DATA_DIRS[@]}"; do | ||||||
|  |   mv ${ossecdir} ${ossecdir}-template | ||||||
|  |   ln -s $(realpath --relative-to=$(dirname ${ossecdir}) data)/${ossecdir} ${ossecdir} | ||||||
|  | done | ||||||
| @@ -1,44 +0,0 @@ | |||||||
| # Permanent data mounted in volumes |  | ||||||
| i=0 |  | ||||||
| PERMANENT_DATA[((i++))]="/var/ossec/api/configuration" |  | ||||||
| PERMANENT_DATA[((i++))]="/var/ossec/etc" |  | ||||||
| PERMANENT_DATA[((i++))]="/var/ossec/logs" |  | ||||||
| PERMANENT_DATA[((i++))]="/var/ossec/queue" |  | ||||||
| PERMANENT_DATA[((i++))]="/var/ossec/var/multigroups" |  | ||||||
| PERMANENT_DATA[((i++))]="/var/ossec/integrations" |  | ||||||
| PERMANENT_DATA[((i++))]="/var/ossec/active-response/bin" |  | ||||||
| PERMANENT_DATA[((i++))]="/etc/filebeat" |  | ||||||
| PERMANENT_DATA[((i++))]="/etc/postfix" |  | ||||||
| export PERMANENT_DATA |  | ||||||
|  |  | ||||||
| # Files mounted in a volume that should not be permanent |  | ||||||
| i=0 |  | ||||||
| PERMANENT_DATA_EXCP[((i++))]="/var/ossec/etc/internal_options.conf" |  | ||||||
| PERMANENT_DATA_EXCP[((i++))]="/var/ossec/integrations/pagerduty" |  | ||||||
| PERMANENT_DATA_EXCP[((i++))]="/var/ossec/integrations/slack" |  | ||||||
| PERMANENT_DATA_EXCP[((i++))]="/var/ossec/integrations/slack.py" |  | ||||||
| PERMANENT_DATA_EXCP[((i++))]="/var/ossec/integrations/virustotal" |  | ||||||
| PERMANENT_DATA_EXCP[((i++))]="/var/ossec/integrations/virustotal.py" |  | ||||||
| PERMANENT_DATA_EXCP[((i++))]="/var/ossec/active-response/bin/default-firewall-drop.sh" |  | ||||||
| PERMANENT_DATA_EXCP[((i++))]="/var/ossec/active-response/bin/disable-account.sh" |  | ||||||
| PERMANENT_DATA_EXCP[((i++))]="/var/ossec/active-response/bin/firewalld-drop.sh" |  | ||||||
| PERMANENT_DATA_EXCP[((i++))]="/var/ossec/active-response/bin/firewall-drop.sh" |  | ||||||
| PERMANENT_DATA_EXCP[((i++))]="/var/ossec/active-response/bin/host-deny.sh" |  | ||||||
| PERMANENT_DATA_EXCP[((i++))]="/var/ossec/active-response/bin/ip-customblock.sh" |  | ||||||
| PERMANENT_DATA_EXCP[((i++))]="/var/ossec/active-response/bin/ipfw_mac.sh" |  | ||||||
| PERMANENT_DATA_EXCP[((i++))]="/var/ossec/active-response/bin/ipfw.sh" |  | ||||||
| PERMANENT_DATA_EXCP[((i++))]="/var/ossec/active-response/bin/kaspersky.py" |  | ||||||
| PERMANENT_DATA_EXCP[((i++))]="/var/ossec/active-response/bin/kaspersky.sh" |  | ||||||
| PERMANENT_DATA_EXCP[((i++))]="/var/ossec/active-response/bin/npf.sh" |  | ||||||
| PERMANENT_DATA_EXCP[((i++))]="/var/ossec/active-response/bin/ossec-slack.sh" |  | ||||||
| PERMANENT_DATA_EXCP[((i++))]="/var/ossec/active-response/bin/ossec-tweeter.sh" |  | ||||||
| PERMANENT_DATA_EXCP[((i++))]="/var/ossec/active-response/bin/pf.sh" |  | ||||||
| PERMANENT_DATA_EXCP[((i++))]="/var/ossec/active-response/bin/restart-ossec.sh" |  | ||||||
| PERMANENT_DATA_EXCP[((i++))]="/var/ossec/active-response/bin/restart.sh" |  | ||||||
| PERMANENT_DATA_EXCP[((i++))]="/var/ossec/active-response/bin/route-null.sh" |  | ||||||
| export PERMANENT_DATA_EXCP |  | ||||||
|  |  | ||||||
| # Files mounted in a volume that should be deleted  |  | ||||||
| i=0 |  | ||||||
| PERMANENT_DATA_DEL[((i++))]="/var/ossec/queue/db/.template.db" |  | ||||||
| export PERMANENT_DATA_DEL |  | ||||||
| @@ -1,40 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
| # Wazuh Docker Copyright (C) 2019 Wazuh Inc. (License GPLv2) |  | ||||||
|  |  | ||||||
| # Variables |  | ||||||
| source /permanent_data.env |  | ||||||
|  |  | ||||||
| WAZUH_INSTALL_PATH=/var/ossec |  | ||||||
| DATA_TMP_PATH=${WAZUH_INSTALL_PATH}/data_tmp |  | ||||||
| mkdir ${DATA_TMP_PATH} |  | ||||||
|  |  | ||||||
| # Move exclusion files to EXCLUSION_PATH |  | ||||||
| EXCLUSION_PATH=${DATA_TMP_PATH}/exclusion |  | ||||||
| mkdir ${EXCLUSION_PATH} |  | ||||||
|  |  | ||||||
| for exclusion_file in "${PERMANENT_DATA_EXCP[@]}"; do |  | ||||||
|   # Create the directory for the exclusion file if it does not exist |  | ||||||
|   DIR=$(dirname "${exclusion_file}") |  | ||||||
|   if [ ! -e ${EXCLUSION_PATH}/${DIR}  ] |  | ||||||
|   then |  | ||||||
|     mkdir -p ${EXCLUSION_PATH}/${DIR} |  | ||||||
|   fi |  | ||||||
|  |  | ||||||
|   mv ${exclusion_file} ${EXCLUSION_PATH}/${exclusion_file} |  | ||||||
| done |  | ||||||
|  |  | ||||||
| # Move permanent files to PERMANENT_PATH |  | ||||||
| PERMANENT_PATH=${DATA_TMP_PATH}/permanent |  | ||||||
| mkdir ${PERMANENT_PATH} |  | ||||||
|  |  | ||||||
| for permanent_dir in "${PERMANENT_DATA[@]}"; do |  | ||||||
|   # Create the directory for the permanent file if it does not exist |  | ||||||
|   DIR=$(dirname "${permanent_dir}") |  | ||||||
|   if [ ! -e ${PERMANENT_PATH}${DIR}  ] |  | ||||||
|   then |  | ||||||
|     mkdir -p ${PERMANENT_PATH}${DIR} |  | ||||||
|   fi |  | ||||||
|    |  | ||||||
|   mv ${permanent_dir} ${PERMANENT_PATH}${permanent_dir} |  | ||||||
|  |  | ||||||
| done |  | ||||||
| @@ -1,3 +1,4 @@ | |||||||
| #!/bin/sh | #!/bin/sh | ||||||
|  | # Wazuh Docker Copyright (C) 2020 Wazuh Inc. (License GPLv2) | ||||||
| service postfix start | service postfix start | ||||||
| tail -f /var/log/mail.log | tail -f /var/log/mail.log | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| #!/bin/sh | #!/bin/sh | ||||||
|  | # Wazuh Docker Copyright (C) 2020 Wazuh Inc. (License GPLv2) | ||||||
| service wazuh-api start | service wazuh-api start | ||||||
| tail -f /var/ossec/logs/api.log | tail -f /var/ossec/data/logs/api.log | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| #!/bin/sh | #!/bin/sh | ||||||
|  | # Wazuh Docker Copyright (C) 2020 Wazuh Inc. (License GPLv2) | ||||||
| service wazuh-manager start | service wazuh-manager start | ||||||
| tail -f /var/ossec/logs/ossec.log | tail -f /var/ossec/data/logs/ossec.log | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,70 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
|  |  | ||||||
| source /data_dirs.env |  | ||||||
|  |  | ||||||
| ############################################################################## |  | ||||||
| # Copy will be executed from the custom mounting path (key)  |  | ||||||
| # to destination path (value) when iterating through the array   |  | ||||||
| # For example in the first custom path: |  | ||||||
| #    cp -pr "/migration/ossec_backup/ /var/ossec/" will be executed |  | ||||||
| # Please ensure the key path is correctly mounted in the container |  | ||||||
| # For more information please check: |  | ||||||
| ############################################################################## |  | ||||||
|  |  | ||||||
| declare -A custom_paths |  | ||||||
|  |  | ||||||
| custom_paths+=( ["/migration/ossec_backup/"]=/var/ossec/ ) |  | ||||||
| custom_paths+=( ["/migration/filebeat_backup/"]=/etc/filebeat/ ) |  | ||||||
| custom_paths+=( ["/migration/filebeat-lib_backup/"]=/var/lib/filebeat/ ) |  | ||||||
| custom_paths+=( ["/migration/postfix_backup/"]=/etc/postfix/ ) |  | ||||||
|  |  | ||||||
| ### Auxiliar methods |  | ||||||
|  |  | ||||||
| print() { |  | ||||||
|     echo -e "$1" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| error_and_exit() { |  | ||||||
|     echo "Error executing command: '$1'." |  | ||||||
|     echo 'Exiting.' |  | ||||||
|     exit 1 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| exec_cmd() { |  | ||||||
|     eval "$1" > /dev/null 2>&1 || error_and_exit "$1" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| exec_cmd_stdout() { |  | ||||||
|     eval "$1" 2>&1 || error_and_exit "$1" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| ### Restoring directories  |  | ||||||
|  |  | ||||||
| declare -A custom_paths |  | ||||||
|  |  | ||||||
| custom_paths+=( ["/migration/ossec_backup/"]=/var/ossec/ ) |  | ||||||
| custom_paths+=( ["/migration/filebeat_backup/"]=/etc/filebeat/ ) |  | ||||||
| custom_paths+=( ["/migration/filebeat-lib_backup/"]=/var/lib/filebeat/ ) |  | ||||||
| custom_paths+=( ["/migration/postfix_backup/"]=/etc/postfix/ ) |  | ||||||
|  |  | ||||||
| for sourcedir in "${!custom_paths[@]}"; do |  | ||||||
|     if [[ ! -e "${custom_paths[${sourcedir}]}" ]] |  | ||||||
|     then |  | ||||||
|         print "BACKUP: The folder ${custom_paths[${sourcedir}]} doesn't exists in the container. Creating it..." |  | ||||||
|         exec_cmd "mkdir -p ${custom_paths[${sourcedir}]}" |  | ||||||
|     fi |  | ||||||
|  |  | ||||||
|     if [[ -e "${sourcedir}" ]] |  | ||||||
|     then |  | ||||||
|         if [[ -d "${sourcedir}" ]]; then |  | ||||||
|             print "BACKUP: Copying data from folder ${sourcedir} in 3.9 volume to ${custom_paths[${sourcedir}]}" |  | ||||||
|             exec_cmd "cp -pr ${sourcedir}* ${custom_paths[${sourcedir}]}" |  | ||||||
|         elif [[ -f "${sourcedir}" ]]; then |  | ||||||
|             print "BACKUP: Copying file ${sourcedir} in 3.9 volume to ${custom_paths[${sourcedir}]}" |  | ||||||
|             exec_cmd "cp -pr ${sourcedir} ${custom_paths[${sourcedir}]}" |  | ||||||
|         fi |  | ||||||
|     else |  | ||||||
|         print "The folder ${sourcedir} doesn't exists in the volume. Ignoring it..." |  | ||||||
|     fi |  | ||||||
|  |  | ||||||
| done |  | ||||||
		Reference in New Issue
	
	Block a user