ESXi 6.7: заблокувати ICMP неможливо — доводимо практично

💡 Усі статті, обговорення, новини про DevOps — в одному місці. Приєднуйтесь до DevOps спільноти!

«Досліджував питання разом з Claude (Anthropic) — перевірили всі можливі підходи на реальному хості»

Виникло просте завдання — заблокувати ping на VMkernel хості ESXi 6.7 який дивиться в інтернет, але дозволити з певних IP. Здавалося б, стандартна задача. Але ні.

Ось як ми до цього дійшли.


Середовище

  • ESXi 6.7, один VMkernel інтерфейс vmk2 назовні
  • Доступ по SSH

Що перепробували

Firewall ruleset — перше що спадає на думку:

esxcli network firewall ruleset list

Біля 40 правил — SSH, vSphere, NFC і т.д. ICMP нема взагалі. При цьому:

esxcli network firewall get
# Default Action: DROP

DROP за замовчуванням — але ping все одно проходить. Значить ICMP обробляється до firewall, на рівні VMkernel.

XML ruleset — спробували знайти підтримку ICMP в конфігах:

grep -r "icmp" /etc/vmware/

Тільки в /etc/protocols як визначення протоколу. У firewall правилах — тільки TCP та UDP.

iptables — звичний інструмент:

iptables -L
# -sh: iptables: not found

В ESXi його просто немає.

vsish sysctl — пішли глибше в VMkernel параметри:

vsish -e ls /net/tcpip/instances/defaultTcpipStack/sysctl/ | grep -i icmp
# _net_inet_icmp_bmcastecho
# _net_inet_icmp_tstampreply
# _net_inet_icmp_reply_from_interface

Три параметри — але жоден не відповідає за відключення echo. Параметра icmp_echo_ignore_all як у Linux — не існує.

Перевірили статистику:

vsish -e get /net/tcpip/instances/defaultTcpipStack/stats/icmp
# reflect: 3134562

reflect — VMkernel просто відбиває всі ping на рівні мережевого стека, до будь-яких фільтрів.

dvFilter — знайшли агента dvfilter-generic-fastpath, теоретично міг би фільтрувати ICMP:

python3 /bin/netdbg.py vswitch eth_filter get
# ImportError: No module named 'nsx'

Потребує NSX якого немає.

vmkctl Python API:

grep -i "PROTO_TYPE" /lib64/python3.5/vmkctl.py
# IPSEC_PROTO_TYPE_ICMP6 ← є тільки IPv6!

IPv4 ICMP в API просто відсутній.


Підсумок

МетодРезультат
Firewall rulesetНемає ICMP
XML правилаТільки TCP/UDP
iptablesВідсутній
vsish sysctlНемає потрібного параметра
dvFilterПотребує NSX
vmkctlТільки ICMP6

ESXi 6.7 заблокувати ICMP на VMkernel інтерфейсі штатними засобами неможливо. ICMP обробляється на рівні ядра до будь-яких фільтрів.

Якщо хтось знає робоче рішення — буду радий почути в коментарях.


*Всі команди виконані на реальному продакшен хості.*

👍ПодобаєтьсяСподобалось2
До обраногоВ обраному1
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Розмішення в периметрі за CheckPoint-ом, і всі забаганки регулюються ним, звісно, якщо вся фізика серверної ваша.

CheckPoint — хороше рішення, якщо є бюджет і вся інфраструктура ваша. В даному випадку завдання було знайти рішення штатними засобами ESXi без додаткового обладнання.

При цьому треба розуміти ліміти ваших забаганок, де він використовувався, були теж інциденти

Дякую за думку! Питання дослідження було чому ESXi не може блокувати ICMP стандартними засобами. Думаю це не випадковість, а свідоме рішення VMware

гіпервізор має бути в захищеній мережі в принципі

icmp блокувати погана ідея загалом, бо він обслуговує не лише echo

На рахунок що робити, на цій древній версії навіть не знаю чи є сенс шукати рішення, але спробуй не весь icmp а конкретно echo. Можна ще спробувати фільтрувати egress.

Але це все в принципі задача файрвола мережі де гіпервізор живе, а не гіпервізора

Якщо дивитися очима людини, яка пам’ятає Cisco IOS 11.x, Ping of Death, Smurf, LAND, Teardrop та інші класичні історії, бажання відключити ICMP на будь-якому критичному вузлі виглядає цілком природним. Це не стільки захист від сучасного експлойта, скільки принцип мінімізації поверхні атаки.

Погоджуюсь, що в ідеалі гіпервізор має бути за файрволом. Але в даному випадку хост дивиться напряму в інтернет — це реальна ситуація де файрвола мережі немає. Тому і шукали рішення на рівні хоста. Спробуємо egress фільтрацію — дякую за підказку!

Підписатись на коментарі