name: Test Proxy on: push: branches: - main paths-ignore: - '**.md' pull_request: paths-ignore: - '**.md' permissions: contents: read jobs: # End to end upload with proxy test-proxy-upload: runs-on: ubuntu-latest container: image: ubuntu:latest options: --cap-add=NET_ADMIN services: squid-proxy: image: ubuntu/squid:latest ports: - 3128:3128 env: http_proxy: http://squid-proxy:3128 https_proxy: http://squid-proxy:3128 steps: - name: Wait for proxy to be ready shell: bash run: | echo "Waiting for squid proxy to be ready..." echo "Resolving squid-proxy hostname:" getent hosts squid-proxy || echo "DNS resolution failed" for i in $(seq 1 30); do if (echo > /dev/tcp/squid-proxy/3128) 2>/dev/null; then echo "Proxy is ready!" exit 0 fi echo "Attempt $i: Proxy not ready, waiting..." sleep 2 done echo "Proxy failed to become ready" exit 1 env: http_proxy: "" https_proxy: "" - name: Install dependencies run: | apt-get update apt-get install -y iptables curl - name: Verify proxy is working run: | echo "Testing proxy connectivity..." curl -s -o /dev/null -w "%{http_code}" --proxy http://squid-proxy:3128 http://github.com || true echo "Proxy verification complete" - name: Block direct traffic (enforce proxy usage) run: | # Get the squid-proxy container IP PROXY_IP=$(getent hosts squid-proxy | awk '{ print $1 }') echo "Proxy IP: $PROXY_IP" # Allow loopback traffic iptables -A OUTPUT -o lo -j ACCEPT # Allow traffic to the proxy container iptables -A OUTPUT -d $PROXY_IP -j ACCEPT # Allow established connections iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Allow DNS (needed for initial resolution) iptables -A OUTPUT -p udp --dport 53 -j ACCEPT iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT # Block all other outbound traffic (HTTP/HTTPS) iptables -A OUTPUT -p tcp --dport 80 -j REJECT iptables -A OUTPUT -p tcp --dport 443 -j REJECT # Log the iptables rules for debugging iptables -L -v -n - name: Verify direct HTTPS is blocked run: | echo "Testing that direct HTTPS requests fail..." if curl --noproxy '*' -s --connect-timeout 5 https://github.com > /dev/null 2>&1; then echo "ERROR: Direct HTTPS request succeeded - blocking is not working!" exit 1 else echo "SUCCESS: Direct HTTPS request was blocked as expected" fi echo "Testing that HTTPS through proxy succeeds..." if curl --proxy http://squid-proxy:3128 -s --connect-timeout 10 https://github.com > /dev/null 2>&1; then echo "SUCCESS: HTTPS request through proxy succeeded" else echo "ERROR: HTTPS request through proxy failed!" exit 1 fi - name: Checkout uses: actions/checkout@v4 - name: Create artifact file run: | mkdir -p test-artifacts echo "Proxy test artifact - $GITHUB_RUN_ID" > test-artifacts/proxy-test.txt echo "Random data: $RANDOM $RANDOM $RANDOM" >> test-artifacts/proxy-test.txt cat test-artifacts/proxy-test.txt - name: Upload artifact through proxy uses: ./ with: name: 'Proxy-Test-Artifact-${{ github.run_id }}' path: test-artifacts/proxy-test.txt