Брандмауэр на базе ipfw замедляет работу веб-сервера Apache

У меня есть веб-сервер Apache, работающий на машине с FreeBSD 8.3.
На этой машине установлен брандмауэр ipfw со следующими правилами:

root@aigamedev:~# ipfw -a list
00005    0       0 deny ip from 67.212.xxx.xxx to any
00010  206   88422 allow ip from any to any via lo0
00015    0       0 deny ip from any to 127.0.0.0/8
00020    0       0 deny ip from 127.0.0.0/8 to any
00050    0       0 check-state
00060 5315 1358507 allow tcp from any to any established
00061    8     658 allow ip from any to any out keep-state
00070    0       0 allow icmp from any to any
00080    0       0 deny ip from me to me in recv re0
00085    0       0 deny tcp from any to any frag
00098    0       0 allow tcp from me to 83.64.xxx.xxx out established keep-state
00099    0       0 allow tcp from 83.64.xxx.xxx to me dst-port 22 in setup keep-state
00100    0       0 allow tcp from any to any dst-port 22 in setup keep-state
00110    0       0 allow tcp from any to any dst-port 22 out setup keep-state
00160    0       0 allow tcp from any to any dst-port 25 out setup keep-state
00180    0       0 allow tcp from any to any dst-port 53 out setup keep-state
00185    0       0 allow udp from any to any dst-port 53 out keep-state
00200 6750  661150 allow tcp from any to any dst-port 80,443 in setup keep-state
00210    0       0 allow tcp from any to any dst-port 80,443 out setup keep-state
00250    0       0 allow udp from any to any dst-port 123 out keep-state
00280    0       0 allow udp from any to any dst-port 67-68 out keep-state
00300    0       0 allow tcp from any to any dst-port 5222,5223,5269 in setup keep-state
00305    0       0 allow tcp from any to any dst-port 5222,5223,5269 out setup keep-state
00999   25    1716 deny ip from any to any
65535    0       0 deny ip from any to any

Как только я включаю эти правила брандмауэра, сервер Apache на той же машине "тормозит", то есть многие соединения зависают, загрузка страниц занимает не мс, а секунды. Это можно проверить из разных исходных сетей и клиентов. В server-status Я вижу, что многие (большинство) слотов Apache находятся в состоянии чтения и ничего не делают.

Когда я затем выключаю брандмауэр, сервер Apache немедленно возвращается к нормальной работе.

Есть идеи, что может быть не так с этими правилами брандмауэра?

2 ответа

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

Начните с комментирования всех запрещенных строк и убедитесь, что они работают с одинаковой скоростью. Затем медленно начните заново добавлять запрещающие строки, начиная с конца. Хотя эти правила утверждают, что они не срабатывают, это не всегда так надежно, как могло бы быть.

Вы разрешаете tcp/80 "новые" соединения? какой порт слушает apache и откуда следует принимать соединения?

эти правила не должны вызывать замедления:

00200 allow tcp from any to any dst-port 80,443 in setup keep-state
00210 allow tcp from any to any dst-port 80,443 out setup keep-stat

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

00300 allow tcp from any to any dst-port 5222,5223,5269 in setup keep-state
00305 allow tcp from any to any dst-port 5222,5223,5269 out setup keep-state

мой совет: иметь одну физическую / виртуальную машину на сервис..... запустите ntop, чтобы увидеть, сколько трафика вы на самом деле продвигаете

Другие вопросы по тегам