<===

ProNotes

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`.
← Previous Next →
Back to list