Каким образом можно настроить iptables, чтобы блокировать исходящие соединения?

Как я могу ограничить доступ к моему сайту так, чтобы SSH оставался работоспособным, но все другие внешние подключения (например, curl, wget, PHP) были заблокированы, чтобы обеспечить безопасность сервера?
  • 20 января 2024 г. 11:09
Ответы на вопрос 2
Для настройки iptables, чтобы блокировать исходящие соединения, вам необходимо создать правила, запрещающие трафик. В качестве примера можно использовать следующие команды:

```bash
# Устанавливаем политику по умолчанию для исходящих соединений на DROP
iptables -P OUTPUT DROP

# Разрешить исходящие соединения только для SSH (по умолчанию TCP порт 22)
iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT

# Разрешить исходящие соединения на порт 80 и 443 только для установленных соединений (например, ответы на запросы вашего сайта)
iptables -A OUTPUT -p tcp -m state --state ESTABLISHED --sport 80 -j ACCEPT
iptables -A OUTPUT -p tcp -m state --state ESTABLISHED --sport 443 -j ACCEPT

# Разрешить исходящий трафик на loopback-интерфейс (localhost)
iptables -A OUTPUT -o lo -j ACCEPT
```

Чтобы ограничить доступ к вашему сайту, но при этом оставить SSH доступным, вам нужно создать правила для iptables, которые разрешат входящие подключения на порт 22, но заблокируют остальные. Примеры команд для создания таких правил:

```bash
# Установить политику по умолчанию для входящих соединений на DROP
iptables -P INPUT DROP

# Разрешить входящие соединения для SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# Разрешить уже установленные соединения и соединения, связанные с ними
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Разрешить входящий трафик на loopback-интерфейс (localhost)
iptables -A INPUT -i lo -j ACCEPT

# Для запрета использования curl, wget, PHP для внешних запросов, заблокируйте исходящие соединения, как указано выше
```

Обратите внимание, что для правильной работы вашего сайта вам потребуется разрешить входящие соединения на порты, используемые веб-сервером (обычно 80 и 443 для HTTP и HTTPS соответственно). Если вы хотите исключить возможность использования curl, wget и PHP для отправки запросов с вашего сервера, вам нужно дополнительно настроить исходящий трафик так, чтобы запретить подключения к внешним ресурсам.

Также не забывайте, что после перезагрузки сервера все правила iptables, установленные таким способом, будут сброшены. Чтобы правила сохранялись после перезагрузки, необходимо использовать специальные утилиты или скрипты для сохранения и восстановления правил, такие как iptables-persistent на Debian/Ubuntu или service iptables save на CentOS/Red Hat.

Кроме того, перед применением любых правил iptables убедитесь, что они не заблокируют ваш удалённый доступ к серверу. Сделать это можно, временно установив политику по умолчанию в ACCEPT, тестируя правила, и только потом переключить на DROP.
Вам нужно открыть исходящие соединения с порта ssh (по умолчанию tcp 22) и поставить политику OUTPUT в DROP 
Либо просто открыть исходящие соединения с порта ssh (по умолчанию tcp 22) а вторым правилом сделать -A OUTPUT -j DROP
Похожие вопросы