Files
Phantom/release/Dockerfile.exit-node

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"]