iptables добавляет правила в цепочку OUTPUT

Мы можем вставлять правила iptables на основе IP / Network / Hostname:

 iptables -t filter -A OUTPUT -p tcp -d www.google.com -j ACCEPT -m comment --comment "www.google.com" 

Он не принимает:

 iptables v1.4.7: host/network www.google.com not found Try iptables -h' or 'iptables --help' for more information. 

host / network http://www.google.com не найден

Предположительно, вы делаете это либо перед настройкой DNS, либо когда ваша настройка брандмауэра блокирует DNS.

В любом случае вы используете неправильный инструмент для задания. Вы пытаетесь водить винтом молотком. Даже если вам удастся что-то сделать, я бы не сидел на этом стуле.

В этом примере это не сработает: www.google.com имеет много IP-адресов, и данный DNS-поиск возвращает только некоторые из них. Вы не можете легко перечислить все IP-адреса www.google.com . Таким образом, ваши запросы на www.google.com будут случайным образом пройдены или нет. И наоборот, многие сайты, которые меньше, чем Google, работают с одним и тем же IP-адресом, поэтому вы можете блокировать только все или никого из них.

Чтобы фильтровать веб-доступ, вам нужен веб-прокси . В конфигурации itables заблокируйте весь исходящий доступ, за исключением порта 443 (вы в значительной степени не можете фильтровать HTTPS в любом случае, за исключением инвазивного и небезопасного способа, к которому я не буду входить в этот ответ) и за исключением пользователя, выполняющего прокси.

 iptables -P OUTPUT DROP iptables -A OUTPUT -p icmp -j ACCEPT iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT iptables -A OUTPUT -p tcp -m owner --uid-owner wwwproxy -j ACCEPT 

Замените wwwproxy именем пользователя, использующего прокси-сервер HTTP, который будет зависеть от вашей конфигурации прокси-сервера.

Существует много HTTP-прокси. Squid популярен, но для небольшой установки вы можете предпочесть что-то меньшее.