собственно настраиваю файервол на веб сервере и возник вопрос нужно ли это правило или нет
iptables --insert FORWARD --protocol tcp --tcp-flags SYN,RST SYN --jump TCPMSS --clamp-mss-to-pmtu
Сервер именно веб и смотрит только в интернет, никаких локальных компьютеров нет. Находится на площадке провайдера.
Кроме того наткнулся на предепреждение не блокировать 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