Как закрыть доступ к порту извне, оставив его доступным локально?

Каким образом можно полностью скрыть порт с помощью iptables, чтобы он не был обнаружен при сканировании nmap после его закрытия? Я использовал команду iptables -A INPUT -p tcp --dport 8006 -j DROP, и хочу узнать, есть ли другие способы достижения этой цели, например, использование команды reject.
  • 9 января 2024 г. 16:18
Ответы на вопрос 2
Чтобы закрыть доступ к порту извне, но оставить его доступным локально, можно использовать фаервол iptables на Linux. Команда, которую вы использовали (`iptables -A INPUT -p tcp --dport 8006 -j DROP`), добавляет правило, которое отбрасывает входящие пакеты на порт 8006. Однако, отбрасывание пакетов (DROP) может быть замечено при сканировании портов, потому что сканер nmap не получит никакого ответа от порта и отметит его как filtered.

Чтобы скрыть порт более эффективно, можно использовать опцию REJECT вместо DROP, добавив немедленный ответ об ошибке в отправителю. Это может заставить сканер отметить порт как closed, а это менее подозрительно, чем filtered.

Пример команды, которая отклоняет пакеты с уведомлением отправителя об ошибке:

```bash
iptables -A INPUT -p tcp --dport 8006 -j REJECT --reject-with tcp-reset
```

Однако, если ваша цель полностью скрыть порт, то возможно это сделать реализовать с помощью более комплексных правил, пример:

1. Запретите все входящие соединения по умолчанию:

```bash
iptables -P INPUT DROP
```

2. Разрешите исключительно входящие соединения от локального адреса (localhost):

```bash
iptables -A INPUT -i lo -j ACCEPT
```

3. Разрешите входящие соединения на указанный порт только если они исходят с локального компьютера:

```bash
iptables -A INPUT -p tcp --dport 8006 -s 127.0.0.1 -j ACCEPT
```

Эти правила сделают порт доступным только локально и невидимым для внешних хостов. Злоумышленник, сканирующий порты, не сможет определить открыт ли порт, так как его пакеты будут полностью отброшены без уведомления.

Важно помнить, что по-умолчанию при использовании DROP сканеры типа nmap могут определить, что порт находится за фильтром. Если использовать REJECT с опцией `--reject-with tcp-reset`, порт будет обнаруживаться, но будет казаться закрытым, потому что сканер получит явный отклик о том, что соединение не может быть установлено.

Всегда проверяйте и применяйте правила iptables аккуратно, чтобы не блокировать легитимный трафик или важные службы на вашем сервере.
Вам из интернета нужно закрыть порт? Так и дропайте его на нужном интерфейсе. 
Drop и reject одно и тоже, но reject уведомляет отправителя о блокировке. Reject обычно используют в своей внутренней сети, drop на внешней.
Похожие вопросы