aboutsummaryrefslogtreecommitdiff
path: root/ja/man/man8/ipfw.8
blob: d8907cba314cc6c983f713b8d2b0bd0b962e4748 (plain) (blame)
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
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
.Dd July 20, 1996
.\" jpman %Id: ipfw.8,v 1.4 1997/05/19 17:19:51 horikawa Stab %
.Dt IPFW 8 SMM
.Os FreeBSD
.Sh 名称
.Nm ipfw
.Nd IPファイアウォール制御ユーティリィティ
.Sh 書式
.Nm
.Ar file
.Nm ipfw
.Oo
.Fl f
|
.Fl q
.Oc
flush
.Nm ipfw
.Oo
.Fl q
.Oc
zero
.Op Ar number ...
.Nm ipfw
delete
.Ar number ...
.Nm ipfw
.Op Fl aftN
list
.Op Ar number ...
.Nm ipfw
.Oo
.Fl ftN
.Oc
show
.Op Ar number ...
.Nm ipfw
.Oo
.Fl q
.Oc
add
.Op Ar number
.Ar action 
.Op log
.Ar proto
from
.Ar src
to
.Ar dst
.Op via Ar name | ipno
.Op Ar options
.Sh 解説
書式の 1 行目のようにファイル名を指定した場合は、
.Ar file
を 1 行ずつ、引数として読み込みます。
.Pp
.Nm
はパケットごとに、マッチするルールが見つかるまでルールリストを調べます。
各ルールにはパケット数とパケットサイズの 2 つのカウンタが用意されていて、
パケットがマッチするとカウンタ値は更新されます。
.Pp
全ルールは 1 から 65534 の範囲の行番号で順序付けられます。この番号によって
ルールの並べ変えと削除を行ないます。
ルールのマッチングは昇順で行なわれ、最初にマッチしたものが適用されます。
複数のルールが同じ番号を共有することも可能です。この場合はルールが追加された
順序でマッチングが行なわれます。
.Pp
番号を指定せずにルールを追加した場合は、直前のルールの番号に 100 を加えたものと
なります。
ルールの番号が 65434 より大きい場合は、新しいルールは最後のルールに追加されます
。
.Pp
delete 操作は
.Ar number 
で指定された番号を持つ最初のルールを、もし有れば、削除します。
.Pp
list 操作は現在のルール一覧を出力します。
.Pp
show 操作は `ipfw -a list' と同じ結果を出力します。
.Pp
zero 操作は
.Ar number
で指定された番号を持つルールのカウンタをクリアします。
.Pp
flush 操作は全ルールを削除します。
.Pp
記号 `#' で始まる行および空行は無視されます。
.Pp
どんな場合でも次のルールは存在します:
.Bd -literal -offset center
65535 deny all from any to any
.Ed
.Pp
全パケットを拒否するのがデフォルトのポリシーです。
これを修正し、必要なルールを設定して下さい。
.Pp
オプションは以下のものが利用可能です。
.Bl -tag -width flag
.It Fl a
list 操作の時、カウンタの値を表示します。
show の項を参照のこと。
.It Fl f
操作を実行する際に確認メッセージを表示しません。
flush 操作も無条件に実行されます。
.Ar (注意)
プロセスに tty が関連付けられていない場合には、
このオプションが指定されているものとして実行されます。
.It Fl q
ルールを追加したり削除したりする際に、メッセージの出力を抑制します
('-f'も含まれます)。
このオプションは、リモートログインセッションでルールを調整する際に、
(例えば sh /etc/rc.firewall のようにして)スクリプトの中から複数の ipfw コマンド
を
実行する場合や、
多数の ipfw ルールを記述したファイルを用いる場合に
便利です。
flush 操作が通常の(冗舌な)状態で実行されると、メッセージが出力されます。
ここで、すべてのルールは削除されるので、メッセージをログインセッションに
送ることができず、ログインセッションがクローズされてしまうので、
残りのルールセットは実行されません。
この状態を修復するにはコンソールへのアクセスが必要となります。
.It Fl t
list 操作の時に、最後にマッチしたパケットのタイムスタンプを表示します。
.It Fl N
IPアドレスとサービス名をリゾルブしてホスト名で表示します。
.El
.Pp
.Ar action :
.Bl -hang -offset flag -width 1234567890123456
.It Ar allow
マッチするパケットを通過させ、マッチングを終了します。
.Ar pass ,
.Ar permit ,
.Ar accept
と同じです。
.It Ar deny
マッチするパケットを破棄し、マッチングを終了します。
.Ar drop
は
.Ar deny
と同じです。
.It Ar reject
(パケットを送らないよう嘆願) マッチするパケットを破棄し、
ICMP の host unreachable を送信して、終了します。
.It Ar unreach code
パケットを破棄し、ICMP の unreachable に
.Ar code
を付けて送信します。
.Ar code
は、 0 から 256 までの数字、もしくは、以下に列挙する別名のいずれかです:
.Ar net,
.Ar host ,
.Ar protocol ,
.Ar port ,
.Ar needfrag ,
.Ar srcfail ,
.Ar net-unknown ,
.Ar host-unknown ,
.Ar isolated ,
.Ar net-prohib ,
.Ar host-prohib ,
.Ar tosnet ,
.Ar toshost ,
.Ar filter-prohib ,
.Ar host-precedence ,
.Ar precedence-cutoff
。送信後、終了します。
.It Ar reset
TCP パケットのみに対応。
パケットを破棄し、TCP の (RST) を送信し、終了します。
.It Ar count
マッチするパケットのカウンタを更新し、引続きマッチングを行ないます。
.It Ar divert port
マッチするパケットを
.Ar port 
で指定されたポートにバインドされている
.Xr divert 4
ソケットに送り、マッチングを終了します。
.It Ar tee port
マッチするパケットのコピーを
.Ar port
で指定されたポートにバインドされている
.Xr divert 4
ソケットに送り、引続きマッチングを行ないます。
.It Ar skipto number
.Ar number
より小さな番号のルールを飛び越して、
.Ar number
以上の番号のルールで最初に存在するものから、マッチングを継続します。
.El
.Pp
パケットが
.Ar divert
や
.Ar tee
のどちらかひとつ以上、もしくは両方の組合せの、複数のルールにマッチした場合、
最後のものを除き、無視します。
.Pp
カーネルが
.Dv IPFIREWALL_VERBOSE
オプション付きでコンパイルされている場合に、``log'' が指定されているルールと
マッチした時は、メッセージをコンソールに表示します。
もし、
.Dv IPFIREWALL_VERBOSE_LIMIT
オプション付きでコンパイルされている場合、一連のルールに対し指定されたパケット
数を受信した後、メッセージの表示を中止します。
パケットのカウンタをクリアすれば再びメッセージを出力します。
.Pp
コンソールへの表示とその制限数は、
.Xr sysctl 8
を通し、直接設定できます。
.Pp
.Ar proto :
.Bl -hang -offset flag -width 1234567890123456
.It Ar ip
全パケットがマッチします。別名
.Ar all
も使えます。
.It Ar tcp
TCP パケットのみマッチします。
.It Ar udp
UDP パケットのみマッチします。
.It Ar icmp
ICMP パケットのみマッチします。
.It Ar <number|name>
指定されたプロトコルのパケットのみマッチします (
.Pa /etc/protocols
のリストを参照の事)
.El
.Pp
.Ar src 
と
.Ar dst :
.Pp
.Bl -hang -offset flag
.It Ar <address/mask>
.Op Ar ports
.El
.Pp
.Em <address/mask>
は以下のように指定できます。
.Bl -hang -offset flag -width 1234567890123456
.It Ar ipno
IP番号を 1.2.3.4 の形式で指定します。指定されたアドレスのみがマッチします。
.It Ar ipno/bits
IP番号とネットマスクの幅を 1.2.3.4/24 の形式で指定します。
この場合は 1.2.3.0 から 1.2.3.255 のアドレスがマッチします。
.It Ar ipno:mask
IP番号とネットマスクの幅を 1.2.3.4:255.255.240.0 の形式で指定します。
この場合は 1.2.0.0 から 1.2.15.255 のアドレスがマッチします。
.El
.Pp
アドレスの前に ``not'' を付けることによって、マッチの意味を反転させる
ことができます(指定されたアドレス以外の総てのアドレスがマッチします)。
これはポート番号には影響しません。
.Pp
TCP と UDP ではさらに、
.Em ports
を以下のように指定できます。
.Pp
.Bl -hang -offset flag
.It Ns {port|port-port} Ns Op ,port Ns Op ,...
.El
.Pp
ポート番号の代わりに(ファイル
.Pa /etc/services
から取った)サービス名を使用できます。
port-port の書式で、最初の値に限り範囲指定できます。
列挙出来るポート数は  
.Pa /usr/src/sys/netinet/ip_fw.h 
で
.Dv IP_FW_MAX_PORTS
として定義されています。
.Pp
断片化されたパケットでオフセットが非 0 のもの
(すなわち、最初の断片ではないもの) は、
一つ以上のポート仕様を持つルールにはマッチしません。?
断片化されたパケットへのマッチングに関する詳細は
.Ar frag
オプションを参照してください。
.Pp
マッチングのルールは、入ってくるパケットか、出ていくパケット、もしくはその両方
に対し適応されます。
.Ar in
を指定すれば、入ってくるパケットのみにルールを適応します。
.Ar out
を指定すれば、出ていくパケットのみに適応します。
.Pp
特定のインタフェースを通過するパケットには、
.Ar via
を用いてインタフェースを指定します:
.Bl -hang -offset flag -width 1234567890123456
.It Ar via ifX
.Ar ifX
を通過するパケットを指定します。
.It Ar via if*
.Ar ifX
を通過するパケットを指定します。X はいずれかのユニットの番号です。
.It Ar via any
.Em いずれか
のインタフェースを通過するパケットを指定します。
.It Ar via ipno
IP アドレスが
.Ar ipno
のインタフェースを通過するパケットを指定します。
.El
.Pp
.Ar via
を用いると、常時指定されたインタフェースがチェックされます。
.Ar recv
や
.Ar xmit
を、
.Ar via
の代わりに指定すると、
受信、もしくは送信インタフェースのみが(各々に)チェックされます。
両方を指定すれば、
受信と送信の両方のインタフェースを通るパケットを指定できます。
例 :
.Pp
.Dl "ipfw add 100 deny ip from any to any out recv ed0 xmit ed1"
.Pp
.Ar recv
で指定したインタフェースでは、受信と送信、両方のパケットをチェックできます。
それに対し、
.Ar xmit
で指定したインタフェースでは、送信パケットのみとなります。
それゆえに、
.Ar xmit
を指定すると
.Ar out
が、必須です(
.Ar in
は不可)。
.Ar via
と共に
.Ar xmit
もしくは、
.Ar recv
を指定する事はできません。
.Pp
個々のパケットは、受信用ないし送信用インタフェースを持たないかもしれません。
ローカルホストで発生したパケットには受信用のインタフェースはないし、
ローカルホスト内宛のパケットは、送信用インタフェースが有りません。
.Pp
追加用
.Ar options :
.Bl -hang -offset flag -width 1234567890123456
.It frag
パケットが断片(フラグメント)化されたデータグラムの一部で、かつデータグラムの
先頭の断片でない場合にマッチします。
.Ar frag
を、
.Ar tcpflags
や TCP/UDP ポート仕様と共に使用することはできません。
.It in
ネットワークから受信したパケットのみマッチします。
.It out
ネットワークへ送信するパケットのみマッチします。
.It ipoptions Ar spec
IP ヘッダが、
.Ar spec 
に指定されたコンマで区切られたオプションのリストを含む場合にのみマッチします。
サポートされている IP オプションは
.Ar ssrr 
(strict source route),
.Ar lsrr 
(loose source route),
.Ar rr 
(record packet route),
.Ar ts 
(timestamp) です。
``!''によって、特定のオプションを含めないよう指定できます。
.It established
RST または ACK ビットがセットされているパケットのみマッチします。
このビットがセットされることがあるのは TCP のパケットのみです。
.It setup
SYN ビットがセットされ ACK がセットされていないパケットのみマッチします。
このビットがセットされることがあるのは TCP のパケットのみです。
.It tcpflags Ar spec
TCP ヘッダが
.Ar spec 
に指定されたコンマで区切られたフラグのリストを含む場合にのみマッチします。
サポートされているフラグは、
.Ar fin ,
.Ar syn ,
.Ar rst ,
.Ar psh ,
.Ar ack ,
.Ar urg 
です。
``!''によって、特定のフラグを含めないよう指定できます。
.Ar tcpflags
仕様を含むルールは非 0 のオフセットを持つ断片化されたパケットに
マッチすることはありません。
断片化されたパケットに関するマッチについての詳細は
.Ar frag
オプションを参照してください。
.It icmptypes Ar types
ICMP タイプが
.Ar types 
で指定されたリスト中に存在する場合にのみ適用されるルールとなります。
リストはレンジの組み合わせでも、各タイプをコンマで区切ったものでもどちらでも
かまいません。
.El
.Sh チェックリスト
ルールを構成する際に考慮すべき重要な点を述べます。
.Bl -bullet -hang -offset flag 
.It 
かならず送信パケットと受信パケットの両方のパケットをフィルタリングします。
ほとんどのネットワークコネクションではパケットが双方向に流れることが必要です。
.It
テストは細心の注意を払って行ないます。テストの際にはコンソールの近くにいる
のがよいでしょう。
.It
ループバックインターフェイスのことを忘れてはなりません。
.El
.Sh 長所
ファイアウォールが常に破棄するパケットが 1 種類あります。
フラグメントオフセットが 1 のフラグメントパケットです。
これはパケットとしては有効なものですが、利用目的はファイアウォールを
かいくぐることしかありません。
.Pp
ネットワーク越しにログインしている場合、LKM版の
.Nm
をロードすることはそれほど単純なことではありません。
以下のコマンドを奨めます。
.Bd -literal -offset center
modload /lkm/ipfw_mod.o && \e
ipfw add 32000 allow all from any to any
.Ed
.Pp
これに引続き、同じような状況で
.Bd -literal -offset center
ipfw flush
.Ed
.Pp
とするのは良くありません。
.Sh パケットの行き先変更
指定されたポートを見ているソケットは、そのポートへ行き先変更されたパケットを、
全部受けとります。
.Xr divert 4 
を参照して下さい。ポートを見ているソケットがない場合やカーネルがパケットの行き
先変更をサポートするようにはコンパイルされていない場合、パケットは破棄されます
。
.Sh 使用例
次のコマンドは
.Em hacker.evil.org
から
.Em wolf.tambov.su
の telnet ポートへ送られる全ての TCP パケットを拒否するルールを追加します。
.Pp
.Dl ipfw add deny tcp from hacker.evil.org to wolf.tambov.su 23
.Pp 
次のコマンドはネットワーク hackers からホスト my への全てのコネクションを
拒否します。
.Pp
.Dl ipfw add deny all from 123.45.67.0/24 to my.host.org
.Pp
次はカウントされている情報とタイムスタンプを見る例です
.Pp
.Dl ipfw -at l
.Pp
これはタイムスタンプを省略して次のように指定できます。
.Pp
.Dl ipfw -a l
.Pp
次のルールは 192.168.2.0/24 からの全ての受信パケットを、5000番のポートに
行き先変更するものです。
.Pp
.Dl ipfw divert 5000 all from 192.168.2.0/24 to any in
.Sh 関連項目
.Xr ip 4 ,
.Xr ipfirewall 4 ,
.Xr divert 4 ,
.Xr protocols 5 ,
.Xr services 5 ,
.Xr reboot 8 ,
.Xr syslogd 8 ,
.Xr sysctl 8
.Sh バグ
.Pp
.Em WARNING!!WARNING!!WARNING!!WARNING!!WARNING!!WARNING!!WARNING!!
.Pp
このプログラムはコンピュータをかなり使いにくい状態にしてしまう可能性があります
。
はじめて使用する時はコンソール上で実行し、理解していない操作は
.Em 絶対に実行しない
ようにして下さい。
.Pp
連続したエントリの操作もしくは追加に際し、サービス名やプロトコル名は使用できま
せん。
.Pp
入ってきたパケットの断片(フラグメント)が
.Ar divert
によって行き先を変更されると、ソケットに配送される前に、組み立て直しをします。
それに対し、
.Ar tee
を経由した断片(フラグメント)は、組み立て直しされません。
.Pp
ポートの別名でダッシュ (-) を含むものは、リストの最初には書けません。
.Sh 作者
Ugen J. S. Antsilevich,
Poul-Henning Kamp,
Alex Nash,
Archie Cobbs.
API based upon code written by Daniel Boulet for BSDI.
.Sh 歴史
.Nm
は、FreeBSD 2.0 で最初に現れました。