У меня есть Ubuntu с установленным Squid, работающим как прозрачный прокси-сервер. Конфигурация, которая творит чудеса, следующая. (eth0 - внешний интерфейс, а eth1 - внутренний.)
sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
sudo iptables -t nat -A POSTROUTING --jump MASQUERADE --source 192.168.0.0/24
sudo iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
На данный момент прокси работает нормально.
Затем мне нужно отфильтровать некоторые пакеты, поэтому я использую ufw. т.е.
sudo ufw allow http
sudo ufw allow https
sudo ufw allow ssh
sudo deny 5223/tcp
sudo ufw enable
На данный момент больше ничего не работает. Не уверен, что мне не хватает. Что делать с портом 3128? У меня проблемы из-за того, что у меня два интерфейса? Изо всех сил пытаюсь осознать это, но безуспешно.
В итоге я использовал iptables напрямую вместо ufw. Похоже, что ufw по умолчанию создает уловку, которая мне не нужна в моем случае.
sudo iptables -A INPUT -j DROP -p tcp --destination-port 5223 -i eth1