Я думаю, что почти завершил настройку iptables в моей системе CentOS 5.3. Вот мой сценарий ...
# Establish a clean slate
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F # Flush all rules
iptables -X # Delete all chains
# Disable routing. Drop packets if they reach the end of the chain.
iptables -P FORWARD DROP
# Drop all packets with a bad state
iptables -A INPUT -m state --state INVALID -j DROP
# Accept any packets that have something to do with ones we've sent on outbound
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# Accept any packets coming or going on localhost (this can be very important)
iptables -A INPUT -i lo -j ACCEPT
# Accept ICMP
iptables -A INPUT -p icmp -j ACCEPT
# Allow ssh
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Allow httpd
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# Allow SSL
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# Block all other traffic
iptables -A INPUT -j DROP
Для контекста этот компьютер является хостом веб-приложения Virtual Private Server.
В предыдущий вопрос, Ли Б сказал, что я должен «немного заблокировать ICMP». Почему бы просто не заблокировать его? Что произойдет, если я это сделаю (что плохого случится)?
Если мне нужно не блокировать ICMP, как я могу заблокировать его еще больше?
ICMP - это намного больше, чем «traceroute» и «ping». Он используется для обратной связи при запуске DNS-сервера (порт недоступен), который на современном DNS-сервере может фактически помочь выбрать другую машину для более быстрого запроса.
ICMP также, как упоминалось выше, используется для определения MTU пути. Скорее всего, ваша ОС устанавливает "DF" (не фрагментировать) для TCP-пакетов, которые она отправляет. Ожидается, что ICMP вернет пакет «требуется фрагментация», если что-то на пути не сможет обработать этот размер пакета. Если вы заблокируете весь ICMP, ваша машина будет вынуждена использовать другие резервные механизмы, которые в основном используют тайм-аут для обнаружения «черной дыры» PMTU и никогда не будут правильно оптимизироваться.
Кроме того, вы должны спросить себя, почему вы хотите заблокировать ICMP. Что конкретно вы пытаетесь здесь предотвратить? Совершенно очевидно, что вы не понимаете, для чего используется ICMP, что довольно часто. Я был бы крайне осторожен, блокируя то, чего вы не совсем понимаете.
Чтобы усложнить понимание этого вопроса, во многих распространенных книгах по брандмауэрам написано «блокировать ICMP» - ясно, что их авторы никогда не читали RFC и им приходилось решать проблемы, связанные с такими советами. Блокировать все ICMP - плохой совет.
Теперь ограничение скорости тоже может навредить. Если ваша машина занята или даже если это не так, вы можете получить хороший объем трафика ICMP. Мой веб-сервер, вероятно, получает около 10-100 пакетов ICMP в минуту, большинство из которых - обнаружение PMTU. Даже если кто-то решит атаковать мой сервер с помощью пакетов ICMP какого-либо типа, на самом деле это не так уж важно. Если ваша машина принимает даже одно TCP-соединение (ssh, http, mail и т. Д.), Скорее всего, это более серьезный вектор атаки, чем когда-либо будет неправильно понятый ICMP.
ICMP используется для ряда функций диагностики (например, ping, traceroute) и управления сетью (например, обнаружение PMTU). Неизбирательная блокировка ICMP вызывает у других людей всевозможную изжогу, и если вы точно не знаете, что делаете, вам следует оставить это в покое.
Я никогда не понимал, почему люди синхронизируют ICMP, поскольку, как было сказано выше, он вызывает головную боль только у вас и других. Вы можете определить, включен ли хост достаточно легко, и до тех пор, пока он достаточно ограничен, чтобы не использоваться в качестве DOS, я никогда не слышал никаких веских причин для его блокировки. (Если кто-то может назвать причину, напишите)
вы можете просто попробовать ограничить icmp таким образом, чтобы его нельзя было использовать в качестве DOS-атаки. но существует слишком много инструментов для устранения неполадок, таких как ping, mtr (я забыл об эквиваленте Windows), traceroute (tracert), которые используют icmp. бросать их полностью - глупо. Это хороший способ проверить, работает ли ваш экземпляр, даже если вы не можете использовать telnet ни на одном из портов.
--limit 10/second
to your icmp rule(s) is probably a decent limit given just how much a computer can actually handle.Вот альтернативная точка зрения в духе того, что предлагает теория безопасности. Другие авторы правы в том, что методы обеспечения безопасности часто чрезмерны, но для многих из них есть хорошая основа.
Согласно теории безопасности, вы включаете только ТО, ЧТО ВАМ НУЖНО. Другие вещи (которые могут быть полезны - например, ответы ping) могут использоваться злоумышленником для обзора вашей системы или, возможно, в качестве вектора атаки для какой-то еще не обнаруженной уязвимости.
Итак, глядя на типы сообщений ICMP, что вам НУЖНО для нормальной, правильной работы вашей системы?
...и так далее. Если вы действительно хотите понять это, узнайте о различных типах ICMP и о том, для чего они нужны. В статья в Википедии это хорошая отправная точка.
На практике действительно уродливым является перенаправление; если вы хотите сделать что-то быстрое и полезное, заблокируйте это и позвольте остальному.
Я бы добавил, что отслеживание соединений IPtables позволит возвращать соответствующие пакеты ICMP для активных соединений. Так что, если вы используете conntrack, вы сможете заблокировать большую часть входящих ICMP, пока вы принимаете РОДСТВЕННЫЕ пакеты (до того, как вы заблокируете ICMP в своем наборе правил).
Это полезный инструмент диагностики для решения проблем с сетевым подключением.
Это также позволяет вам использовать соединения в другом месте в Интернете, которые используют меньшие MTU, чем в вашей сети. Если вы пытаетесь отправить пакет куда-то, который слишком велик и не может быть фрагментирован, устройство отбрасывает пакет и отправляет пакет, необходимый для фрагментации ICMP, обратно отправителю. Если вы отбрасываете все пакеты ICMP, вы теряете их, и в вашей сети происходят странные вещи.
Настоящий вопрос: зачем блокировать ICMP? Что вы получаете? Просто установите хорошие правила фильтрации на границе и перед вашими ценными активами.
ping - хороший диагностический инструмент, вы действительно захотите, чтобы он у вас когда-нибудь был. Я использую эти:
-A icmp_packets -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A icmp_packets -p icmp -m icmp --icmp-type 11 -j ACCEPT
вы также можете захотеть задросселировать его.
В настоящее время даже ограничение количества ICMP-пакетов на стороне сервера может создать головную боль при DDoS-атаках. Атаки в основном выполняются путем отправки огромных окон ICMP-запросов на один сервер, и если сервер пытается ответить на каждый из них, угадайте, что происходит?
Главное, что у нас есть командный сервер, который получает плохие пакеты каждый божий день, за два месяца было несколько дней, когда у нас было «свободное время». Что мы сделали, так это полностью отключили / заблокировали ответы ICMP, у нас нет DNS-серверов на сервере, нет NTP-серверов, нет почтовых серверов, нет FTP-серверов, только два apache и teampeak. все порты, которые не нужны для служб, отключены. Мы планируем заблокировать даже ssh и оставить открытыми только два порта. На сегодняшний день существует 21к (!) Постоянных банов.
Ситуация такова, что злоумышленники используют в основном туннелирование ICMP, и несколько действительно интересных строк журнала было обсуждено с администраторами серверов, и они сказали, что у них есть запросы ICMP сервера, поэтому злоумышленники использовали это, чтобы туннелировать атаку через них и атаковать нас. Звучит странно, но это правда.
Если вам не нужна диагностика вашего сервера, и если вы можете полностью блокировать запросы или фильтровать их, например, чтобы сбросить огромные окна, сделайте это. Я также предлагаю вам полностью заблокировать: Китай, Корею, Таиланд, Турцию, потому что большинство IP-адресов поступает оттуда. У меня были целые списки этих стран в инетнуме, но почти каждый день оттуда приходят новые.
Я говорю то, что делаю, если вы не согласны - не делайте этого. Просто как тот. Удачи
Как минимум, вы должны разрешить передачу icmp типов 3 (пункт назначения недоступен), 4 (блокировка источника) и 11 (время истекло). Все эти типы используются для решения сетевых проблем и не подлежат фильтрации.
iptables -A INPUT -p icmp -m icmp --icmp-type 3 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 4 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT
(Тип подавления исходного кода в настоящее время устарел, но не помешает открыть его)
Я разрешаю трафик ICMP из локальной интрасети, блокирую его из Интернета. Таким образом, мой сервер практически невидим в сети (он отвечает только на нестандартный порт SSH).
iptables -I INPUT 7 -d 208.180.X.X -p icmp --icmp-type 8 -j DROP
iptables -I INPUT 8 -d 208.180.X.X -p icmp --icmp-type 0 -j DROP
iptables -I INPUT 9 -d 208.180.X.X -p icmp --icmp-type 11 -j DROP
Это вставляет его после стандартной обратной петли, установленного, белого списка LAN, белого списка провайдера VOIP и ACCEPT порта SSH. Я разрешаю трафик, который хочу, а затем делаю все возможное, чтобы сервер оставался невидимым для остального мира.