iptables
`iptables` — это мощный инструмент для управления сетевыми фильтрами в Linux, который позволяет настраивать правила для обработки пакетов на уровне ядра. Вот основные функции и возможности `iptables`:
### Основные функции `iptables`:
1. **Фильтрация пакетов:**
- **Принятие (ACCEPT):** Разрешает пакет проходить через цепочку.
- **Отклонение (DROP):** Отбрасывает пакет без отправки ответа.
- **Отклонение с ответом (REJECT):** Отбрасывает пакет и отправляет ответное сообщение (например, ICMP "порт недоступен").
2. **Маршрутизация пакетов:**
- **Перенаправление (REDIRECT):** Перенаправляет пакет на другой порт на том же хосте.
- **Маскарадинг (MASQUERADE):** Преобразует исходный IP-адрес пакета, что полезно для NAT.
- **Трансляция портов (DNAT/SNAT):** Изменяет IP-адрес назначения (DNAT) или исходного IP-адреса (SNAT).
3. **Мониторинг и логирование:**
- **Логирование (LOG):** Записывает информацию о пакете в системный журнал.
- **Маркировка (MARK):** Устанавливает метку на пакет, которая может использоваться другими правилами.
### Основные цепочки (chains) в `iptables`:
- **INPUT:** Обрабатывает пакеты, предназначенные для локальных процессов на хосте.
- **OUTPUT:** Обрабатывает пакеты, созданные локальными процессами.
- **FORWARD:** Обрабатывает пакеты, проходящие через хост (например, в случае маршрутизатора).
- **PREROUTING:** Обрабатывает пакеты до того, как они будут маршрутизированы.
- **POSTROUTING:** Обрабатывает пакеты после того, как они были маршрутизированы.
### Примеры использования `iptables`:
1. **Разрешить входящий трафик на порт 80 (HTTP):**
```bash
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
```
2. **Заблокировать весь входящий трафик с определенного IP-адреса:**
```bash
sudo iptables -A INPUT -s 192.168.1.100 -j DROP
```
3. **Разрешить SSH-трафик только с определенного IP-адреса:**
```bash
sudo iptables -A INPUT -p tcp --dport 22 -s 192.168.1.100 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j DROP
```
4. **Перенаправить трафик с порта 80 на порт 3000:**
```bash
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3000
```
5. **Включить маскарадинг (NAT) для выхода в интернет:**
```bash
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
```
6. **Логирование пакетов, которые не соответствуют ни одному правилу:**
```bash
sudo iptables -A INPUT -j LOG --log-prefix "IPTABLES_DROP: "
```
### Сохранение и восстановление правил:
- **Сохранение правил:**
```bash
sudo iptables-save > /etc/iptables/rules.v4
```
- **Восстановление правил:**
```bash
sudo iptables-restore < /etc/iptables/rules.v4
```
### Дополнительные инструменты:
- **`ip6tables`:** Аналог `iptables` для IPv6.
- **`iptables-persistent`:** Утилита для сохранения правил `iptables` после перезагрузки.
- **`nftables`:** Современная альтернатива `iptables`, которая предлагает более гибкий и эффективный способ управления правилами брандмауэра.
`iptables` — это мощный инструмент, который позволяет контролировать и настраивать сетевой трафик на уровне ядра Linux. Он широко используется для обеспечения безопасности и управления сетевыми потоками.