Назад | Перейти на главную страницу

Iptables не разрешает запросы ICMP с удаленных машин

Я настроил свой Linux-маршрутизатор со следующими правилами iptables

iptables --list-rules
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A FORWARD -i vmbr0 -o eth2 -j ACCEPT 
-A FORWARD -i vmbr0 -o eth1 -j ACCEPT 
-A FORWARD -i eth1 -o vmbr0 -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A FORWARD -i eth2 -o vmbr0 -m state --state RELATED,ESTABLISHED -j ACCEPT 

eth1 и eth2 - это WAN-интерфейсы. vmbr0 - моя частная сеть. Запросы ping на ip-адрес eth2 с удаленного компьютера отбрасываются, как и запросы http.

Как я могу это исправить?

Если вы хотите разрешить запрос ICMP ping, попробуйте следующее:

iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -d <eth2_ip> -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 0 -s <eth2_ip> -d 0/0 -m state --state ESTABLISHED,RELATED -j ACCEPT
  • 8 - код для эхо-запроса
  • 0 - код для эхо-ответа

Если брандмауэр хоста не блокирует никакие пакеты ICMP, проверьте параметр ядра, относящийся к ICMP.

$ sysctl net.ipv4.icmp_echo_ignore_all
net.ipv4.icmp_echo_ignore_all = 0

Обычно это устанавливается в /etc/sysctl.conf; если этот хост находится в Интернете, вы обычно не хотите, чтобы он отвечал на эхо-запросы (ICMP).

Также обратите внимание, что ICMP не является ни TCP, ни UDP, поэтому вы должны разрешить его с другими правилами, чем для TCP или UDP.

В целях отладки я бы использовал tcpdump для прослушивания сетевого трафика на хосте - чтобы увидеть, какие пакеты видны, - а также выполнить эту команду:

watch -d iptables -L -v -n

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

Похоже, что каждое указанное вами правило является правилом ПРИНЯТЬ, включая значения по умолчанию. Исходя из этого, ваша конфигурация не должна отбрасывать или отклонять какой-либо пакет. Я думаю, ваша проблема в другом.