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