Skip to content

Commit

Permalink
3proxy updated up to 0.9.3 (#1)
Browse files Browse the repository at this point in the history
  • Loading branch information
tarampampam committed Jan 15, 2021
1 parent bad8266 commit 9d5cead
Show file tree
Hide file tree
Showing 11 changed files with 207 additions and 78 deletions.
8 changes: 8 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
.editorconfig
.git
.github
.idea
.vscode
temp
tmp
LICENSE
3 changes: 3 additions & 0 deletions .github/CODEOWNERS
Validating CODEOWNERS rules …
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# @link <https://help.github.com/en/articles/about-code-owners>

* @tarampampam
21 changes: 21 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Docs: <https://docs.github.com/en/free-pro-team@latest/github/administering-a-repository/customizing-dependency-updates>

version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
reviewers:
- "tarampampam"
assignees:
- "tarampampam"

- package-ecosystem: "docker"
directory: "/"
schedule:
interval: "weekly"
reviewers:
- "tarampampam"
assignees:
- "tarampampam"
21 changes: 21 additions & 0 deletions .github/labeler.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
docs:
- '**/*.md'
- '**/*.MD'

.github:
- '.github/**/*'

CI:
- '.github/workflows/**/*'
- '.github/actions/**/*'

docker:
- 'Dockerfile'
- 'docker/**/*'
- '.dockerignore'
- 'docker-entrypoint.sh'
- '3proxy.cfg'

dev:
- '.gitignore'
- '.editorconfig'
12 changes: 12 additions & 0 deletions .github/workflows/labeler.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
name: labeler

on: [pull_request_target]

jobs:
triage:
runs-on: ubuntu-20.04
steps:
- uses: actions/labeler@v3 # Action page: <https://github.com/actions/labeler>
with:
repo-token: "${{ secrets.GITHUB_TOKEN }}"
sync-labels: true
31 changes: 18 additions & 13 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,22 +12,27 @@ jobs:
- name: Check out code
uses: actions/checkout@v2

- name: Generate image tag value
run: echo "::set-env name=IMAGE_TAG::${GITHUB_REF##*/[vV]}" # `/refs/tags/v1.2.3` -> `1.2.3`
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1 # Action page: <https://github.com/docker/setup-buildx-action>
id: buildx

- name: Make docker login
- name: Docker login in default registry
run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_LOGIN }}" --password-stdin &> /dev/null

- name: Docker login in ghcr.io # Auth docs: <https://git.io/JLDaw>
run: echo "${{ secrets.GHCR_PASSWORD }}" | docker login ghcr.io -u tarampampam --password-stdin

- name: Generate image tag value
id: tag
run: echo "::set-output name=value::`echo ${GITHUB_REF##*/} | sed -e 's/^[vV ]*//'`" # `/refs/tags/v1.2.3` -> `1.2.3`

- name: Build image
run: |
docker build \
--build-arg "BUILD_DATE=`date -u +'%Y-%m-%dT%H:%M:%SZ'`" \
--tag "tarampampam/3proxy:${IMAGE_TAG}" \
docker buildx build \
--platform ${{ steps.buildx.outputs.platforms }} \
--tag "tarampampam/3proxy:${{ steps.tag.outputs.value }} \
--tag "tarampampam/3proxy:latest" \
-f ./Dockerfile .
- name: Push version image
run: docker push "tarampampam/3proxy:${IMAGE_TAG}"

- name: Push latest image
run: docker push "tarampampam/3proxy:latest"
--tag "ghcr.io/tarampampam/3proxy:${{ steps.tag.outputs.value }}" \
--tag "ghcr.io/tarampampam/3proxy:latest" \
--push \
.
83 changes: 54 additions & 29 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,27 +11,64 @@ on:
- cron: '0 0 * * 0' # once in a week, docs: <https://git.io/JvxXE#onschedule>

jobs: # Docs: <https://git.io/JvxXE>
docker-image:
name: Build and use docker image
runs-on: ubuntu-latest
build-image:
name: Build docker image
runs-on: ubuntu-20.04
steps:
- name: Check out code
uses: actions/checkout@v2

- name: Build docker image
run: docker build -f ./Dockerfile --tag image:local .
run: docker build -f ./Dockerfile --tag 3proxy:local .

- name: Run docker image with default settings
run: |
docker run --rm -d \
-p "3128:3128/tcp" \
-p "1080:1080/tcp" \
image:local
- name: Scan image
uses: anchore/scan-action@v2 # action page: <https://github.com/anchore/scan-action>
with:
image: 3proxy:local
fail-build: true
severity-cutoff: low # negligible, low, medium, high or critical

- name: Save docker image
run: docker save 3proxy:local > ./docker-image.tar

- name: Upload artifact
uses: actions/upload-artifact@v2
with:
name: docker-image
path: ./docker-image.tar

try-to-use:
name: Build and use docker image (auth ${{ matrix.auth }})
runs-on: ubuntu-20.04
strategy:
fail-fast: false
matrix:
auth: [yes, no]
needs: [build-image]
steps:
- name: Download builded docker image
uses: actions/download-artifact@v2
with:
name: docker-image
path: .artifact

- name: Prepare image to run
working-directory: .artifact
run: docker load < docker-image.tar

- name: Start server without auth setup
if: matrix.auth != 'yes'
run: docker run --rm -d -p "3128:3128/tcp" -p "1080:1080/tcp" 3proxy:local

- name: Start server with auth setup
if: matrix.auth == 'yes'
run: docker run --rm -d -p "3128:3128/tcp" -p "1080:1080/tcp" -e "PROXY_LOGIN=evil" -e "PROXY_PASSWORD=live" 3proxy:local

- name: Pause
run: sleep 2
run: sleep 3

- name: Try to use HTTP proxy
if: matrix.auth != 'yes'
run: |
curl -v --fail \
--proxy http://127.0.0.1:3128 \
Expand All @@ -40,29 +77,16 @@ jobs: # Docs: <https://git.io/JvxXE>
https://github.com/robots.txt
- name: Try to use SOCKS proxy
if: matrix.auth != 'yes'
run: |
curl -v --fail \
--proxy socks5://127.0.0.1:1080 \
--connect-timeout 3 \
--max-time 3 \
https://github.com/robots.txt
- name: Stop container
run: docker stop $(docker ps -a --filter ancestor=image:local -q)

- name: Run docker image with auth settings
run: |
docker run --rm -d \
-p "3128:3128/tcp" \
-p "1080:1080/tcp" \
-e "PROXY_LOGIN=evil" \
-e "PROXY_PASSWORD=live" \
image:local
- name: Pause
run: sleep 2

- name: Try to use HTTP proxy
- name: Try to use HTTP proxy (with auth)
if: matrix.auth == 'yes'
run: |
curl -v --fail \
--proxy http://127.0.0.1:3128 \
Expand All @@ -71,7 +95,8 @@ jobs: # Docs: <https://git.io/JvxXE>
--max-time 3 \
https://github.com/robots.txt
- name: Try to use SOCKS proxy
- name: Try to use SOCKS proxy (with auth)
if: matrix.auth == 'yes'
run: |
curl -v --fail \
--proxy socks5://127.0.0.1:1080 \
Expand All @@ -81,4 +106,4 @@ jobs: # Docs: <https://git.io/JvxXE>
https://github.com/robots.txt
- name: Stop container
run: docker stop $(docker ps -a --filter ancestor=image:local -q)
run: docker stop $(docker ps -a --filter ancestor=3proxy:local -q)
2 changes: 1 addition & 1 deletion 3proxy.cfg
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/usr/bin/3proxy
#!/bin/3proxy
config /etc/3proxy/3proxy.cfg

# you may use system to execute some external command if proxy starts
Expand Down
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,12 @@ All notable changes to this package will be documented in this file.

The format is based on [Keep a Changelog][keepachangelog] and this project adheres to [Semantic Versioning][semver].

## v1.2.0

### Changed

- 3proxy updated from `0.8.13` up to `0.9.3`

## v1.1.0

### Removed
Expand Down
96 changes: 62 additions & 34 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,59 +1,87 @@
# Image page: <https://hub.docker.com/_/alpine>
FROM alpine:latest as builder
FROM gcc:9.3 as builder

# e.g.: `docker build --build-arg "VERSION=0.8.13" .`
ARG VERSION="0.8.13"
# e.g.: `docker build --build-arg "VERSION=0.9.3" .`
ARG VERSION="0.9.3"

# Fetch 3proxy sources
RUN set -x \
&& apk add --no-cache \
linux-headers \
build-base \
git \
&& git clone --branch ${VERSION} https://github.com/z3APA3A/3proxy.git /tmp/3proxy \
&& cd /tmp/3proxy \
&& echo '#define ANONYMOUS 1' >> /tmp/3proxy/src/3proxy.h \
&& git clone --branch "${VERSION}" https://github.com/z3APA3A/3proxy.git /tmp/3proxy

WORKDIR /tmp/3proxy

# Patch sources
RUN set -x \
&& echo '#define ANONYMOUS 1' >> ./src/3proxy.h \
# proxy.c source: <https://github.com/z3APA3A/3proxy/blob/0.9.3/src/proxy.c>
&& sed -i 's~\(<\/head>\)~<style>html,body{background-color:#222526;color:#fff;font-family:sans-serif;\
text-align:center;display:flex;flex-direction:column;justify-content:center}h1,h2{margin-bottom:0;font-size:2.5em}\
h2::before{content:'"'"'Proxy error'"'"';display:block;font-size:0.4em;color:#bbb;font-weight:100}\
h3,p{color:#bbb}</style>\1~' /tmp/3proxy/src/proxy.c \
&& cat ./src/proxy.c | grep '</head>' \
&& make -f Makefile.Linux
h3,p{color:#bbb}</style>\1~' ./src/proxy.c \
&& cat ./src/proxy.c | grep '</head>'

FROM alpine:latest
# And compile
RUN set -x \
&& echo "" >> ./Makefile.Linux \
&& echo "PLUGINS = StringsPlugin TrafficPlugin PCREPlugin TransparentPlugin SSLPlugin" >> ./Makefile.Linux \
&& echo "LIBS = -l:libcrypto.a -l:libssl.a -ldl" >> ./Makefile.Linux \
&& make -f Makefile.Linux \
&& strip ./bin/3proxy \
&& strip ./bin/StringsPlugin.ld.so \
&& strip ./bin/TrafficPlugin.ld.so \
&& strip ./bin/PCREPlugin.ld.so \
&& strip ./bin/TransparentPlugin.ld.so \
&& strip ./bin/SSLPlugin.ld.so

# e.g.: `docker build --build-arg "BUILD_DATE=`date -u +'%Y-%m-%dT%H:%M:%SZ'`" .`
ARG BUILD_DATE
# Prepare filesystem for 3proxy running
FROM busybox:1.32-glibc as buffer

LABEL \
org.label-schema.name="3proxy" \
org.label-schema.description="Tiny free proxy server" \
org.label-schema.url="https://github.com/tarampampam/3proxy-docker" \
org.label-schema.vcs-url="https://github.com/tarampampam/3proxy-docker" \
org.label-schema.docker.cmd="docker run --rm -d -p \"3128:3128/tcp\" -p \"1080:1080/tcp\" this_image" \
org.label-schema.vendor="tarampampam" \
org.label-schema.build-date="$BUILD_DATE" \
org.label-schema.license="WTFPL" \
org.label-schema.schema-version="1.0"

COPY 3proxy.cfg /etc/3proxy/3proxy.cfg
COPY docker-entrypoint.sh /docker-entrypoint.sh
COPY --from=builder /tmp/3proxy/src/3proxy /usr/bin/3proxy
# Copy binaries
COPY --from=builder /lib/x86_64-linux-gnu/libdl.so.* /lib/
COPY --from=builder /tmp/3proxy/bin/3proxy /bin/
COPY --from=builder /tmp/3proxy/bin/*.ld.so /usr/local/3proxy/libexec/

# Create unprivileged user
RUN set -x \
# Unprivileged user creation <https://stackoverflow.com/a/55757473/12429735RUN>
&& adduser \
--disabled-password \
--gecos "" \
--home /nonexistent \
--shell /sbin/nologin \
--no-create-home \
--uid 10001 \
3proxy \
&& chown 3proxy:3proxy -R /etc/3proxy
3proxy

# Prepare files and directories
RUN set -x \
&& chown -R 10001:10001 /usr/local/3proxy \
&& chmod -R 550 /usr/local/3proxy \
&& chmod -R 555 /usr/local/3proxy/libexec \
&& chown -R root /usr/local/3proxy/libexec \
&& mkdir /etc/3proxy \
&& chown -R 10001:10001 /etc/3proxy

# Copy our config and entrypoint script
COPY 3proxy.cfg /etc/3proxy/3proxy.cfg
COPY docker-entrypoint.sh /docker-entrypoint.sh

# Split all buffered layers into one
FROM scratch

LABEL \
org.opencontainers.image.title="3proxy" \
org.opencontainers.image.description="Tiny free proxy server" \
org.opencontainers.image.url="https://github.com/tarampampam/3proxy-docker" \
org.opencontainers.image.source="https://github.com/tarampampam/3proxy-docker" \
org.opencontainers.image.vendor="Tarampampam" \
org.opencontainers.image.licenses="WTFPL"

# Import from builder
COPY --from=buffer / /

# Use an unprivileged user
USER 3proxy:3proxy

ENTRYPOINT ["/docker-entrypoint.sh"]

CMD ["/usr/bin/3proxy", "/etc/3proxy/3proxy.cfg"]
CMD ["/bin/3proxy", "/etc/3proxy/3proxy.cfg"]
2 changes: 1 addition & 1 deletion docker-entrypoint.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/usr/bin/env sh
#!/bin/sh
set -e

PROXY_LOGIN=${PROXY_LOGIN:-} # string
Expand Down

0 comments on commit 9d5cead

Please sign in to comment.