Есть ли причина, по которой я хотел бы иметь
iptables -A INPUT -j REJECT
вместо того
iptables -A INPUT -j DROP
Как правило, используйте REJECT, если вы хотите, чтобы другой конец знал, что порт недоступен. Используйте DROP для соединений с хостами, которые вы не хотите, чтобы люди видели.
Обычно все правила для подключений внутри вашей локальной сети должны использовать REJECT. Для Интернета, за исключением идентификатора на определенных серверах, соединения из Интернета обычно ОТКЛЮЧЕНЫ.
Использование DROP делает соединение похожим на незанятый IP-адрес. Сканеры могут отказаться от продолжения сканирования адресов, которые кажутся незанятыми. Учитывая, что NAT может использоваться для перенаправления соединения на брандмауэре, наличие хорошо известной службы не обязательно указывает на наличие сервера на адресе.
Идентификатор должен быть передан или отклонен на любом адресе, предоставляющем услугу SMTP. Однако поиск идентификаторов серверами SMTP вышел из употребления. Существуют протоколы чата, которые также полагаются на работающую службу идентификации.
РЕДАКТИРОВАТЬ: при использовании правил DROP: - UDP-пакеты будут отброшены, и поведение будет таким же, как при подключении к порту без перегородки без обслуживания. - Пакеты TCP будут возвращать ACK / RST, который является тем же ответом, которым ответит открытый порт без службы на нем. Некоторые маршрутизаторы будут отвечать ACK / RST от имени серверов, которые не работают.
При использовании правил REJECT отправляется пакет ICMP, указывающий, что порт недоступен.
Разница в том, что цель REJECT отправляет ответ отклонения источнику, а цель DROP ничего не отправляет.
Это может быть полезно, например, для службы идент. Если вы используете REJECT, то клиентам не нужно ждать тайм-аута.
Подробнее об этом: http://www.linuxtopia.org/Linux_Firewall_iptables/x4550.html
Обычно вы хотите игнорировать зонды злоумышленников к определенным портам, под которыми я подразумеваю, что вы не хотите отправлять обратно «соединение отклонено». «В соединении отказано» означает: «здесь есть сервер» и, возможно, дает дополнительную информацию, тогда как сброс пакета не дает подсказок о версиях программного обеспечения, возможных уязвимостях или даже о том, что сервер прослушивает ваш IP-адрес.
Вышеупомянутое - одна из основных причин использовать DROP вместо REJECT.
Я вижу здесь много противоречивых ответов, и учитывая, что это первая статья в Google с правильными ключевыми словами; вот правильное объяснение.
Это просто:
DROP вообще ничего не делает с пакетом. Он не пересылается хосту, на него не отвечают. На странице руководства IPtables говорится, что пакет падает на пол, т.е. он ничего не делает с пакетом.
REJECT отличается от DROP тем, что он отправляет пакет обратно, но ответ такой, как если бы сервер расположен на IP-адресе, но не имеет порта в состоянии прослушивания. IPtables отправит RST / ACK в случае TCP или UDP, когда порт назначения ICMP недоступен.
Если вы пытаетесь полностью скрыть существование своей машины, -j DROP
подходит. Например, вы можете использовать это для создания черного списка.
Если вы пытаетесь скрыть тот факт, что порт открыт, вы должны имитировать поведение, которое произошло бы, если бы порт не был открыт:
-p tcp -j REJECT --reject-with tcp-reset
-p udp -j REJECT --reject-with icmp-port-unreachable
Если сканер портов видит, что несколько портов отбрасывают пакеты, в то время как большинство их отклоняет, он может предположить, что отброшенные пакеты находятся на портах, которые открыты, но скрыты.
Несмотря на множество правильных ответов, всего два цента:
Вот короткий PoC FW.IDS-DROP-vs-REJECT От меня к теме по поводу правил системы банов (firewall, IDS и т. д.).
Вскоре:
DROP
может использоваться для рецидивирующих злоумышленников, если запрещены все порты (похоже, что сервер не работает на стороне злоумышленника)REJECT --reject-with tcp-reset
это лучший выбор для блокировки нескольких портов, потому что он ведет себя как настоящий закрытый портDROP
и REJECT
(без tcp-reset
) подаст злоумышленнику "сигнал" о том, что что-то блокирует (чтобы он мог продолжить "атаку" в надежде предоставить необходимые данные в какой-то момент)Да, использовать DROP бессмысленно. Используйте REJECT.
Даже когда в правиле указано «DROP», система все равно отвечает на входящий SYN с помощью TCP RST / ACK - это поведение по умолчанию для портов, на которых не работают службы. (tcpdump и др. не регистрируют это.)
Если служба запущена, SYN встречается с TCP SYN / ACK.
Поскольку DROP не отвечает как обычно с TCP SYN / ACK, а вместо этого с RST / ACK, ваше правило DROP будет рекламировать ваш брандмауэр, и сканеры портов будут знать, что вы что-то брандмауэр, и могут продолжать забивать вас в надеждах. перехвата вашего брандмауэра.
Теперь Nmap может сообщать "отфильтровано" вместо "закрыто", например:
$ nmap localhost
Starting Nmap 6.40 ( http://nmap.org ) at 2018-03-14 00:21 SAST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000060s latency).
Not shown: 986 closed ports
PORT STATE SERVICE
21/tcp open ftp
53/tcp open domain
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 1.60 seconds
$ iptables -I INPUT -p tcp --dport 1111 -j DROP
$ nmap localhost
Starting Nmap 6.40 ( http://nmap.org ) at 2018-03-14 00:21 SAST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000060s latency).
Not shown: 986 closed ports
PORT STATE SERVICE
21/tcp open ftp
53/tcp open domain
80/tcp open http
1111/tcp filtered lmsocialserver
Nmap done: 1 IP address (1 host up) scanned in 1.60 seconds
$ iptables -D INPUT 1
Таким образом, единственная «невидимая» установка брандмауэра - это та, где выделенное устройство находится между вашими устройствами и только выборочно перенаправляет порты.
Если вы действительно хотите возиться с базовыми сканерами, вы можете использовать TARPIT tcp-соединения, которые устанавливают для окна TCP значение 0, чтобы никакие данные не могли передаваться после открытия соединения, игнорируя запросы на закрытие соединения, что означает, что сканер должен ждать для истечения времени ожидания соединения, если необходимо. Но злоумышленнику легко обнаружить это и сократить время ожидания.
Учитывая все обстоятельства, вам, вероятно, лучше всего просто использовать REJECT - или установить выделенное устройство переадресации портов между вашим сервером и Интернетом.
Или просто запускайте на своих компьютерах с выходом в Интернет службы, которые не требуют брандмауэра.
Как правило, REJECT лучше всего подходит для веб-серверов, так как какая бы служба ни пыталась получить к ней доступ (скорее всего, вы), быстро получите ответ, и пользователи или другие службы не будут заставлять себя ждать, гадая, есть ли сбой в сети.