У меня есть программа, которую я хотел бы протестировать в автономном режиме, не отключая мою реальную сеть. Эта программа все равно должна была бы подключаться к локальным сокетам, включая сокеты домена unix и loopback. Это также должно слушать петлю и быть видимым для других приложений.
Но попытки подключиться к удаленной машине должны потерпеть неудачу.
Я хотел бы иметь утилиту, которая работает как strace
/ unshare
/ sudo
и просто запускает команду со скрытым Интернетом (и LAN), а все остальное все еще работает
$ offline my-program-to-test
Этот вопрос намекает на ответ: заблокировать сетевой доступ процесса?
Там есть пара предложений, например, запускать от имени другого пользователя, затем манипулировать iptables, или unshare -n
. Но в обоих случаях я не знаю заклинания, чтобы получить доменные сокеты unix и loopback для совместного использования с основной системой - ответы на этот вопрос только говорят мне, как отключить доступ ко всей сети.
Программа, которую я тестирую, по-прежнему должна подключаться к моему X-серверу и dbus и даже иметь возможность прослушивать зацикливание на наличие соединений из других приложений в системе.
В идеале я бы хотел избежать создания chroot или пользователей, или виртуальных машин или тому подобного, поскольку это становится таким же раздражающим, как отключение сетевого кабеля. т.е. вопрос в том, как я могу сделать это так просто, как sudo
.
Я бы хотел, чтобы процесс выполнялся на 100% нормально, за исключением того, что сетевые вызовы с указанием нелокального адреса потерпят неудачу. В идеале, сохраняя тот же uid, тот же homedir, тот же pwd, все то же самое, кроме ... офлайн.
Я использую Fedora 18, поэтому непереносимые ответы Linux просто хороши (даже ожидаемо).
Я даже рад решить это, написав программу на C, если это то, что нужно, поэтому ответы, которые предполагают написание C, хороши. Я просто не знаю, какие системные вызовы должна сделать эта C-программа, чтобы отозвать доступ к внешней сети при сохранении локальной сети.
Любой разработчик, пытающийся поддерживать «автономный режим», наверняка оценит эту утилиту!
источник
Этого также можно добиться с помощью сопоставления правил iptables cgroups. Я написал инструмент для абстрагирования шагов. Несмотря на то, что для начальной настройки требуются права суперпользователя, а в другом случае это двоичный файл setuid, я думаю, он предлагает довольно простой способ решения проблемы, о которой идет речь. Это требует версии iptables, которая является достаточно недавней и чтобы были доступны надлежащие модули сетевого фильтра.
https://github.com/quitesimpleorg/qsni
источник
Я не использовал его, но я думаю, что вы могли бы использовать Comcast:
https://github.com/tylertreat/Comcast
установить 100% потери пакетов
Опять же, я не проверял это, но теоретически изменил из их readme вы можете сделать:
Linux
В Linux вы можете использовать
iptables
для отбрасывания входящих и исходящих пакетов.Кроме того, вы можете использовать,
tc
который поддерживает некоторые дополнительные параметры.Для сброса:
источник