URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 94516
[ Назад ]

Исходное сообщение
"Gрошу помощи по настройке ipfw"

Отправлено UrfinJuezz , 25-Мрт-13 19:44 
Добрый день!
Сразу скажу что я не админ, и в настройки FreeBSD полез исключительно потому, что остальным у нас или лень или некогда, поэтому не судите строго и поправьте если я что-то говорю неправильно.
Прошу подсказать что я делаю неправильно.
Есть сервер на FreeBSD на котором крутится apache+nginx. Сетевой интерфейс всего 1, три IP адреса, 2 внешних, один внутренний. ngnix слушает два внешних ip и перенаправляет запросы на apache по 127.0.0.1:80.
Без файрвола всё работает, все сайты и поддомены доступны и работают. Но встала задача настроить файрвол для фильтрации нежелательного трафика. Необходимо разрешить трафик на 80ом порту на два внешних IP и все соединения с внутренних IP и оставить возможность банить по IP. Пишу следующий конфиг:
#!/bin/sh

fwcmd="/sbin/ipfw"
NetIn="192.168.1.0/24"

$fwcmd table 1 add xxx.xxx.xxx.136
$fwcmd table 1 add xxx.xxx.xxx.133

$fwcmd -f flush

$fwcmd add 00010 deny all from table\(2\) to me

$fwcmd add 00050 check-state

$fwcmd add 00100 allow all from any to any via lo0
$fwcmd add 00110 allow all from any to any via pflog0

$fwcmd add 00150 allow tcp from any to table\(1\) 80 via em0 limit src-addr 2

$fwcmd add 00200 deny icmp from any to any in icmptype 9,13,14,15,16,17
$fwcmd add 00300 allow icmp from any to any

$fwcmd add 00400 allow all from me to any

$fwcmd add 00500 allow all from $NetIn to me keep-state via em0
$fwcmd add 65534 deny log all from any to any via em0

после запуска доступны только сайты и поддомены расположенные на первом ip из таблицы, второй ip пингуется нормально, но сайт не работает. В чём ошибка и как её исправить? Заранее спасибо.


Содержание

Сообщения в этом обсуждении
"Gрошу помощи по настройке ipfw"
Отправлено Miha , 26-Мрт-13 01:52 
> Добрый день!
> Сразу скажу что я не админ

  А кто вы? Вахтер, разносчик корреспонденции, блондинка на ресепшене, etc?
  Давайте заниматься каждый своим делом!


"Gрошу помощи по настройке ipfw"
Отправлено UrfinJuezz , 26-Мрт-13 07:55 
>> Добрый день!
>> Сразу скажу что я не админ
>   А кто вы? Вахтер, разносчик корреспонденции, блондинка на ресепшене, etc?
>   Давайте заниматься каждый своим делом!

Я разработчик, который пишет те самые сайты которые крутятся на этом серваке, и как выясняется - это именно моё дело, потому что не дизайнеру же этим заниматься? И не спецу по БД. Поэтому давайте не будем выяснять кто чем должен заниматься. А если уж Вам так не хочется отвечать, будте последовательны, не отвечайте вообще ничего.


"Gрошу помощи по настройке ipfw"
Отправлено PavelR , 26-Мрт-13 08:32 
>>> Добрый день!
>>> Сразу скажу что я не админ
>>   А кто вы? Вахтер, разносчик корреспонденции, блондинка на ресепшене, etc?
>>   Давайте заниматься каждый своим делом!
> Я разработчик, который пишет те самые сайты которые крутятся на этом серваке,
> и как выясняется - это именно моё дело, потому что не
> дизайнеру же этим заниматься? И не спецу по БД. Поэтому давайте
> не будем выяснять кто чем должен заниматься. А если уж Вам
> так не хочется отвечать, будте последовательны, не отвечайте вообще ничего.

даже отдельный "Спец по БД" - есть, а админа нету? какая странная компания.
Интересно, чем же занимается спец по БД ? 24 часа в сутки занимается созданием индексов ?

...наверное спец по БД тоже делает дизайны, ну не программистам же этим заниматься?


---------

Ну да ладно.

1)

$fwcmd add 00150 allow tcp from any to table\(1\) 80 via em0 limit src-addr 2

поясните, зачем тут "limit src-addr 2" ?

2) приведите вывод "ipfw sh"

3) " В чём ошибка и как её исправить?"  - Воспользуйтесь tcpdump. Посмотрите трафик на интерфейсах

  tcpdump -ni em0 host xxx.xxx.xxx.133
  tcpdump -ni em1 host xxx.xxx.xxx.133


"Gрошу помощи по настройке ipfw"
Отправлено PavelR , 26-Мрт-13 08:35 
>>> Добрый день!
>>> Сразу скажу что я не админ
>>   А кто вы? Вахтер, разносчик корреспонденции, блондинка на ресепшене, etc?
>>   Давайте заниматься каждый своим делом!
> Я разработчик, который пишет те самые сайты которые крутятся на этом серваке,
> и как выясняется - это именно моё дело, потому что не
> дизайнеру же этим заниматься? И не спецу по БД. Поэтому давайте
> не будем выяснять кто чем должен заниматься. А если уж Вам
> так не хочется отвечать, будте последовательны, не отвечайте вообще ничего.

пункт 4.

Я тут вдумчиво прочитал ваш исходный посыл.....

просто мягко и ненавязчиво скажу:

у вас всё изначально неправильно, например вы путаете терминологию

"разрешить трафик на 80ом порту на два внешних IP"
и
"разрешить трафик на 80ом порту _c двух внешних IP_"


Вот поэтому у вас ничего не получается (в том числе и потому что вы /пока еще/ не админ).


"Gрошу помощи по настройке ipfw"
Отправлено PavelR , 26-Мрт-13 08:46 
>>> Добрый день!
>>> Сразу скажу что я не админ
>>   А кто вы? Вахтер, разносчик корреспонденции, блондинка на ресепшене, etc?
>>   Давайте заниматься каждый своим делом!
> Я разработчик, который пишет те самые сайты которые крутятся на этом серваке,
> и как выясняется - это именно моё дело, потому что не
> дизайнеру же этим заниматься? И не спецу по БД. Поэтому давайте
> не будем выяснять кто чем должен заниматься. А если уж Вам
> так не хочется отвечать, будте последовательны, не отвечайте вообще ничего.

пункт #5)

"Кто везет, на том и едут"


Предположим, что на сервере сбойнет жесткий диск, всё упадет и сайты не будут работать вообще. (ну, потому что что такое рейд - никто не знает, или может быть рейд есть, но уже года два работает на половинке зеркала, или три винта из RAID6 + spare уже два года назад как выпали, а мониторинга опять же нет) Кто будет заниматься вопросом ? Программист, "он же там что-то (файрволл) настраивал".

Потом окажется, что восстановлению не подлежит. А бэкапа тоже нет... Кто виноват, что бэкапа нет? Программист, "он же сервером у нас занимается".


"Gрошу помощи по настройке ipfw"
Отправлено UrfinJuezz , 26-Мрт-13 11:23 
>просто мягко и ненавязчиво скажу:
>у вас всё изначально неправильно, например вы путаете терминологию

Об этом я и говорил, спасибо. Да, скорее всего путаю.

>$fwcmd add 00150 allow tcp from any to table\(1\) 80 via em0 limit src-addr 2
>поясните, зачем тут "limit src-addr 2" ?

Один из сайтов часто пытаются парсить, таким образом хочу откинуть самых наглых и навязчивых.


>2) приведите вывод "ipfw sh"

# ipfw show
00010     0        0 deny ip from table(2) to me
00050     0        0 check-state
00100 30174 26886471 allow ip from any to any via lo0
00110     0        0 allow ip from any to any via pflog0
00150 14806 12695328 allow tcp from any to table(1) dst-port 80 via em0 limit src-addr 2
00200     0        0 deny icmp from any to any in icmptypes 9,13,14,15,16,17
00300     0        0 allow icmp from any to any
00400   103   104195 allow ip from me to any
00500   112     9270 allow ip from 192.168.1.0/24 to me via em0 keep-state
65534    99    14032 deny log ip from any to any via em0
65535    11     2855 deny ip from any to any

Это за секунд за 10, дольше сейчас не могу держать сайт недоступным.

>3) " В чём ошибка и как её исправить?"  - Воспользуйтесь tcpdump. Посмотрите трафик на интерфейсах

Кусок вывода tcpdump на em0 с включенным файрволлом:
09:59:30.793023 IP xxx.xxx.xxx.133.80 > 93.80.66.53.3171: Flags [.], ack 1076, win 65535, length 0
09:59:30.839036 IP 188.72.80.220.37122 > xxx.xxx.xxx.133.80: Flags [.], ack 24728, win 501, options [nop,nop,TS val 4292474511 ecr 3416127242], length 0
09:59:30.840542 IP 188.72.80.220.37122 > xxx.xxx.xxx.133.80: Flags [.], ack 26176, win 491, options [nop,nop,TS val 4292474511 ecr 3416127243], length 0
09:59:30.844397 IP 188.72.80.220.37122 > xxx.xxx.xxx.133.80: Flags [F.], seq 0, ack 26202, win 501, options [nop,nop,TS val 4292474512 ecr 3416127244], length 0
09:59:30.844409 IP xxx.xxx.xxx.133.80 > 188.72.80.220.37122: Flags [.], ack 1, win 8325, options [nop,nop,TS val 3416128280 ecr 4292474512], length 0
09:59:30.881240 IP xxx.xxx.xxx.133.80 > 93.80.66.53.3171: Flags [P.], ack 1076, win 65535, length 376
09:59:31.550449 IP 188.72.80.220.38904 > xxx.xxx.xxx.133.80: Flags [S], seq 2022763386, win 5792, options [mss 1460,sackOK,TS val 4292474689 ecr 1782437359,nop,wscale 7], length 0
09:59:31.550473 IP xxx.xxx.xxx.133.80 > 188.72.80.220.38904: Flags [S.], seq 1870442466, ack 2022763387, win 65535, options [mss 1460,nop,wscale 3,sackOK,TS val 2142118986 ecr 4292474689], length 0
09:59:31.638262 IP 217.69.133.68.60233 > xxx.xxx.xxx.133.80: Flags [S], seq 1599019270, win 5840, options [mss 1460,sackOK,TS val 1192085985 ecr 0,nop,wscale 7], length 0
09:59:31.638275 IP xxx.xxx.xxx.133.80 > 217.69.133.68.60233: Flags [S.], seq 3295402860, ack 1599019271, win 65535, options [mss 1460,nop,wscale 3,sackOK,TS val 409248899 ecr 1192085985], length 0
09:59:31.874006 IP 93.80.66.53.3171 > xxx.xxx.xxx.133.80: Flags [P.], ack 1505, win 17304, length 269
09:59:31.904189 IP xxx.xxx.xxx.133.80 > 93.80.66.53.3171: Flags [P.], ack 1345, win 65535, length 376

Но при этом сайт не доступен ни из нашей подсети, ни извне. На em1 тишина.

По поводу всего остального. "Кто везёт на том и едут" да, но по видимому мне больше всех надо, остальные говорят что да, заниматься надо, но никто не берётся. Спец по БД по совместительству соучредитель компании, так что ему есть чем заняться и в свободное от БД время. И я ещё ничего не говорил ни о количестве баз данных, ни об их сложности, ни об объёмах данных, да спец по БД нужен. А админ у нас есть, но он по большей части виндовый админ и очень даже хороший, а вот в никсах наших знаний в сумме хватает на половину нормального никсового админа(это ещё оптимистично).


"Gрошу помощи по настройке ipfw"
Отправлено PavelR , 26-Мрт-13 11:26 
>>просто мягко и ненавязчиво скажу:
>>у вас всё изначально неправильно, например вы путаете терминологию
> Об этом я и говорил, спасибо. Да, скорее всего путаю.
>>$fwcmd add 00150 allow tcp from any to table\(1\) 80 via em0 limit src-addr 2
>>поясните, зачем тут "limit src-addr 2" ?
> Один из сайтов часто пытаются парсить, таким образом хочу откинуть самых наглых
> и навязчивых.

зачем тогда to table(1) ? Адреса чего (какие адреса) вы собираетесь заносить в эту таблицу?


>И я ещё ничего не говорил ни о количестве баз данных, ни об их сложности, ни об объёмах
>данных, да спец по БД нужен.

Значит вам уже нужен юникс-админ. Занимаясь самодеятельностью, вы только отсрочите его появление в вашем коллективе.


"Gрошу помощи по настройке ipfw"
Отправлено PavelR , 26-Мрт-13 11:30 
> А админ у нас есть, но он по большей части виндовый админ и очень даже хороший, а вот в
>никсах наших знаний в сумме хватает на половину нормального никсового админа(это ещё
>оптимистично).

Интересно, почему же тогда, при наличии живого админа, файрволом занимается _программист_ ? )


Всё-таки "знание принципов освобождает от знания фактов", а знания принципов настройки файрволла исходят из знания принципов работы сетевых протоколов. Сетевые протоколы - они одни, и в win и в linux. Так почему же настройкой файрволла занимается прикладной (не сетевой!) программист ?


"Gрошу помощи по настройке ipfw"
Отправлено sirius , 26-Мрт-13 11:32 
fwcmd="/sbin/ipfw"

$fwcmd table 1 add xxx.xxx.xxx.136
$fwcmd table 1 add xxx.xxx.xxx.133

$fwcmd -qf flush

$fwcmd add skipto 1000 ip from any to any recv via em0
#исходящий трафик через em0 и lo0
$fwcmd add allow ip from any to any via lo0
$fwcmd add allow ip from any to any xmit via em0
$fwcmd add deny ip from any to any

#table(2) - баненые адреса, и этот блок для входящего трафика на em0
$fwcmd add 1000 deny ip from table\(2\) to any
$fwcmd add deny icmp from any to any icmptype 9,13,14,15,16,17
$fwcmd add allow tcp from any to table\(1\) dst-port 80
#если заходите по ssh на сервер - добавьте
#$fwcmd add allow tcp from 192.168.0.X to me dst-port 22
$fwcmd add deny ip from any to any

Кажись все... А насчет парсить, сам хром создает много соединений, на каждую картинку отдельное.


"Gрошу помощи по настройке ipfw"
Отправлено UrfinJuezz , 26-Мрт-13 13:47 
>зачем тогда to table(1) ? Адреса чего (какие адреса) вы собираетесь заносить в эту таблицу?

У нас целый пул адресов xxx.xxx.xxx.128 - xxx.xxx.xxx.159, мало ли какое доменное имя мы ещё зарегистрируем и на какой IP его повесим, в table(1) как раз и будут все доступные IP. Мне кажется что можно написать xxx.xxx.xxx.128/27 и не париться с таблицей, но вот что-то не хочется сразу махом всё открывать.

>Значит вам уже нужен юникс-админ. Занимаясь самодеятельностью, вы только отсрочите его появление в вашем коллективе.

А он и был, а точнее тут до меня был другой программер который и админил эти сервера, говорят хорошо очень в никсах разбирался, а теперь он уволился. Формально я на его месте и от меня этого и ждут.

>Интересно, почему же тогда, при наличии живого админа, файрволом занимается _программист_ ? )

Мне тоже. Но так получилось. И взаимоотношения и распределение обязанностей в коллективе на мой взгляд не попадают в рамки этой темы.

sirius, спасибо!
Только немножко поправил:
-------
$fwcmd add skipto 1000 ip from any to any recv em0
$fwcmd add allow ip from any to any via lo0
$fwcmd add allow ip from any to any xmit em0
-------
и разрешил пинговать.

Ну и последнее правило не нужно, правило по умолчанию deny all from any to any(или оно может где-то не отработать?)

Но к сожалению проблема не решена, симтомы те же что и с моим конфигом. ...133 пингуется но страницы упорно не отдаёт.
Дополнительный вопрос, как включить логирование файрвола не перезагружая сервер? А то по tcpdump ничего не ясно, если ему верить, то пакеты вполне себе летают. Но что-то же блочится, без файрволла всё работает. А я пока отвлекусь и поищу проблему где-нибудь ещё.


"Gрошу помощи по настройке ipfw"
Отправлено PavelR , 27-Мрт-13 08:57 
а не настроен ли у вас там еще и _другой_ файрволл ? ))

"Gрошу помощи по настройке ipfw"
Отправлено PavelR , 27-Мрт-13 08:58 

> tcpdump ничего не ясно, если ему верить, то пакеты вполне себе
> летают.

по тому, что вы привели - не, не очень летают

>Но что-то же блочится, без файрволла всё работает.

Без файрволла - это как?



"Gрошу помощи по настройке ipfw"
Отправлено UrfinJuezz , 27-Мрт-13 09:57 
> по тому, что вы привели - не, не очень летают

Значит я не умею читать логи(что в общем-то ожидаемо)

> Без файрволла - это как?

Это после #kldunload ipfw

>а не настроен ли у вас там еще и _другой_ файрволл ? ))

Хороший вопрос. Стыдно что сам не задал его себе, удивлён что после "$fwcmd add 00110 allow all from any to any via pflog0" мне его не задали в самом начале.
#kldstat показывает модули pf.ko и pflog.ko, но pfctl -s all показывает No ALTQ support in kernel и Status:Disable. В rc.conf никаких упоминаний pf, /etc/pf.conf тоже отсутствует, так что судя по всему не настроен.


"Gрошу помощи по настройке ipfw"
Отправлено PavelR , 27-Мрт-13 11:31 

Начните с того, что перепишите все правила с явным указанием номера правила.

Далее, смотрите ipfw show.


Поскольку вы пытаетесь использовать deny log , посмотрите в логах, что подпадает под правило.

В общем случае, тут всё дебажится точно также как и в любой программе - добавляеете "служебные временные правила" вида

ipfw allow с нужным условием и добиваетесь того, чтобы на

отладочный ipfw allow который стоит прямо перед "продакшен" ipfw deny с таким же условием ничего не попадало.

Отдельно обратите внимание на ipfw resetlog, т.к. количество сообщений в лог - ограничено.


Откройте несколько консолей на сервер, чтобы было удобно смотреть логи.

Еще можно воспользоваться gnu-watch "ipfw sh" (gnu-watch ставится из портов).


Если все это вас еще не за-коле-бало, то ... Иначе:

ipfw add 100 allow tcp from me 80 to any



"Gрошу помощи по настройке ipfw"
Отправлено UrfinJuezz , 27-Мрт-13 12:55 
> Поскольку вы пытаетесь использовать deny log , посмотрите в логах, что подпадает
> под правило.

Один из моих вопросов которые я тут задавал:"Как включить логирование файрвола не перезагружая сервер?". У меня не получилось, поэтому я и не смог посмотреть лог и понять что именно блокируется. А правило это я писал как раз с такой целью. Так что я бы с удовольствием.

> Если все это вас еще не за-коле-бало, то ... Иначе:
> ipfw add 100 allow tcp from me 80 to any

А:
>$fwcmd add 00100 allow all from any to any via lo0
>$fwcmd add 00300 allow icmp from any to any
>$fwcmd add 00400 allow all from me to any

для этого не достаточно? Поясните пожалуйста.

В принципе я для себя нашёл альтернативный вариант, который, конечно же, не подразумевает моего отказа от дальнейшего обучения, но позволяет решить те задачи для которых я настраиваю файрволл и спихнуть оставшуюся часть работы на админа.
По сути мне файрволл нужен только для того чтобы банить особо наглых брутфорсеров которые ломятся к нам по ssh и пользователей от которых приходит слишком много запросов(больше 5 в секунду на разные страницы). Соответственно я могу сделать:
>$fwcmd add 00100 allow all from any to any via lo0
>$fwcmd add 00200 deny all from table\(2\) to any
>$fwcmd add 00300 allow all from any to any

Остальное пускай админ на циске настраивает. А я просто на кроне настрою анализ auth.log, messages.log и nginx.log и занесение нужных IP в table(2).


"Gрошу помощи по настройке ipfw"
Отправлено Miha , 26-Мрт-13 21:03 
>>> Добрый день!
>>> Сразу скажу что я не админ
>>   А кто вы? Вахтер, разносчик корреспонденции, блондинка на ресепшене, etc?
>>   Давайте заниматься каждый своим делом!
> Я разработчик, который пишет те самые сайты которые крутятся на этом серваке,
> и как выясняется - это именно моё дело, потому что не
> дизайнеру же этим заниматься? И не спецу по БД. Поэтому давайте
> не будем выяснять кто чем должен заниматься. А если уж Вам
> так не хочется отвечать, будте последовательны, не отвечайте вообще ничего.

Вы поймите меня правильно. ipfw -  старый файервол и непросто настраивается, особенно в сложных конфигурациях с пробросами\редиректами адресов или портов\или, например, в случае с изолированием клетки, что бы при взломе работающего в ней приложения, ничего больше не хакнули\или, например, у вас 3 линка в инет, и нужна балансировка пот ТСР-сессиям\ ну и т.д. и т.п.. Я не один месяц потратил в свое время на его изучения в виртуалке.
Посему:
-- если вы хотите его грамотно настроить, ставьте Виртуалбокс, открывайте манн и ковыряйте, иначе будете постоянно сюда постить, а вас будут мягко "отшивать" :)
-- если хотите проще - пробуйте pf, он как бы более интеллектуальнее.
-- если ни то не другое вас не устраивает, нанимайте компетентного специалиста, а сами занимайтесь своей работой.

ЖЫ: без обид :)


"Gрошу помощи по настройке ipfw"
Отправлено UrfinJuezz , 27-Мрт-13 09:40 
Никаких обид. Я сам прекрасно понимаю что очень мало знаю, но куда деваться. Читаю маны, изучаю, тренируюсь на тестовом сервере(Да тут специально для этих целей отдельную машинку поставили), но сделать это надо как можно скорее, а мне никто не даст надолго отрываться от разработки и отдельного спеца тоже никто нанимать не будет. Увы, у меня только два варианта: либо отложить эту задачу в долгий ящик, либо просить помощи у специалистов.