собственно настраиваю файервол на веб сервере и возник вопрос нужно ли это правило или нет
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