Способов обнаружить прокси достаточно много - по заголовкам Via, X-Forwared-For, Forwarded, измененному заголовку Accept:, по отличным от браузерных алгоритмам кэширования, по лимитным условиям (ограничениям на длину заголовка, URI, максимальный размер запроса), по разбиению запроса на пакеты (где-то весь POST-запрос идет одним пакетом, где-то отдельно идет заголовок включая перевод строки, где-то заголовок исключая). Но имейте ввиду, что за прокси могут сидеть куча легитимных клиентов, особенно корпоративных.
Обнаружить VPN тоже можно, но вы получите очень много фолзов, т.к. фактически технологии подключения типа PPTP, PPPoE, L2TP и различные соединения точка-точка не отличимы от VPN, а клиенты многих провайдеров получают доступ в Internet через такие виды соединения.
Скорее всего, вам нужно не блокировать по технологии подключения, а определять известные диапазоны IP-адресов VPN-провайдеров и прокси-сервисов.