LINUX.ORG.RU
ФорумAdmin

iptables фрагментация пакетов

 ,


0

1

собственно настраиваю файервол на веб сервере и возник вопрос нужно ли это правило или нет

 
iptables --insert FORWARD --protocol tcp --tcp-flags SYN,RST SYN --jump TCPMSS --clamp-mss-to-pmtu
проблему погуглил, понял, что из за разницы mtu может не стыковаться, но вопрос нужно ли это на веб сервере или нет, так как очевидно, что есть еще роутеры провайдера может там выравнивается ? или таки надо ?

Сервер именно веб и смотрит только в интернет, никаких локальных компьютеров нет. Находится на площадке провайдера.

Кроме того наткнулся на предепреждение не блокировать icmp трафик именно изучая эту проблему -- НЕ ДЕЛАЙТЕ ТАК, НЕ БЛОКИРУЙТЕ ICMP трафик! Как итог - соединение между хостами устанавливается, но пакеты от одного хоста к другому не доставляются, отбрасяваясь где-то по пути...

https://www.opennet.ru/base/net/pppoe_mtu.txt.html

в связи с чем вопрос надо таки разрешать весь ICMP ? сейчас только для пингов правило --icmp-type 8 -j ACCEP

погуглил еще и я так понимаю что FORWARD мне не нужно настраивать, кроме того его весь можно запретить.

А вот по поводу icmp трафика лучшеми будут вот такие правила:

# Allow incoming Path MTU Discovery (ICMP destination-unreachable/fragmentation-needed)
iptables -A INPUT -p icmp --icmp-type 3/4 -m state --state NEW -j ACCEPT
# Allow incoming request to decrease rate of sent packets (ICMP Source Quench)
iptables -A INPUT -p icmp --icmp-type 4 -m state --state NEW -j ACCEPT
# Allow and throttle incoming ping (ICMP Echo-Request).
iptables -A INPUT -p icmp --icmp-type 8 -m state --state NEW -m limit --limit 2/s --limit-burst 5 -j ACCEPT

соответственно для IPV6 судя по этому посту https://www.jethrocarr.com/2013/02/09/ip6tables-ipv6-icmp-vs-icmp/

должно быть -p ipv6-icmp, вместо -p icmp, то есть:

ip6tables -A INPUT -p ipv6-icmp --icmp-type 3/4 -m state --state NEW -j ACCEPT
ip6tables -A INPUT -p ipv6-icmp --icmp-type 4 -m state --state NEW -j ACCEPT
ip6tables -A INPUT -p ipv6-icmp --icmp-type 8 -m state --state NEW -m limit --limit 2/s --limit-burst 5 -j ACCEPT

Что скажут знатоки ?

И ЕЩЕ TTL expired:

iptables -A INPUT -p icmp --icmp-type 11/0 -j ACCEPT
Вот это вообще не понял для чего и с чем едят.

попутно вопрос что еще из бест практикс так сказать для web сервера будет полезно включить. Сейчас правила такие:

###########################################################
# IPV4
# сбрасываем правила
iptables -F
# защита от простых атак
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
# разрешаем коннект на localhost
iptables -A INPUT -i lo -j ACCEPT
# http
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
# HTTPS
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
# SSH по умолчанию 22, но мы поменяли на $PORT
iptables -A INPUT -p tcp -m tcp --dport $PORT -j ACCEPT
# ntp
iptables -I INPUT -p udp --dport 123 -j ACCEPT
# ping ...
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
# Разрешаем получать уже открытые соединения
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# подключение списка blacklist
iptables -A INPUT -m set --match-set blacklist src -j DROP
iptables -A INPUT -m set --match-set web_black_list src -j DROP
# разрешаем все исходящие соединения
iptables -P OUTPUT ACCEPT
# запрещаем все что не разрешено для входищих
iptables -P INPUT DROP

###########################################################
# IPV6
ip6tables -F

ip6tables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
ip6tables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
ip6tables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
ip6tables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
ip6tables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# ping ...
ip6tables -A INPUT -p icmp --icmp-type 8 -j ACCEPT

ip6tables -P OUTPUT ACCEPT
ip6tables -P INPUT DROP

iptables --insert FORWARD --protocol tcp --tcp-flags SYN,RST SYN --jump TCPMSS --clamp-mss-to-pmtu

Именно это правилно на web сервере смысла не имеет, потому что FORWARD'а там не должно быть. Да и быть оно должно в таблице mangle.

Что делать с icmp решать вам, лично я не вижу вобще смысла как-то фильтровать icmp, если будут DOSить icmp-пакетами, тогда и писать правила.

Вот это вот:

# подключение списка blacklist
iptables -A INPUT -m set --match-set blacklist src -j DROP
iptables -A INPUT -m set --match-set web_black_list src -j DROP
# запрещаем все что не разрешено для входищих
iptables -P INPUT DROP
смыла не имеет, раз у вас общая политика разрешать только что нужно, а всё остальное DROP, то правила явно лишние.

mky ★★★★★ ()
Ответ на: комментарий от mky

спасибо, по поводу блек листов, это в связке с ipset использовать буду, для блокировки нежалательных хостов. То есть 80 то открыт, но не все желанные гости даже там.

с FORWARD понятно, ну тогда стоит переформулировать вопрос, корректны ли эти правили и будут ли они разрешать то что нужно

# Allow incoming Path MTU Discovery (ICMP destination-unreachable/fragmentation-needed)
iptables -A INPUT -p icmp --icmp-type 3/4 -m state --state NEW -j ACCEPT
# Allow incoming request to decrease rate of sent packets (ICMP Source Quench)
iptables -A INPUT -p icmp --icmp-type 4 -m state --state NEW -j ACCEPT
# Allow and throttle incoming ping (ICMP Echo-Request).
iptables -A INPUT -p icmp --icmp-type 8 -m state --state NEW -m limit --limit 2/s --limit-burst 5 -j ACCEPT
# TTL expired
iptables -A INPUT -p icmp --icmp-type 11/0 -j ACCEPT
luk911 ()
Ответ на: комментарий от luk911

Да будут. Правда, некоторые ещё разрешают type 12, не знаю, используется ли он где на самом деле.

mky ★★★★★ ()
Ответ на: комментарий от luk911

Я имел в виду, что некоторые админы разрешают icmp type 12, хотя, вроде всё нормально работает и без него.

mky ★★★★★ ()
Ответ на: комментарий от mky

нашел описание всех вариантов

0 — echo reply (echo-ответ, пинг) 
3 — destination unreachable (адресат недосягаем) 
4 — source quench (подавление источника, просьба посылать пакеты медленнее) 
5 — redirect (редирект) 
8 — echo request (echo-запрос, пинг) 
9 — router advertisement (объявление маршрутизатора) 
10 — router solicitation (ходатайство маршрутизатора) 
11 — time-to-live exceeded (истечение срока жизни пакета) 
12 — IP header bad (неправильный IPзаголовок пакета) 
13 — timestamp request (запрос значения счетчика времени) 
14 — timestamp reply (ответ на запрос значения счетчика времени) 
15 — information request (запрос информации) 
16 — information reply (ответ на запрос информации) 
17 — address mask request (запрос маски сети) 
18 — address mask reply (ответ на запрос маски сети)

12 вроде ничего страшного, меня вот смутила запись --icmp-type 3/4 это как ? может через запятую или так и должно быть ?

luk911 ()
Ответ на: комментарий от luk911

нашел описание destination unreachable (3) — destination unreachable (адресат недосягаем). Код 3/4 уведомляет о необходимости фрагментации сообщения, отправитель получает его, меняет свой MSS на еще более меньший.

luk911 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.