Compare commits

..

1 Commits

Author SHA1 Message Date
joshua_schnabel b7bc8efb04 Initial commit 2021-03-14 01:04:10 +01:00
16 changed files with 21 additions and 489 deletions
+19
View File
@@ -0,0 +1,19 @@
MIT License Copyright (c) <year> <copyright holders>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is furnished
to do so, subject to the following conditions:
The above copyright notice and this permission notice (including the next
paragraph) shall be included in all copies or substantial portions of the
Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+2
View File
@@ -0,0 +1,2 @@
# docker-images
-51
View File
@@ -1,51 +0,0 @@
FROM alpine:3.11 AS builder
ARG DNSDIST_VERSION
RUN apk --update upgrade && \
apk add ca-certificates curl jq && \
apk add --virtual .build-depends \
file gnupg g++ make \
boost-dev openssl-dev libsodium-dev lua-dev net-snmp-dev protobuf-dev \
libedit-dev re2-dev h2o-dev wslay-dev && \
[ -n "$DNSDIST_VERSION" ] || { curl -sSL 'https://api.github.com/repos/PowerDNS/pdns/tags?per_page=100&page={1,2}' | jq -rs '[.[][]]|map(select(has("name")))|map(select(.name|contains("dnsdist-")))|map(.version=(.name|ltrimstr("dnsdist-")))|map(select(true != (.version|contains("-"))))|map(.version)|"DNSDIST_VERSION="+.[0]' > /tmp/latest-dnsdist-tag.sh && . /tmp/latest-dnsdist-tag.sh; } && \
mkdir -v -m 0700 -p /root/.gnupg && \
curl -RL -O 'https://dnsdist.org/_static/dnsdist-keyblock.asc' && \
gpg2 --no-options --verbose --keyid-format 0xlong --keyserver-options auto-key-retrieve=true \
--import *.asc && \
curl -RL -O "https://downloads.powerdns.com/releases/dnsdist-${DNSDIST_VERSION}.tar.bz2{.asc,.sig,}" && \
gpg2 --no-options --verbose --keyid-format 0xlong --keyserver-options auto-key-retrieve=true \
--verify *.sig && \
rm -rf /root/.gnupg *.asc *.sig && \
tar -xpf "dnsdist-${DNSDIST_VERSION}.tar.bz2" && \
rm -f "dnsdist-${DNSDIST_VERSION}.tar.bz2" && \
( \
cd "dnsdist-${DNSDIST_VERSION}" && \
./configure --sysconfdir=/etc/dnsdist --mandir=/usr/share/man \
--enable-dnscrypt --enable-dns-over-tls --enable-dns-over-https --with-libsodium --with-re2 --with-net-snmp && \
make -j 2 && \
make install-strip \
) && \
apk del --purge .build-depends && rm -rf /var/cache/apk/*
FROM alpine:3.11
LABEL maintainer="https://keybase.io/tcely"
RUN apk --update upgrade && \
apk add ca-certificates curl less man \
openssl libsodium lua net-snmp protobuf \
libedit re2 && \
rm -rf /var/cache/apk/*
ENV PAGER less
RUN addgroup -S dnsdist && \
adduser -S -D -G dnsdist dnsdist
COPY --from=builder /usr/local/bin /usr/local/bin/
COPY --from=builder /usr/share/man/man1 /usr/share/man/man1/
RUN /usr/local/bin/dnsdist --version
ENTRYPOINT ["/usr/local/bin/dnsdist"]
CMD ["--help"]
-9
View File
@@ -1,9 +0,0 @@
FROM alpine
MAINTAINER Jaka Hudoklin <offlinehacker@users.noreply.github.com>
RUN apk add --no-cache bash hostapd iptables dhcp docker iproute2 iw
RUN echo "" > /var/lib/dhcp/dhcpd.leases
ADD wlanstart.sh /bin/wlanstart.sh
ENTRYPOINT [ "/bin/wlanstart.sh" ]
-82
View File
@@ -1,82 +0,0 @@
# Docker container stack: hostap + dhcp server
This container starts wireless access point (hostap) and dhcp server in docker
container. It supports both host networking and network interface reattaching
to container network namespace modes (host and guest).
## Requirements
On the host system install required wifi drivers, then make sure your wifi adapter
supports AP mode:
```
# iw list
...
Supported interface modes:
* IBSS
* managed
* AP
* AP/VLAN
* WDS
* monitor
* mesh point
...
```
Set country regulations, for example, for Spain set:
```
# iw reg set ES
country ES: DFS-ETSI
(2400 - 2483 @ 40), (N/A, 20), (N/A)
(5150 - 5250 @ 80), (N/A, 23), (N/A), NO-OUTDOOR
(5250 - 5350 @ 80), (N/A, 20), (0 ms), NO-OUTDOOR, DFS
(5470 - 5725 @ 160), (N/A, 26), (0 ms), DFS
(57000 - 66000 @ 2160), (N/A, 40), (N/A)
```
## Build / run
* Using host networking:
```
sudo docker run -i -t -e INTERFACE=wlan1 -e OUTGOINGS=wlan0 --net host --privileged won10/hostapd
```
* Using network interface reattaching:
```
sudo docker run -d -t -e INTERFACE=wlan0 -v /var/run/docker.sock:/var/run/docker.sock --privileged offlinehacker/docker-ap
```
This mode requires access to docker socket, so it can run a short lived
container that reattaches network interface to network namespace of this
container. It also renames wifi interface to **wlan0**, so you get
deterministic networking environment. This mode can be usefull for example for
pentesting, where can you use docker compose to run other wifi hacking tools
and have deterministic environment with wifi interface.
## Environment variables
* **INTERFACE**: name of the interface to use for wifi access point (default: wlan0)
* **OUTGOINGS**: outgoing network interface (default: eth0)
* **CHANNEL**: WIFI channel (default: 6)
* **SUBNET**: Network subnet (default: 192.168.254.0)
* **AP_ADDR**: Access point address (default: 192.168.254.1)
* **SSID**: Access point SSID (default: docker-ap)
* **WPA_PASSPHRASE**: WPA password (default: passw0rd)
* **HW_MODE**: WIFI mode to use (default: g)
* **DRIVER**: WIFI driver to use (default: nl80211)
* **HT_CAPAB**: WIFI HT capabilities for 802.11n (default: [HT40-][SHORT-GI-20][SHORT-GI-40])
* **MODE**: Mode to run in guest/host (default: host)
## License
MIT
## Author
Jaka Hudoklin <jakahudoklin@gmail.com>
Thanks to https://github.com/sdelrio/rpi-hostap for providing original
implementation.
-2
View File
@@ -1,2 +0,0 @@
#!/bin/bash
docker run -i -t -e INTERFACE=wlan0 -e OUTGOINGS=eth0 --net host --privileged won10/hostapd
-126
View File
@@ -1,126 +0,0 @@
#!/bin/bash -e
# Check if running in privileged mode
if [ ! -w "/sys" ] ; then
echo "[Error] Not running in privileged mode."
exit 1
fi
# Default values
true ${INTERFACE:=wlan0}
true ${SUBNET:=192.168.254.0}
true ${AP_ADDR:=192.168.254.1}
true ${SSID:=docker-ap}
true ${CHANNEL:=11}
true ${WPA_PASSPHRASE:=passw0rd}
true ${HW_MODE:=g}
true ${DRIVER:=nl80211}
true ${HT_CAPAB:=[HT40-][SHORT-GI-20][SHORT-GI-40]}
true ${MODE:=host}
# Attach interface to container in guest mode
if [ "$MODE" == "guest" ]; then
echo "Attaching interface to container"
CONTAINER_ID=$(cat /proc/self/cgroup | grep -o -e "/docker/.*" | head -n 1| sed "s/\/docker\/\(.*\)/\\1/")
CONTAINER_PID=$(docker inspect -f '{{.State.Pid}}' ${CONTAINER_ID})
CONTAINER_IMAGE=$(docker inspect -f '{{.Config.Image}}' ${CONTAINER_ID})
docker run -t --privileged --net=host --pid=host --rm --entrypoint /bin/sh ${CONTAINER_IMAGE} -c "
PHY=\$(echo phy\$(iw dev ${INTERFACE} info | grep wiphy | tr ' ' '\n' | tail -n 1))
iw phy \$PHY set netns ${CONTAINER_PID}
"
ip link set ${INTERFACE} name wlan0
INTERFACE=wlan0
fi
if [ ! -f "/etc/hostapd.conf" ] ; then
cat > "/etc/hostapd.conf" <<EOF
interface=${INTERFACE}
driver=${DRIVER}
ssid=${SSID}
hw_mode=${HW_MODE}
channel=${CHANNEL}
wpa=2
wpa_passphrase=${WPA_PASSPHRASE}
wpa_key_mgmt=WPA-PSK
# TKIP is no secure anymore
#wpa_pairwise=TKIP CCMP
wpa_pairwise=CCMP
rsn_pairwise=CCMP
wpa_ptk_rekey=600
ieee80211n=1
ht_capab=${HT_CAPAB}
wmm_enabled=1
EOF
fi
# unblock wlan
rfkill unblock wlan
echo "Setting interface ${INTERFACE}"
# Setup interface and restart DHCP service
ip link set ${INTERFACE} up
ip addr flush dev ${INTERFACE}
ip addr add ${AP_ADDR}/24 dev ${INTERFACE}
# NAT settings
echo "NAT settings ip_dynaddr, ip_forward"
for i in ip_dynaddr ip_forward ; do
if [ $(cat /proc/sys/net/ipv4/$i) ]; then
echo $i already 1
else
echo "1" > /proc/sys/net/ipv4/$i
fi
done
cat /proc/sys/net/ipv4/ip_dynaddr
cat /proc/sys/net/ipv4/ip_forward
if [ "${OUTGOINGS}" ] ; then
ints="$(sed 's/,\+/ /g' <<<"${OUTGOINGS}")"
for int in ${ints}
do
echo "Setting iptables for outgoing traffics on ${int}..."
iptables -t nat -D POSTROUTING -s ${SUBNET}/24 -o ${int} -j MASQUERADE > /dev/null 2>&1 || true
iptables -t nat -A POSTROUTING -s ${SUBNET}/24 -o ${int} -j MASQUERADE
iptables -D FORWARD -i ${int} -o ${INTERFACE} -m state --state RELATED,ESTABLISHED -j ACCEPT > /dev/null 2>&1 || true
iptables -A FORWARD -i ${int} -o ${INTERFACE} -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -D FORWARD -i ${INTERFACE} -o ${int} -j ACCEPT > /dev/null 2>&1 || true
iptables -A FORWARD -i ${INTERFACE} -o ${int} -j ACCEPT
done
else
echo "Setting iptables for outgoing traffics on all interfaces..."
iptables -t nat -D POSTROUTING -s ${SUBNET}/24 -j MASQUERADE > /dev/null 2>&1 || true
iptables -t nat -A POSTROUTING -s ${SUBNET}/24 -j MASQUERADE
iptables -D FORWARD -o ${INTERFACE} -m state --state RELATED,ESTABLISHED -j ACCEPT > /dev/null 2>&1 || true
iptables -A FORWARD -o ${INTERFACE} -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -D FORWARD -i ${INTERFACE} -j ACCEPT > /dev/null 2>&1 || true
iptables -A FORWARD -i ${INTERFACE} -j ACCEPT
fi
echo "Configuring DHCP server .."
cat > "/etc/dhcp/dhcpd.conf" <<EOF
option domain-name-servers 8.8.8.8, 8.8.4.4;
option subnet-mask 255.255.255.0;
option routers ${AP_ADDR};
subnet ${SUBNET} netmask 255.255.255.0 {
range ${SUBNET::-1}100 ${SUBNET::-1}200;
}
EOF
echo "Starting DHCP server .."
dhcpd ${INTERFACE}
echo "Starting HostAP daemon ..."
/usr/sbin/hostapd /etc/hostapd.conf
-16
View File
@@ -1,16 +0,0 @@
FROM nginx:alpine
WORKDIR /var/www/
RUN apk add --update curl \
&& rm -rf /var/cache/apk/* \
&& wget https://github.com/hivemq/hivemq-mqtt-web-client/archive/master.zip \
&& unzip master.zip \
&& mv hivemq-mqtt-web-client-master hivemq-mqtt-web-client \
&& rm master.zip
ADD nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
CMD ["nginx"]
-24
View File
@@ -1,24 +0,0 @@
worker_processes 1;
daemon off;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
use epoll;
multi_accept off;
}
http {
include /etc/nginx/mime.types;
index index.html;
server {
listen *:80;
location / {
root /var/www/hivemq-mqtt-web-client;
}
}
}
-27
View File
@@ -1,27 +0,0 @@
FROM nodered/node-red:1.2.9
USER root
RUN apk update && apk upgrade && \
apk --no-cache add perl libpcap libpcap-dev bluez tcpdump iputils wget sshpass sudo && \
apk --no-cache add -X http://dl-cdn.alpinelinux.org/alpine/edge/testing arp-scan && \
apk --no-cache add -X http://dl-cdn.alpinelinux.org/alpine/edge/community awake
RUN cd /tmp && \
wget http://www.mavetju.org/download/dhcpdump-1.8.tar.gz && \
tar -xzf ./dhcpdump-1.8.tar.gz && \
cd ./dhcpdump-1.8 && \
wget https://raw.githubusercontent.com/alexeicolin/dhcpdump-PKGBUILD/master/dhcpdump-1.8-includes.patch && \
patch -p1 < ./dhcpdump-1.8-includes.patch && \
ls && \
make && \
install -D dhcpdump /usr/bin/dhcpdump
RUN addgroup node-red dialout
RUN echo "node-red ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/node-red \
&& chmod 0440 /etc/sudoers.d/node-red
WORKDIR /usr/src/node-red
USER node-red
-89
View File
@@ -1,89 +0,0 @@
FROM node:lts-buster AS base
# Copy scripts
COPY scripts/*.sh /tmp/
RUN mkdir -p /usr/src/node-red /data && \
deluser --remove-home node && \
adduser --gecos "" --home /usr/src/node-red --disabled-login --uid 1000 node-red && \
chown -R node-red:node-red /data && \
chown -R node-red:node-red /usr/src/node-red && \
chmod +x /tmp/*.sh
# Install tools, create Node-RED app and data dir, add user and set rights
RUN set -ex && \
apt-get update && \
apt-get upgrade -y && \
apt-get install -y \
bash \
tzdata \
iputils-ping \
iputils-arping \
curl \
nano \
git \
openssl \
openssh-client
# Set work directory
WORKDIR /usr/src/node-red
# package.json contains Node-RED NPM module and node dependencies
COPY package.json .
#### Stage BUILD #######################################################################################################
FROM base AS build
# Install Build tools
RUN apt-get update && \
apt-get upgrade -y && \
apt-get -y install build-essential linux-headers-$(uname -r) udev python && \
npm install --unsafe-perm --no-update-notifier --only=production
RUN /tmp/remove_native_gpio.sh && \
cp -R node_modules prod_node_modules
#### Stage RELEASE #####################################################################################################
FROM base AS RELEASE
COPY --from=build /usr/src/node-red/prod_node_modules ./node_modules
# Chown, install devtools & Clean up
RUN chown -R node-red:node-red /usr/src/node-red && \
/tmp/install_devtools.sh && \
rm -r /tmp/*
RUN set -ex \
&& apt-get install -y wget sudo net-tools dhcpdump rfkill bluetooth bluez bluez-tools arp-scan libpcap-dev
RUN addgroup node-red sudo
RUN cat /dev/null > /etc/sudoers \
&& echo -e "Set disable_coredump false\n" > /etc/sudo.conf \
&& touch /etc/sudoers \
&& echo "node-red ALL=(ALL) NOPASSWD: ALL\n%sudo ALL=(ALL) NOPASSWD: ALL\n" > /etc/sudoers \
&& chmod 0440 /etc/sudoers
RUN apt-get clean autoclean && \
apt-get autoremove --yes && \
rm -rf /var/lib/{apt,dpkg,cache,log}/
USER node-red
# Env variables
ENV NODE_RED_VERSION=$NODE_RED_VERSION \
NODE_PATH=/usr/src/node-red/node_modules:/data/node_modules \
FLOWS=flows.json
# ENV NODE_RED_ENABLE_SAFE_MODE=true # Uncomment to enable safe start mode (flows not running)
# ENV NODE_RED_ENABLE_PROJECTS=true # Uncomment to enable projects option
# User configuration directory volume
VOLUME ["/data"]
# Expose the listening port of node-red
EXPOSE 1880
# Add a healthcheck (default every 30 secs)
HEALTHCHECK CMD curl http://localhost:1880/ || exit 1
ENTRYPOINT ["npm", "start", "--", "--userDir", "/data"]
-35
View File
@@ -1,35 +0,0 @@
{
"name": "node-red-docker",
"version": "1.0.6",
"description": "Low-code programming for event-driven applications",
"homepage": "http://nodered.org",
"license": "Apache-2.0",
"repository": {
"type": "git",
"url": "https://github.com/node-red/node-red-docker.git"
},
"main": "node_modules/node-red/red/red.js",
"scripts": {
"start": "node $NODE_OPTIONS node_modules/node-red/red.js $FLOWS"
},
"contributors": [
{
"name": "Dave Conway-Jones"
},
{
"name": "Nick O'Leary"
},
{
"name": "James Thomas"
},
{
"name": "Raymond Mouthaan"
}
],
"dependencies": {
"node-red": "^1.0.6"
},
"engines": {
"node": ">=10"
}
}
-10
View File
@@ -1,10 +0,0 @@
#!/bin/bash
set -ex
# Installing Devtools
if [[ ${TAG_SUFFIX} != "minimal" ]]; then
echo "Installing devtools"
apt-get install --yes build-essential linux-headers-$(uname -r) udev python python3
else
echo "Skip installing devtools"
fi
-10
View File
@@ -1,10 +0,0 @@
#!/bin/bash
set -ex
# Remove native GPIO node if exists
if [[ -d "/usr/src/node-red/node_modules/@node-red/nodes/core/hardware" ]]; then
echo "Removing native GPIO node"
rm -r /usr/src/node-red/node_modules/@node-red/nodes/core/hardware
else
echo "Skip removing native GPIO node"
fi
-5
View File
@@ -1,5 +0,0 @@
FROM fauust/docker-systemd:debian-10
RUN apt-get update && apt-get upgrade --yes && apt-get install curl wget sudo procps --yes
RUN curl -sL https://install.raspap.com | bash -s -- --yes
-3
View File
@@ -1,3 +0,0 @@
FROM telegraf:1.17-alpine
RUN apk update && apk upgrade && \
apk --no-cache add unbound