-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathch1.html
416 lines (351 loc) · 35.8 KB
/
ch1.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
<!doctype html>
<html lang=ru id=faq>
<title>Глава 1 - Создаем такую сеть, которая нам нужна</title>
<meta charset=utf-8>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" href="openbsd.css">
<h2 id=OpenBSD>
<a href="https://openbsd-ru.github.io/index.html">
<i>Open</i><b>BSD PF</b></a>
Глава 1: Создаем такую сеть, которая нужна нам
<small>
<a href="index.html">[Оглавление]</a>
</small>
</h2>
<hr>
<ul>
<li><a href="#YourNetwork">Ваша сеть: высокая производительность,
безопасность и низкие временые затраты на поддержку</a>
<li><a href="#Fit" >Сильные стороны PF</a>
<li><a href="#Rise" >Развитие PF</a>
<li><a href="#Migration" >Миграция на PF</a>
<ul>
<li><a href="#Linux" >Информация для Linux пользователей</a>
<li><a href="#FAQ" >Часто задаваемые вопросы о PF</a>
</ul>
<li><a href="#Haiku" >Восхваление PF</a>
</ul>
<hr>
<table><tr><td>
<img src="img/chapter.jpg" width="150" height="150" alt="">
<td>
PF, подсистема пакетного фильтра (Packet Filter subsystem) OpenBSD - один из лучших
доступных инструментов для надёжного контроля вашей сети. Прежде чем погрузиться в
особенности того, как настроить сеть на пределе ваших мечтаний, ознакомьтесь с этой
главой. Тут объясняются основные сетевые термины и понятия, коротко рассказывается
о истории развития PF, а так же даётся краткий обзор того, что вы можете найти в этой
книге.
</table>
<h2 id="YourNetwork">Ваша сеть: высокая производительность, безопасность и низкие
временые затраты на поддержку</h2>
Если заголовок точно описывает вашу сеть, вероятно, что вы читаете эту книгу просто
ради развлечения, и я надеюсь, что остальная часть книги доставит вам удовольствие.
С другой стороны, если вы всё ещё изучаете, как создвавать и настраивать сети, или
не слишком уверены в своих силах и навыках, вам может быть полезно короткое резюме
об основных сетевых терминах, а также понятий, использующихся в контексте сетевой
безопасности.
<p>
Информационная безопасность - это большая, сложная и часто запутанная тема.
Даже если ограничиться только исследованием терминов сетевой безопасности, возникает
ощущение, что мы не сильно сократили своё поле деятельности.
Дела стали намного хуже несколько лет назад, когда персональные компьютеры начали
объединяться в глобальные сети и стали оснащаться программами для работы в сетевом
окружении, которые далеко не всегда были правильно спроектированы.
<p>
Результат оказался вполне предсказуем. Ещё до того, как персональные компьютеры стали
сетевыми, они были целью для вирусов (полуавтоматическим программам, которые могут
заражать другие файлы, а так же копировать себя) и трояны (первоначально
троянские кони - программы, заставляющие компьютер жертвы выполнять определённые действия).
Подключившись к сети, компьютеры подверглись ещё одному типу вирусов - worms или сетевым
червям, использующим сеть как среду для самокопирования и распространения. 1
Попутно, на горизонте сетевой безопасности появились различные варианты сетевого
мошенничества и сегодня значительная часть активной компьютерной безопасности
сконцентрирована на управлении угрозами, с упором на борьбу и каталогизацию
вредоносного ПО или так называемого malware.
<p>
Бесполезно перечислять всё зло — это было прекрасно сделано в другом месте (смотрите
приложение A, например отличное эссе Марка Ранума - «Шесть самых тупых идей в
компьютерной безопасности»).
Подход OpenBSD заключается, в первую очередь, в
способе разработки дизайна и кода. Если в дальнейшем, вы обнаруживаете ошибки и эти
ошибки оказываются эксплуатируемыми, после их исправления код возвращается в
дерево, даже если это может означать радикальный пересмотр дизайна, и в худшем
случае привести к потере совместимости.
<p>
В PF, а так же в этой книге, основное внимание концентрируется на сетевом трафике
сетевого уровня. Введение <a href="http://man.openbsd.org/divert">divert(4)</a>
сокетов в OpenBSD 4.7. сделало проще настройку
системы, где PF используется для глубокой инспекции пакетов. Тем не менее, не всё
свободное ПО имеет специфический интерфейс пользователя, поэтому мы сфокусируемся
на некоторых методах основаных на поведении присущем сетевому уровню (наиболее
очевидно это показано в примере конфигурации главы 6) что поможет снизить нагрузку
на программы контроля контекста, если они у вас имеются. В следующих главах вы
увидите, что сетевой уровень предлагает множество возможностей кроме блокирования и
разрешения пакетов.
<h2 id="Fit">Сильные стороны PF</h2>
Основная функция фильтра пакетов, как следует из названия, состоит в фильтрации
сетевых пакетов путём сопоставления свойств отдельных пакетов и сетевых соединений с
критериями фильтрации или правилами пакетного фильтра, определёнными его
конфигурационным файлом. пакетный фильтр отвечает за решение относящееся к
действию производимому с пакетом. Это означает, что решается вопрос о том, следует ли
передавать пакет к месту назначения или отклонить его, должно ли возникнуть какое-
либо событие операционной системы или внешних приложений настроенных на обработку
события.
<p>
PF позволяет администратору создавать собственные критерии фильтрации для контроля
сетевого трафика, основываясь на содержимом пакета или параметрах подключения, в
том числе адресах источника и назначения, интерфейсе, протоколе, портах и
направлении. Основываясь на этих критериях, пакетный фильтр применяет указанное
действие. Одним из простейших и наиболее общих действий является блокирование
трафика.
<p>
Пакетный фильтр может сдерживать нежелательный сетевой трафик. Кроме того, он
может помочь контролировать внутри сетевой трафик вашей собственной внутренней
сети. Обе эти функции очень важны в концепции брандмауэра, однако блокирование
трафика далеко не единственная полезная и интересная функциональная особенность
пакетного фильтра.
<p>
Вы можете использовать критерии фильтрации для непосредственного определения
видов сетевого трафика специфических хостов, назначить классификацию трафика в
очереди, выполнить формирование трафика (шейпер) и даже перенаправить проблемный
трафик к специализированному ПО для специальной обработки.
Все эти обработки производятся на сетевом уровне, основываясь на свойствах пакетов и
соединений. PF является частью сетевого стека, встроенного в ядро операционной
системы. Существовали примеры фильтрации пакетов в пространстве пользователя (user
space), однако в большинстве операционных систем функции фильтрации реализуются в
ядре системы, что обеспечивает высокую скорость работы.
<h2 id="Rise">Развитие PF</h2>
Если вас интересует история, вероятно вы знаете, что OpenBSD и другие BSD 3 ОС
являются прямыми потомками системы BSD (иногда говорят о BSD Unix), операционной
системы включающей эталонную реализацию протоколов стека TCP/IP начала 80-х годов.
<p>
Как исследовательский проект BSD был свёрнут в начале 90-х годов и его код был
освобождён для дальнейшего развития небольшими группами энтузиастов по всему миру.
некоторые из этих энтузиастов были ответственны за сохранение жизненно важных
частей инфраструктуры Интернет и развитие BSD продолжалось несколькими
параллельными направлениями под эгидой различных групп. OpenBSD стала известна как
наиболее безопасная ОС основанная на BSD. в качестве системы фильтрации пакетов,
данная система использовала подсистему названную IPFilter, написанную Дарреном Ридом
(Darren Reed).
<p>
В начале 2001 года, сообщество OpenBSD было шокировано заявлением Рида который
объявил, что IPFilter, который на тот момент был тесно интегрирован с OpenBSD, не
попадает под лицензию BSD. Вместо этого, он использует практически аналогичную
лицензию, исключая право внесения изменений в код и распространение результата
изменений. Проблема заключалась в том, что версия IPFilter OpenBSD включала несколько
изменений и настроек, которые, как оказалось, не попадали под действие лицензии. В
результате, 29 мая 2001 года, IPFilter был удалён из дерева исходных кодов OpenBSD и в
течении нескольких недель, OpenBSD (-current) не включала никакого ПО бранмауэра.
<p>
К счастью, в это время, в Швейцарии, Даниэль Хартмейер (Daniel Hartmeier) производил
некоторые эксперименты с сетевой частью кода ядра. Он начал с подключения
собственной небольшой функции к сетевому стэку, а затем пропустил через неё сетевые
пакеты. Затем он задумался о фильтрации. Когда наступил описанный ранее кризис с
лицензией, PF уже находился в стадии разработки. Первый коммит кода PF пришёлся на
воскресенье 24 июня 2001 года в 19:48:58 UTC. Через несколько месяцев интенсивной
работы результирующая версия PF была выдвинута в качестве основной части базовой
системы OpenBSD 3.0 в декабре 2001 года. 4 Эта версия включала достаточно полную
реализацию пакетного фильтра, в том числе включая NAT, который был достаточно
похожим на IPFilter, т.ч. переход на новую версию OpenBSD не составил особых проблем.
<p>
PF оказался хорошо разработанным ПО. В 2002 году Хартмейер получил подтверждение
USENIX, доказывающее что тесты производительности OpenBSD 3.1 PF выполняются
одинаково хорошо или даже лучше чем IPFilter на OpenBSD 3.1 или IPTables на Linux.
Кроме того, тесты выполненные на PF OpenBSD 3.0 показали, что код повышает
эффективность с версии 3.0 до версии 3.1. 6
<p>
Код OpenBSD PF, написаный с помощью нового движка фильтрации пакетов, опытными
разработчиками, естетственно вызвал интерес других групп BSD. Проект FreeBSD
постепенно принял PF, сначала в качестве пакета, а затем, начиная с версии 5.3 в
качестве одного из трёх компонентов фильтрации пакетов базовой системы. Кроме того,
PF был включён в NetBSD и DragonFlyBSD.
<p>
Эта книга посвящена PF доступном в OpenBSD 4.8, и, в случае необходимости, я буду
отмечать значительные различия между этой версией и теми, которые интегрированы в
другие системы. Если вы гготовы погрузиться в конфигурирование PF, вы можете перейти
к Главе 2, чтобы сразу начать работу.
<p>
Если вы
хотите потратить немного времени и прокатиться по незнакомой территории BSD, можете
продолжить чтение этой главы.
<pre class="cmdbox">
Врезка: Новые версии PF работают лучше!
Как и всё в мире компьютеров, OpenBSD и PF были затронуты быстрыми изменениями аппаратных средств с
сетей связи. Я не видел тестов сопоставимости USENIX, однако пользователи PF находят, что накладные
расходы при использовании PF весьма скромные. В качестве примера (в основном, чтобы показать, что даже
слабые конфигурации оборудования вполне применимы), одна из фирм использовала в качестве сетевых
шлюзов машины в конфигурации Pentium III 450МГц c 384Мб памяти. При этом я не могу припомнить, чтобы
простой машины составлял менее 96%!
Стоит отметить, что текущие разработчики PF, в основном Хеннинг Брауэр (Henning Brauer) и Райан Мак'Брид
(Ryan McBride), при участии ряда других, внесли ряд оптимизаций в код OpenBSD PF в нескольких последних
релизах, что делало каждый последующий релиз с 4.4 по 4.8 заметно лучше предыдущего.
</pre>
<h2 id="Migration">Миграция на PF</h2>
Если вы читаете это по той причине, что планируете переместить настройки PF из другой
системы - этот раздел для вас.
<p>
Если вы хотите использовать PF, необходимо установить и
запустить системы такие как OpenBSD, FreeBSD, NetBSD или DragonFly BSD. Всё это -
прекрасные ОС, но лично мне больше нравится OpenBSD, в основном по той причине, что
это та операционная система в которой, по существу, происходит развитие PF, и мне
нравится деловой подход к её разработке. Иногда, небольшие изменения и исправления
ошибок присходят в реализациях PF на других системах, но новый и самый современный
код PF всегда можно найти в OpenBSD.
<p>
Некоторые из особенностей описанные в этой книге доступны только в последних
версиях OpenBSD. Другие BSD системы, как правило портируют последние релизы PF
OpenBSD в свой базовый код, однако синхронизация обновлений далеко не
гарантирована и отставание может быть значительным.
<p>
Если вы планируете использовать PF на FreeBSD, NetBSD, DragonFly BSD или других
системах, вы должны проверить замечания к релизу для вашей системы и прочую
документацию, в целях получения подробной информации о включённой версии PF.
<h3 id="Linux">Информация для Linux пользователей</h3>
Сходство и различие между Linux и BSD - тема потенциально большая, если копать
достаточно глубоко, но если вы имеете базовые навыки эта проблема не займёт у вас
слишком много времени. В остальной части книги, я буду считать, что вы можете найти
свой путь базовой конфигурации сети BSD. Т.ч., если вы больше знакомы с настройкой
Linux или прочих систем, стоит отметить несколько моментов присущих конфигурированию BSD:
<ul>
<li>
Linux и BSD используют различные соглашения для именования сетевых
интерфейсов. Конвенция Linux - маркировка всех сетевых интерфейсов на машине
в виде последовательности eth0, eth1 и так далее (хотя для некоторых драйверов и
их комбинаций вы можете встретить wlan0, wlan1 и т.д. например для
беспроводных интерфейсов).
<p>
В системах BSD, интерфейсам присваиваются имена,
состоящие из имени драйвера и порядкового номера интерфейса. Например старые
карты 3Com использующие драйвер ep появляются в системе как ep0, ep1 и так
далее; карты Intel Gigabit, определяются как em0, em1 и так далее. Некоторые
карты SMC представляются как sn0, sn1... Эта система вполне логична, и позволяет
проще найти данные для специфичного интерфейса. Если сообщения ядра (в
процессе загрузки или выводе ifconfig), говорят, что у вас есть интерфейс
названный em0, вам необходимо обратится к странице руководства системы, чтобы
узнать, какую скорость он поддерживает, какие прошивки ему нужны и тому
подобное.
<li>
Вы должны знать, что BSD-системы конфигуриются посредством /etc/rc.conf. В
общем, BSD системы организованы так, чтобы читать конфигурацию из файла
/etc/rc.conf, который читается скриптом /etc/rc при начальной загрузке. OpenBSD
рекомендует использовать /etc/rc.conf.local для локальных настроек, поскольку
rc.conf содержит значения по умолчанию. FreeBSD использует /etc/defaults/rc.conf
для хранения значений по умолчанию, предоставляя /etc/rc.conf для внесения
собственных изменений. Кроме того, OpenBSD использует конфигурационные
файлы для каждого отдельного интерфейса, называемые <code>hostname.if</code>,
где if заменяется именем интерфейса.
<li>
В целях изучения PF, вам необходимо сконцентрироваться на файле /etc/pf.conf,
который вы, по большей части, будете создавать сами.
</ul>
Если вам требуются более широкие и тщательные сведения о вашей BSD системе,
обратитесь к документации по системе, в том числе FAQ, спискам рассылки и
официальным сайтам проектов. Некоторые рекомендации для прочтения вы можете найти
в Приложение А.
<h3 id="FAQ">Часто задаваемые вопросы о PF</h3>
Этот раздел основан на вопросах, которые мне задавали по электронной почте или на
конференциях, а так же тех, которые появились в списках рассылки и форумах.
Некоторые из наиболее общих вопросов рассматриваются здесь в формате FAQ.
<h4>Могу ли я запустить PF на своей Linux машине?</h4>
Если отвечать одним словом - нет. На протяжении многих лет в списках рассылки
появлялись заявления, что начато портирование PF на Linux, но на момент написания этой
книги, всё ещё нет утверждения что задача решена. Основная причина этого, вероятно,
состоит в том, что PF разработан, прежде всего, как неотъемлемая часть сетевого стека
OpenBSD. Даже после более чем десятилетнего параллельного развития код OpenBSD
содержит достаточно много общего с другими BSD системами, что позволяет осуществить
перенос, но портирование PF на не-BSD системы потребует переписывания значительных
кусков кода PF, и частей интеграции на целевой системе.
<p>
Несколько простых советов
ориентирующих пользователей Linux в BSD представлены в на странице 6 "Указания для
пользователей Linux".
<h4>Можете ли вы порекомендовать графический интерфейс для управления
набором правил PF?</h4>
Эта книга, большей частью, ориентирована на пользователей, которые будут
редактировать набор правил в своём любимом текстовом редакторе. Образцы наборов
правил, приведённых в книге, достаточно просты, и возможно, вы не получите
преймущества от различных вариантов инструментов визуализации графического
интерфейса.
<p>
Общая проблема в том, что конфигурационные файлы PF легко читаемы, т.ч.
графический интерфейс, на самом деле, не является крайне необходимым.
В любом случае, существует несколько графических инструментов, которые позволяют
редактировать и/или генерировать конфигурацию PF, в том числе и специализированный
дистрибутив FreeBSD называемый pfSense (http://pfsense.org), включающий в себя
достаточно комплексный GUI редактор.
<p>
Я рекомендую изучить эту книгу, особенно части относящие к вашей ситуации, а затем
решить вопрос о необходимости использования GUI.
<h4>Имеется ли инструментарий, позволяющий преобразовать мои настройки другого
брандмауэра в конфигурацию PF?</h4>
Лучшая стратегия переноса настроек сети, в том числе и настроек брандмауэра, с одного
ПО на другое - собрать спецификации и политики конфигурации вашей сети или
брандмауэра, а затем реализовать политики используя новый инструмент.
<p>
Прочие продукты неизбежно будут иметь иной набор функциональных возможностей и
отличную конфигурацию, отражающую различные подходы к конкретным проблемам,
которые может быть непросто сопоставить с особенностями PF и связанных с ним
инструментов.
<p>
Документирование политики с поддержанием актуального состояния документации по
мере внесения изменений сильно облегчает вам жизнь. Данная документация должна
содержать полную спецификацию того, достижению чего способствуют ваши настройки.
(Вы можете начать с комментирования файла конфигурации для объяснения целей
каждого создаваемого правила). Это позволяет убедиться, является конфигурация
рациональной реализацией проектируемых целей.
<p>
Обычно системный администратор ищет пути автоматического преобразования настроек,
и это вполне понятно. Я призываю вас противостоять таким желаниям и выполнять
перенос настроек только после переоценки вашего технического оснащения и
потребностей бизнес-процесса, и, желательно, после создания или обновления
формальной спецификации и политики.
<p>
Некоторые из инструментов обладающих адинистративным интерфейсом имеют
возможность формирования файлов конфигурации для нескольких различных типов
брандмауэров и, вполне очевидно, могут использоваться в качестве инструментов
преобразования настроек. Однако, при этом возникает эффект создания нового уровня
абстракции между вами и вашим набором правил, что ставит вас в зависимость от
понимания автора инструмента о том, как работает набор правил PF. Я рекомендую
ознакомиться с соответствующими частями этой книги, прежде чем начинать тратить
время на серьёзное рассмотрение проблемы автоматизированного преобразования
настроек.
<h4>Почему вдруг изменился синтаксис правил PF?</h4>
Мир меняется, а вместе с ним меняется и PF. В частности, разработчики OpenBSD очень
активно и весьма критично относятся к своему коду, и соответственно как и все части
OpenBSD, код PF находится под постоянным контролем.
<p>
Уроки извлечённые в течение
почти десяти лет развития и использования PF привели к внутренним изменениям кода,
который в конечном счёте ясно дал понять разработчикам, что незначительное изменение
синтаксиса имело бы смысл. Для пользователей, результатом стало то, что PF стал проще
в использовании и работает лучше чем в более ранних версиях. Если вы обновите свою
систему до OpenBSD 4.7 или выше, вы почувствуете реальное удовольствие от работы.
<h4>Где я могу узнать больше?</h4>
Существует несколько хороших источников информации о PF и системах на которых он
работает. Один из них вы найдёте в этой книге. Ссылки на печатные издания вы можете
обнаружить в Приложении А.
<p>
Если у вас есть BSD системы с установленным PF, обратитесь к man страницам
руководства для получения информации о особенностях текущей версии PF. Если не
указано иное, информация этой книги относится к системе OpenBSD 4.8.
<h3 id="Haiku">Маленькое восхваление: Хайку о PF</h3>
Если вы всё таки не совсем уверены - предложим небольшую долю восхваления. За
прошедшие годы многие люди много говорили и писали о PF - иногда странное, иногда
прекрасное, а иногда совершенно странное.
<p>
Стихотворение приведённое здесь, является
хорошим показателем того чувства, которое PF вызывает у своих пользователей. Это
стихотворение (поэма) появилась в списке рассылки PF, в потоке начинавшемся с
сообщения "Вещи которое не может PF?" в мае 2004 года. Сообщение было написано кем-
то, кто имел совсем мало опыта работы с брандмауэром и не мог добиться желаемого
результата.
<p>
Конечно, это привело к некоторой дискуссии среди участников, обсуждающей
трудность освоения PF новичками, возможные альтернативы типа Bitdefender и пр. Поток
закончился следующей восхвалительной хайку, написанной Джейсоном Диксоном (Jason
Dixon), 20 мая 2004 года.
<pre class="cmdbox">
Сравнение работы iptables и PF подобно этому хайку
</pre>
Некоторые из концепций которые Диксон использует здесь могут звучать незнакомо, но
если вы продолжите читать книгу, они скоро обретут смысл.