<===
2025-09-24 07:55:27
Чтобы запретить доступ к интернету для одной программы в Linux (Manjaro), можно использовать несколько подходов. Вот два основных метода:
### 1. **Использование `iptables` или `nftables`**
Эти инструменты позволяют настроить правила брандмауэра для блокировки сетевого доступа конкретной программы.
#### Шаги для `iptables`:
1. **Определите путь к программе**:
Узнайте полный путь к исполняемому файлу программы. Например:
```bash
which имя_программы
```
Допустим, это `/usr/bin/имя_программы`.
2. **Создайте правило в `iptables`**:
Используйте опцию `-m owner` для фильтрации по владельцу процесса. Например, чтобы заблокировать исходящий трафик для программы:
```bash
sudo iptables -A OUTPUT -m owner --uid-owner $(whoami) -m string --string "/usr/bin/имя_программы" --algo bm -j DROP
```
Здесь:
- `-A OUTPUT` — правило для исходящего трафика.
- `--uid-owner $(whoami)` — применяется к вашему пользователю.
- `-m string --string "/usr/bin/имя_программы"` — фильтрует по пути к программе.
- `-j DROP` — блокирует трафик.
3. **Сохраните правила**:
Чтобы правила сохранялись после перезагрузки:
```bash
sudo iptables-save > /etc/iptables/iptables.rules
```
На Manjaro может потребоваться настройка сервиса `iptables`:
```bash
sudo systemctl enable iptables
sudo systemctl start iptables
```
#### Для `nftables` (более современный вариант):
1. Создайте таблицу и цепочку:
```bash
sudo nft add table inet my_filter
sudo nft add chain inet my_filter output { type filter hook output priority 0 \; policy accept \; }
```
2. Добавьте правило для блокировки:
```bash
sudo nft add rule inet my_filter output meta skuid $(whoami) oifname "eth0" drop
```
Замените `eth0` на ваш сетевой интерфейс (проверьте с помощью `ip a`).
3. Сохраните конфигурацию:
```bash
sudo nft list ruleset > /etc/nftables.conf
sudo systemctl enable nftables
sudo systemctl start nftables
```
**Примечание**: `iptables` и `nftables` требуют точного указания пути к программе или дополнительных фильтров, что может быть не всегда удобно.
---
### 2. **Использование `firejail`**
`Firejail` — это инструмент для изоляции программ в песочнице, который позволяет ограничить доступ к сети.
#### Установка `firejail`:
```bash
sudo pacman -S firejail
```
#### Настройка:
1. Создайте профиль для программы. Например, для программы `имя_программы` создайте файл `/etc/firejail/имя_программы.profile`:
```bash
noblacklist ${HOME}
include /etc/firejail/disable-common.inc
net none
```
2. Запустите программу с `firejail`:
```bash
firejail --profile=/etc/firejail/имя_программы.profile имя_программы
```
Опция `net none` отключает доступ к сети.
3. (Опционально) Создайте псевдоним для удобства:
Добавьте в `~/.bashrc`:
```bash
alias имя_программы='firejail --profile=/etc/firejail/имя_программы.profile имя_программы'
```
---
### 3. **Дополнительный способ: использование `unshare`**
Можно запускать программу в изолированном сетевом пространстве:
```bash
sudo unshare -n имя_программы
```
Это отключает доступ к сети для процесса, но требует прав суперпользователя.
---
### Рекомендация
`Firejail` — самый простой и гибкий способ для большинства пользователей, так как не требует глубоких знаний о настройке брандмауэра. Если нужен более строгий контроль, используйте `iptables` или `nftables`.