173 lines
5.4 KiB
Docker
173 lines
5.4 KiB
Docker
# Phantom Exit Node - Специализированный контейнер для доступа к интернету
|
|
FROM ubuntu:22.04
|
|
|
|
LABEL maintainer="Phantom Protocol Team 2025"
|
|
LABEL description="Phantom Exit Node - Шлюз для доступа к обычному интернету"
|
|
LABEL version="2.0.0"
|
|
|
|
# Установка зависимостей
|
|
RUN apt-get update && apt-get install -y \
|
|
build-essential \
|
|
libssl-dev \
|
|
libxml2-dev \
|
|
libprotobuf-c-dev \
|
|
protobuf-c-compiler \
|
|
squid \
|
|
privoxy \
|
|
tor \
|
|
iproute2 \
|
|
iptables \
|
|
net-tools \
|
|
dnsutils \
|
|
curl \
|
|
wget \
|
|
vim \
|
|
htop \
|
|
tcpdump \
|
|
nmap \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Создание пользователя phantom
|
|
RUN useradd -r -s /bin/false -d /var/lib/phantom phantom && \
|
|
mkdir -p /var/lib/phantom /var/log/phantom /etc/phantom && \
|
|
chown -R phantom:phantom /var/lib/phantom /var/log/phantom /etc/phantom
|
|
|
|
# Копирование исходного кода
|
|
COPY src/ /usr/src/phantom/
|
|
COPY protos/ /usr/src/phantom/protos/
|
|
|
|
# Компиляция Phantom Exit Node
|
|
WORKDIR /usr/src/phantom
|
|
RUN make clean && \
|
|
make phantom-exit-node && \
|
|
cp phantom-exit-node /usr/local/bin/ && \
|
|
chmod +x /usr/local/bin/phantom-exit-node
|
|
|
|
# Копирование конфигурационных файлов
|
|
COPY docker/configs/exit-node/ /etc/phantom/
|
|
COPY docker/scripts/exit-node/ /usr/local/bin/
|
|
|
|
# Настройка Squid для HTTP прокси
|
|
COPY docker/squid/exit-node.conf /etc/squid/squid.conf
|
|
|
|
# Настройка Privoxy для дополнительной фильтрации
|
|
COPY docker/privoxy/exit-node.conf /etc/privoxy/config
|
|
|
|
# Создание директорий для данных
|
|
RUN mkdir -p /var/lib/phantom/exit-node/policies \
|
|
/var/lib/phantom/exit-node/logs \
|
|
/var/lib/phantom/exit-node/cache \
|
|
/var/lib/phantom/exit-node/stats \
|
|
/var/log/phantom/exit-node
|
|
|
|
# Создание файлов политик по умолчанию
|
|
RUN cat > /var/lib/phantom/exit-node/policies/default.policy << 'EOF'
|
|
# Phantom Exit Node Default Policy
|
|
# Разрешить HTTP и HTTPS
|
|
allow tcp 0.0.0.0/0:80
|
|
allow tcp 0.0.0.0/0:443
|
|
allow tcp 0.0.0.0/0:8080
|
|
allow tcp 0.0.0.0/0:8443
|
|
|
|
# Разрешить DNS
|
|
allow udp 0.0.0.0/0:53
|
|
|
|
# Разрешить популярные сервисы
|
|
allow tcp 0.0.0.0/0:22 # SSH
|
|
allow tcp 0.0.0.0/0:25 # SMTP
|
|
allow tcp 0.0.0.0/0:110 # POP3
|
|
allow tcp 0.0.0.0/0:143 # IMAP
|
|
allow tcp 0.0.0.0/0:993 # IMAPS
|
|
allow tcp 0.0.0.0/0:995 # POP3S
|
|
|
|
# Запретить опасные порты
|
|
reject tcp 0.0.0.0/0:1-1023
|
|
reject tcp 0.0.0.0/0:6660-6669 # IRC
|
|
reject tcp 0.0.0.0/0:6697 # IRC SSL
|
|
|
|
# Запретить локальные сети
|
|
reject tcp 10.0.0.0/8:*
|
|
reject tcp 172.16.0.0/12:*
|
|
reject tcp 192.168.0.0/16:*
|
|
reject tcp 127.0.0.0/8:*
|
|
EOF
|
|
|
|
# Создание списка заблокированных доменов
|
|
RUN cat > /var/lib/phantom/exit-node/policies/blocked-domains.txt << 'EOF'
|
|
# Заблокированные домены (примеры)
|
|
malware.example.com
|
|
phishing.example.com
|
|
spam.example.com
|
|
EOF
|
|
|
|
# Настройка прав доступа
|
|
RUN chown -R phantom:phantom /var/lib/phantom /var/log/phantom /etc/phantom && \
|
|
chmod +x /usr/local/bin/phantom-exit-start.sh && \
|
|
chmod +x /usr/local/bin/phantom-exit-healthcheck.sh && \
|
|
chmod +x /usr/local/bin/phantom-exit-policy-update.sh
|
|
|
|
# Открытие портов
|
|
EXPOSE 1080/tcp # SOCKS5 прокси
|
|
EXPOSE 3128/tcp # HTTP прокси
|
|
EXPOSE 8118/tcp # Privoxy
|
|
EXPOSE 5353/udp # DNS resolver
|
|
EXPOSE 8081/tcp # Управление
|
|
EXPOSE 9081/tcp # Мониторинг
|
|
|
|
# Переменные окружения
|
|
ENV PHANTOM_EXIT_NAME=phantom-exit
|
|
ENV PHANTOM_EXIT_CONTACT=admin@phantom.local
|
|
ENV PHANTOM_EXIT_BANDWIDTH_LIMIT=10485760 # 10 MB/s
|
|
ENV PHANTOM_EXIT_MAX_CONNECTIONS=1000
|
|
ENV PHANTOM_EXIT_LOG_LEVEL=INFO
|
|
ENV PHANTOM_EXIT_ENABLE_SOCKS5=true
|
|
ENV PHANTOM_EXIT_ENABLE_HTTP=true
|
|
ENV PHANTOM_EXIT_ENABLE_DNS=true
|
|
ENV PHANTOM_KADEMLIA_PORT=6881
|
|
|
|
# Health check
|
|
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
|
|
CMD /usr/local/bin/phantom-exit-healthcheck.sh
|
|
|
|
# Создание скрипта запуска
|
|
RUN cat > /usr/local/bin/start-exit-node.sh << 'EOF'
|
|
#!/bin/bash
|
|
set -e
|
|
|
|
echo "Запуск Phantom Exit Node..."
|
|
|
|
# Настройка iptables для безопасности
|
|
iptables -A OUTPUT -d 10.0.0.0/8 -j REJECT
|
|
iptables -A OUTPUT -d 172.16.0.0/12 -j REJECT
|
|
iptables -A OUTPUT -d 192.168.0.0/16 -j REJECT
|
|
iptables -A OUTPUT -d 127.0.0.0/8 -j REJECT
|
|
|
|
# Запуск Squid (HTTP прокси)
|
|
if [ "$PHANTOM_EXIT_ENABLE_HTTP" = "true" ]; then
|
|
echo "Запуск HTTP прокси (Squid)..."
|
|
squid -N &
|
|
fi
|
|
|
|
# Запуск Privoxy (фильтрация)
|
|
if [ "$PHANTOM_EXIT_ENABLE_FILTERING" = "true" ]; then
|
|
echo "Запуск фильтра контента (Privoxy)..."
|
|
privoxy --no-daemon /etc/privoxy/config &
|
|
fi
|
|
|
|
# Запуск Phantom Exit Node
|
|
exec /usr/local/bin/phantom-exit-start.sh "$@"
|
|
EOF
|
|
|
|
RUN chmod +x /usr/local/bin/start-exit-node.sh
|
|
|
|
# Переключение на пользователя phantom
|
|
USER phantom
|
|
|
|
# Рабочая директория
|
|
WORKDIR /var/lib/phantom
|
|
|
|
# Точка входа
|
|
ENTRYPOINT ["/usr/local/bin/start-exit-node.sh"]
|
|
CMD ["--config", "/etc/phantom/exit-node.conf"]
|
|
|