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

Межсетевой экран на основе 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 немедленно возвращается к нормальной работе.

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

Похоже, 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, чтобы узнать, сколько трафика вы действительно отправляете