Якщо потрібен лише HTTP(S) трафік, і врахувати побажання "При тому, що є випадки коли треба дозволити всі субдомени для певних доменів, на зразок: *.update.softsolution.com. ", то єдиний відомий мені спосіб - HTTP/HTTPS proxy. Наприклад, squid дозволяє зчитати білий список з окремого файла, щоб кожен раз файл конфігурації не правити. Transparent proxy для HTTP налаштувати зовсім просто. Якщо немає можливості налаштувати доступ для HTTPS на клієнтах з явним вказанням проксі і, відповідно, потрібен Transparent HTTPS proxy, то доведеться заморочитися генерацією кореневого сертифіката для проксі-сервера і додаванням його на всіх клієнтах у сховище довірених. Правда, тут ще треба враховувати орієнтовну швидкість каналу - для 100Мб/с і більше потрібна буде потужна конфігурація сервера.
Якщо вказане побажання не критичне, то можна написати скріпт генерації правил iptables на основі білого списка. Тоді і обмеження HTTP(S) може бути зняте.
Ще один варіант, але не дуже надійний (навіть дуже ненадійний) - це не фільтрувати на рівні трафіка, а пофільтрувати на рівні DNS (наприклад, дуже специфічною конфігурацією bind, щоб він повертав справжні IP для "білих" доменів і, скажімо, 127.0.0.1 для всіх інших, або IP сервера, на якому висить сторінка "Доступ до цього ресурсу заблоковано"). Але це буде працювати лише для доступу по URL, при доступі по IP, ясно, нічого фільтруватися не буде. І тоді ще потрібно пофільтрувати "неправильні" DNS-сервери, наприклад, заблокувати 53 порт на всі адреси, крім "правильного" DNS. І якщо якийсь умілець десь знайде дірочку для доступу до "лєвого" DNS (наприклад, хтось пожертвує для цих цілей хоча б GPRS на мобільнику), то фільтрація вся йде лісом