А если серьезно, то очень интересно, спасибо.
Как-то такая задача даже никогда не вставала — весь важный траффик у меня давно уже завернут в SSL, а остальной пусть слушают…
Ну нет, это иъзян не самой идеи, а реализации идеи, который к тому же легко поправить.
А вообще на практике это даже и не нужно: DHCP-клиенты используют сырые сокеты, которые просто обходят iptables.
А вот насчет сырых сокетов, это что-то за гранью, иптаблы работают «на уровне» сетевого стека, и им все равно какими сокетами был сформирован пакет.
Например, классическая реализация подразумевает запрет всех исходящих соединений кроме ипа впн сервера, (ваша идея как раз хороша тем, что исключает прописывание его каждый раз) и в ней точно так же блокируется dhcp реквест, по этому что бы все работало, необходимо дописывать разрешение на отправку udp на 67-ой порт
Смысл сырых сокетов как раз в том, чтобы обойти весь стек (в частности, IP). DHCP-клиенту нужно отправить пакеты с исходящим адресом 0.0.0.0 на нужный интерфейс, что обычные DGRAM-сокеты не позволяют.
В принципе, ядро могло бы перед отправкой и распарсить эти пакеты, сформированные RAW-сокетами, и применить к ним цепочку OUTPUT, но оно так не делает (только что проверил).
Но это относится только к IPPROTO_RAW (который и используют DHCP-клиенты). ping, например, использует socket(PF_INET, SOCK_RAW, IPPROTO_ICMP), и может управлять лишь содержимым IP-пакета, но не его заголовком. IP-заголовок формирует ядро, и такой пакет проходит через OUTPUT как положено.
Требуются, но система должна быть предсказуемой.
И файрвол должен быть «последней инстанцией» которая принимает решение, сказано все резать — значит так и должно быть,
а тут появляются исключения…
Насчет рута… понимаете, получить рута — это не единственная задача злоумышленника, достигнув которой он стал всемогущ и расслабился.
Вторая его основная задача — оставаться не видимым, если он начнет менять правила файрвола, добавлять юзеров и проявлять прочую активность в системе — это рано или поздно обнаружат.
А тут получается ему замечательный подарок, который позволит контролировать сервер даже если там будет жестко зарезан исходящий трафик. И админ будет свято уверен в том, что все «под контролем».
У меня почему-то не работает команда ¨sg killswitch 'ping google.com'¨
Мне кажется, что это вызвано как раз effective/supplementary gid, но я не очень в этом разбираюсь.
Kill switch для OpenVPN на основе iptables