IPF(5)

명칭
ipf, ipf.conf - IP 패킷 필터의 룰 문법

해설

ipf 의 룰 파일은, 어떤 이름이라도 자주(잘), 표준 입력에서도 괜찮습니다. 커널 내부의 필터 리스트를 표시할 때, ipfstat 는 해석 가능한 룰을 출력하기 때문에, 이 출력을 ipf 에의 입력으로서 피드백하는데 사용할 수 있습니다. 따라서, 입력 패킷에 대한 전필터를 제거하기 위해서는, 다음과 같이 합니다:
# ipfstat -i | ipf -rf -

문법

ipf 가 필터 룰 구축에 사용하는 포맷은, BNF 를 사용한 문법으로 다음과 같이 가리킬 수가 있습니다:
filter-rule = [ insert ] action in-out [ options ] [ tos ] [ ttl ]
	      [ proto ] [ ip ] [ group ].
insert	= "@" decnumber .
action	= block | "pass" | log | "count" | skip | auth | call .
in-out	= "in" | "out" .
options	= [ log ] [ "quick" ] [ "on" interface-name [ dup ] [ froute ] ] .
tos	= "tos" decnumber | "tos" hexnumber .
ttl	= "ttl" decnumber .
proto	= "proto" protocol .
ip	= srcdst [ flags ] [ with withopt ] [ icmp ] [ keep ] .
group	= [ "head" decnumber ] [ "group" decnumber ] .
block	= "block" [ return-icmp[return-code] | "return-rst" ] .
auth    = "auth" | "preauth" .
log	= "log" [ "body" ] [ "first" ] [ "or-block" ] [ "level" loglevel ] .
call	= "call" [ "now" ] function-name .
skip	= "skip" decnumber .
dup	= "dup-to" interface-name[":"ipaddr] .
froute	= "fastroute" | "to" interface-name .
protocol = "tcp/udp" | "udp" | "tcp" | "icmp" | decnumber .
srcdst	= "all" | fromto .
fromto	= "from" [ "! " ] object "to" [ "! " ] object .

return-icmp = "return-icmp" | "return-icmp-as-dest" .
object	= addr [ port-comp | port-range ] .
addr	= "any" | nummask | host-name [ "mask" ipaddr | "mask" hexnumber ] .
port-comp = "port" compare port-num .
port-range = "port" port-num range port-num .
flags	= "flags" flag { flag } [ "/" flag { flag } ] .
with	= "with" | "and" .
icmp	= "icmp-type" icmp-type [ "code" decnumber ] .
return-code = "("icmp-code")" .
keep	= "keep" "state" | "keep" "frags" .
loglevel = facility"."priority | priority .
nummask	= host-name [ "/" decnumber ] .
host-name = ipaddr | hostname | "any" .
ipaddr	= host-num ". " host-num ". " host-num ". " host-num .
host-num = digit [ digit [ digit ] ] .
port-num = service-name | decnumber .
withopt = [ "not" | "no" ] opttype [ withopt ] .
opttype = "ipopts" | "short" | "frag" | "opt" ipopts  .
optname	= ipopts [ "," optname ] .
ipopts  = optlist | "sec-class" [ secname ] .
secname	= seclvl [ "," secname ] .
seclvl  = "unclass" | "confid" | "reserv-1" | "reserv-2" | "reserv-3" |
	  "reserv-4" | "secret" | "topsecret" .
icmp-type = "unreach" | "echo" | "echorep" | "squench" | "redir" |
	    "timex" | "paramprob" | "timest" | "timestrep" | "inforeq" |
	    "inforep" | "maskreq" | "maskrep"  | decnumber .
icmp-code = decumber | "net-unr" | "host-unr" | "proto-unr" | "port-unr" |
	    "needfrag" | "srcfail" | "net-unk" | "host-unk" | "isolate" |
	    "net-prohib" | "host-prohib" | "net-tos" | "host-tos" |
	    "filter-prohib" | "host-preced" | "cutoff-preced" .
optlist	= "nop" | "rr" | "zsu" | "mtup" | "mtur" | "encode" | "ts" |
	  "tr" | "sec" | "lsrr" | "e-sec" | "cipso" | "satid" | "ssrr" |
	  "addext" | "visa" | "imitd" | "eip" | "finn" .
facility = "kern" | "user" | "mail" | "daemon" | "auth" | "syslog" |
	   "lpr" | "news" | "uucp" | "cron" | "ftp" | "authpriv" |
	   "audit" | "logalert" | "local0" | "local1" | "local2" |
	   "local3" | "local4" | "local5" | "local6" | "local7" .
priority = "emerg" | "alert" | "crit" | "err" | "warn" | "notice" |
	   "info" | "debug" .
hexnumber = "0" "x" hexstring .
hexstring = hexdigit [ hexstring ] .
decnumber = digit [ decnumber ] .
compare = "=" | "! =" | "<" | ">" | "<=" | ">=" | "eq" | "ne" | "lt" |
	  "gt" | "le" | "ge" .
range	= "<>" | "><" .
hexdigit = digit | "a" | "b" | "c" | "d" | "e" | "f" .
digit	= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" .
flag	= "F" | "S" | "R" | "P" | "A" | "U" .

이 문법은, 가독성을 위해서(때문에) 조금 간략화하고 있습니다. 이 문법으로 매치 하는 편성이어도, 의미를 만들어내지 않기 위해(때문에) 소프트웨어가 허가하지 않는 것이 있습니다 (비 TCP 패킷에 대한 tcp flags 등).

필터 룰

「최단」한편 유효한 룰은 (현재로서는) 무동작과 다음의 형식입니다:
       block in all
       pass in all
       log out all
       count in all

필터 룰은 차례 대로에 체크되어 마지막에 매치 한 룰이 패킷의 운명을 결정합니다 (예외: 후술 quick 옵션을 참조).

디폴트에서는, 필터는 커널의 필터 리스트의 마지막에 인스톨 됩니다. 룰의 전에 @n 를 붙이면(자), 현재의 리스트의 n 번째의 엔트리로서 삽입하게 됩니다. 이것은, 현재 유효한 필터의 룰 세트를 수정하거나 테스트하는 경우에 유용합니다. 한층 더 정보는 ipf(1)를 참조해 주세요.

액션

액션은, 필터 룰의 나머지의 부분에 패킷이 매치 하는 경우에, 그 패킷을 어떻게 취급하는지를 나타냅니다. 각 룰은, 액션을 1 개 가지는 것이 「필요합니다」. 다음의 액션이 인식됩니다:

block
    이 패킷을, 드롭 하도록(듯이) 표시를 하는 것을 나타냅니다. 패킷을 블록 하는 것에 대해, ICMP 패킷 (return-icmp)인가, 원래의 패킷 송신 행선지 기원을 가장하는 ICMP 패킷 (return-icmp-as-dest)인가, TCP 「리셋트」 (return-rst)의, 몇개의 대답 패킷을 돌려주도록, 필터에 지시할 수 있습니다. ICMP 패킷은, 임의의 IP 패킷의 응답으로서 생성할 수 있어 그 타입을 지정할 수도 있습니다. TCP 리셋트는, TCP 패킷에 대해서 적용되는 룰에 대해서만 사용할 수 있습니다. return-icmp 또는 return-icmp-as-dest 를 사용할 때, 도달 불가의 '타입'를 지정 가능합니다. 이 타입이란, 네트워크 도달 불가, 포트 도달 불가, 권한에 의한 금지의 머지않아인가입니다. 지정 방법은, return-icmp 또는 return-icmp-as-dest 의 직후에, 타입에 관련하는 ICMP 코드를 괄호로 괄라는 것입니다. 예를 들면
            block return-icmp(11) ...

(으)로 하면(자), Type-Of-Service (TOS) ICMP 도달 불가 에러를 돌려줍니다.

pass
    이 패킷을, 그대로 필터를 통과시키도록(듯이) 표시를 합니다.

log 이 패킷의 로그를 취합니다 (후술의 로깅절 참조). 패킷이 필터를 통과 가능한가 아닌가에는, 영향을 주지 않습니다.

count
    이 패킷을, 필터의 어카운팅 통계에 포함합니다. 패킷이 필터를 통과 가능한가 아닌가에는, 영향을 주지 않습니다. 통계는 ipfstat(8)에서 열람 가능합니다.

call
    이 액션은 지정된 커널내 함수를 호출하기 위해서(때문에) 사용됩니다. 커널내 함수는, 특정의 호출 인터페이스를 만필요가 있습니다. 커스터마이즈 한 액션과 시멘틱스를 실장해, 이용 가능한 액션을 보충할 수가 있습니다. 지식이 있는 해커가 사용하는 기능이며, 현재로서는 문서화 되고 있지 않습니다.

skip <n>
    필터에, 다음의 n 필터 룰을 스킵 시킵니다. 스킵 되는 범위의 룰에 삽입 또는 제거가 있었을 경우, n 의 값은 적절히 조정됩니다.

auth
    이것에 의해, 유저 공간 프로그램을 실행해 정당성을 확인하는 패킷 정보를 기다리는 것으로, 인증할 수 있습니다. 프로그램이 커널에 대해서 패킷 통과를 허락하는지 아닌지의 실제의 플래그를 돌려줄 때까지 , 패킷은 내부 버퍼에 보관 유지됩니다. 패킷 통과를 허락하기 전 또는 인식되지 않는 송신원으로부터의 패킷을 커널에 떨어뜨리도록 지시하기 전에, 이러한 프로그램은, 송신원주소를 볼지도 모르고, 유저로부터의 (패스워드등의) 어떤 종류의 인증을 요구할지도 모릅니다.

preauth
    이 클래스의 패킷에 대해서는, 한층 더 명확화를 위해서(때문에) 이미 인증된 리스트를 봐야 하는 것이라고, 필터에 지시합니다. 더욱 매치 하는 룰이 발견되지 않으면 패킷은 떨어뜨려집니다 (FR_PREAUTH 는 FR_PASS 와 같지는 않습니다). 더욱 매치 하는 룰이 발견되면(자), 그 결과가 사용됩니다. 이것이 사용되는 상황은, 유저가 파이어 월(fire wall)에로그인 해, 이 유저에 관한 일시적인 룰을 설정하는 것 같은 경우입니다.

다음의 말은 in 나 out 의 언젠가일 필요가 있습니다. 커널 내부를 통과하는 패킷은, 내향 (인터페이스에서 수신되었다 (뿐)만으로, 커널의 프로토콜 처리부에 향해 이동하고 있다)인가, 밖으로 향한 (프로토콜 스택에 의해 송출 또는 전송 되어 인터페이스로 향하고 있다) 인가의 머지않아인가입니다. 각 필터 룰이 입출력의 어느 쪽 측에 적용되는지를, 명시적으로 나타낼 필요가 있습니다.

옵션

옵션의 일람은 짧고, 사실 모두 생략 가능합니다. 옵션이 사용되는 곳은, 여기에 나타내는 순서로 놓여질 필요가 있습니다. 다음의 옵션이 현재 서포트되고 있습니다:

log 마지막에 매치 하는 룰의 경우, 패킷 헤더가 ipl 로그에 기입해집니다 (후술의 로깅절 참조).

quick
    필터를 고속화하거나 후속의 룰보다 우선시키기 위해서(때문에), 룰의 「쇼트 컷」을 허락합니다. 패킷이 quick 의 표가 붙은 필터 룰에 매치 하는 경우, 이 룰이 마지막에 체크되는 룰이 되어, 「합선 (short-circuit)」패스에 의해 후속의 룰이 이 패킷에 대해서 처리되지 않게 됩니다. (현재의 룰이 적용된 후에) 패킷의 현재 상태가, 패킷이 통과될까 블록 될까를 결정합니다.

    이 옵션이 지정되지 않으면 룰은 「계속(fall-through)」룰로 여겨집니다. 즉, 매치의 결과 (블록/통과)가 보존되어 한층 더 매치이 있을까를 보기 (위해)때문에 처리가 계속됩니다.

on  매치 수속에 인터페이스명을 짜넣습니다. 인터페이스명은 "netstat -i" 로 표시할 수 있습니다. 이 옵션을 사용하면(자), 지정한 방향 (입출력)으로 이 인터페이스를 통과하는 패킷 에 대해서만, 이 룰이 매치 합니다. 이 옵션이 지정되지 않으면 룰은 이 패킷이 놓여진 인터페이스에 의존하지 않고 (즉 전인터페이스에) 적용됩니다. 필터 룰 세트는 전인터페이스에 공통이며, 각 인터페이스에 대해서 필터 리스트를 가지는 것은 아닙니다.

    이 옵션은 특히, 단순한 IP 사칭 (IP spoofing)에 대한 방어로서 유용합니다: 지정한 인터페이스상에서, 지정한 송신원주소이라고 되는 입력 패킷만을 통해, 다른 패킷을 로그 하거나 드롭 할 수가 있습니다.

dup-to
    패킷을 카피해, 복사한 패킷을 지정한 인터페이스에 대해서 밖으로 향한에 보냅니다. 또, 행선지 IP 주소를 지정해, 변경할 수가 있습니다. 네트워크스니퍼를 사용해, 호스트외에서 로그 하기 위해서 유용합니다.

to  지정한 인터페이스에 대해, 패킷을 밖으로 향한 큐에 이동시킵니다. 커널의 루팅을 회피하기 위해서 사용할 수 있어 패킷에 대한 나머지의 커널 처리를 우회도로 하기 위해서도 사용할 수 있습니다 (내향 룰에 적용되었을 경우). 따라서, 라우터가 아니고, 필터링 허브나 스윗치와 같이, 투과적으로 동작하는 파이어 월(fire wall)를 구축할 수가 있습니다. fastroute 키워드는, 이 옵션의 동의어입니다.

매칭 파라미터

이 마디에 기재되어 있는 키워드는, 룰이 매치 하는지 아닌지를 결정할 때, 패킷의 어느 속성을 사용하는지를 기술하기 위해서 사용됩니다. 이하의 범용 속성이 매칭에 사용할 수 있어 이 순서로 사용할 필요가 있습니다:

tos 다른 서비스형 (Type-Of-Service) 치를 가지는 패킷을 필터 할 수 있습니다. 이 위, 개개의 서비스 레벨이나 편성으로 필터 할 수 있습니다. TOS 마스크에 대한 값은, 16 진수 또는 10 진수의 정수로 표현됩니다.

ttl 패킷을 생존 시간 (Time-To-Live) 치로 선택할 수도 있습니다. 필터 룰로 주어지는 값은, 매치을 하는 패킷의 값과 엄밀하게 성냥 할 필요가 있습니다. 이 값은, 10 진수의 정수에서만 줄 수가 있습니다.

proto
    특정의 프로토콜에 대해서 매치 할 수가 있습니다. /etc/protocols 중의 전프로토콜명이 인식되고, 사용 가능합니다. 또, 프로토콜을 10 진수로 지정할 수도 있습니다. 이것에 의해, 당신 독자적인 프로토콜이나 새로운 프로토콜이기 (위해)때문에 리스트가 낡아서 게재되어 있지 않은 것에 대해, 매치 하는 룰을 작성할 수 있습니다.

    TCP 또는 UDP 패킷에 매치 하는, 특수한 프로토콜 키워드 tcp/udp 를 사용할 수가 있습니다. 이 키워드는, 같은 룰을 얼마든지 쓰지 않아도 좋게 하기 위한(해), 추가되었습니다.

from 와 to 의 키워드는, IP 주소 ( 및 생략 가능한 포트 번호)와 매치 시키기 위해서(때문에) 사용됩니다. 송신원과 송신지의 「양쪽 모두의」파라미터를 지정할 필요가 있습니다.

IP 주소의 지정 방법은, 다음의 2 개 중 머지않아인가입니다: 수치에 의한 주소/마스크 또는, 호스트명 mask 넷 마스크. 호스트명은, hosts 파일 또는 DNS 중 (설정이나 프로그램 라이브러리에 의존합니다) 의 유효한 호스트명인가, 닷 첨부 수치 형식입니다. 네트워크 지정으로서 특별한 기법은 없습니다만, 네트워크명은 인식됩니다. 필터 룰을 DNS 에 의존시키면(자) 공격의 여지를 도입해 버리므로, 권유받지 않습니다.

호스트명에는 특수한 any 가 용서되어 0.0. 0.0/0 으로 인식됩니다 (후술의 마스크 서식 참조). 이것은 전 IP 주소에 매치 합니다. "any" 만이 마스크를 암묵적으로 지정하기 때문에, 다른 상황에서는, 호스트명은 마스크와 함께 지정할 필요가 있습니다. 호스트와 마스크에 대해서 "any" 를 지정할 수 있지만, 이 언어에 대해서는, 의미를 가지지 않게 됩니다.

수치 포맷 "x/y" 는, 1 의 비트가 MSB 로부터 개시해 y 개 연속하는 마스크의 생성을 나타냅니다. 따라서, y 의 값이 16 인 경우에는, 0xffff0000 가 됩니다. 상징적인 "x mask y" 는, 마스크 y 가 닷 첨부 IP 표현, 또는 0x12345678 의 형식의 16 진수인 것을 나타냅니다. 비트 마스크가 가리키는 IP 주소의 전비트와 패킷의 주소가, 엄밀하게 매치 할 필요가 있습니다; 현재, 매치의 의미를 반전하는 방법은 않고, 비트 마스크에서 용이하게 표현 가능하지 않다 IP 주소 범위에 매치 시키는 방법도 없습니다 (비유한다면, 여기까지 실현되면(자), 이미 아침 식사라고는 할 수 없네요).

송신원과 송신지의 어느 쪽인지 또는 양자에게 port 매치를 포함한 경우, TCP 와 UDP 의 패킷 에 대해서만 적용됩니다. proto 매치 파라미터가 없는 경우, 어느 쪽의 프로토콜의 패킷도 비교됩니다. 이것은,"proto tcp/udp" 와 등가입니다. port 의 비교를 실시할 때는, 서비스명 및 수치의 포트 번호의 어디라도 사용할 수 있습니다. 포트의 비교를 실시할 때, 수치 형식을 비교 연산자와 함께 사용하거나 포트 범위를 지정하거나 할 수 있습니다. 포트가 from 오브젝트의 일부로서 등장하는 경우, 송신원포트 번호에 매치 합니다. 포트가 to 오브젝트의 일부로서 등장하는 경우, 송신지 포트 번호에 매치 합니다. 한층 더 정보는 사용예를 참조해 주세요.

all 키워드는, 본질적으로, 다른 매치 파라미터를 수반하지 않는 "from any to any" 의 동의어입니다.

송신원 및 송신지의 매치 파라미터의 뒤에, 다음의 추가의 파라미터를 사용 가능합니다:

with
    어떤 종류의 패킷만이 가지는 특수한 속성에 매치 하는 경우에 사용합니다. 일반적으로, IP 옵션이 존재하는 경우에 매치 시키려면 , with ipopts (을)를 사용합니다. 완전한 헤더를 격납하려면 단인가 지나는 패킷에 매치 시키려면 , with short 를 사용합니다. 단편화 된 패킷에 매치 시키기 위해서(때문에)는, with frag 를 사용합니다. 더욱, IP 옵션 고유의 필터링에 관해서는, 각 옵션을 열거 가능합니다.

    with 키워드의 뒤에 파라미터를 계속하기 전에, 말 not 또는 no 를 삽입해, 옵션이 존재하지 않는 경우에게만 필터 룰이 매치 하도록 할 수 있습니다.

    with 절을 연속해 기술하는 것이 허락됩니다. 또, 키워드 and 를, with 대신에 사용할 수가 있습니다. 이것은, 순수하게 가독성 향상을 위해입니다 ("with ... and ..."). 복수의 마디를 열거했을 때, 모든 것이 매치 할 경우에, 룰이 성냥 합니다.

flags
    TCP 필터링에 대해서만 유효합니다. 사용 가능한 레터는, TCP 헤더에서 설정 가능한 플래그의 1 개를 표현합니다. 관련은 다음과 같습니다:

        F - FIN
        S - SYN
        R - RST
        P - PUSH
        A - ACK
        U - URG

    여러가지 플래그 심볼을 조합해 사용할 수 있기 때문에, "SA" 는 패킷중의 SYN-ACK 의 편성을 표현합니다. "SFR" 등의 편성의 지정을 제한하는 것은 없습니다. 이 편성은, 규칙을 지키고 있는 TCP 실장에서는 통상 생성되지 않습니다. 그렇지만, 이상을 피하기 위해서(때문에), 어느 플래그에 대해서 필터링 하고 있는지를 나타낼 필요가 있습니다. 이 때문에, 어느 TCP 플래그를 비교하는 것인가 (즉, 어느 플래그를 중요라고 생각하는지)(을)를 나타내는 마스크를 지정할 수 있습니다. 이것은, 매치 대상의 TCP 플래그 집합의 뒤에,"/<flags>" 를 붙이는 것으로 실현될 수 있습니다. 예를 들면:

	... flags S
			# "flags S/AUPRFS" 가 되어, SYN 플래그 「마셔」
			# 하지만 설정되어 있는 패킷에 매치 합니다.
	... flags SA
			# "flags SA/AUPRFSC" 가 되어, SYN 및 ACK 의 플래그
			# 만이 설정되어 있는 패킷에 매치 합니다.
	... flags S/SA
			# SYN-ACK 의 조 가운데, SYN 플래그만이 설정되어 있다
			# 패킷에게만 매치 합니다. 이것은 공통의 「확립」
			# 키워드 동작입니다. "S/SA" 는 SYN 와 ACK 의 조의
			# 「양쪽 모두」가 설정되어 있으려면  매치 「하지 않습니다」
			# 하지만,"SFP" 에는 매치 「합니다」.

icmp-type
    proto icmp 와 함께 사용했을 경우에게만 유효하고, flags 와 함께 사용해 「되지 않습니다」. 많은 타입이 있어, 이 언어로 인식되는 단축형이나, 이것에 관련지을 수 있었던 수치로 지정할 수 있습니다. 보안의 관점으로부터 봐 가장 중요한 것은 ICMP 리디렉트입니다.

히스토리 보존

필터 룰로 설정 가능한, 최후로부터 2 번째의 파라미터는, 패킷의 히스토리 정보를 기록하는지 아닌지, 및 어떠한 히스토리를 보존할까입니다. 이하의 정보를 보존할 수 있습니다:

state
    통신 세션의 플로우(flow) 정보를 보존합니다. TCP, UDP, ICMP 의 각 패킷에 관해서 상태가 보존됩니다.

frags
    단편화 된 패킷의 정보를 보존합니다. 이 정보는, 후에 단편화할 때에 사용합니다.

이것들에 매치 하는 패킷은 소 통해, 액세스 제어 리스트를 통하지 않습니다.

그룹
파라미터의 마지막 조는 필터 룰의 「그룹」을 제어합니다. 다른 그룹이 지정되지 않는 이상 디폴트에서는, 전필터 룰은 그룹 0 에 놓여집니다. 비디폴트의 그룹에 룰을 추가하려면 , 그룹의 「머리 (head)」를 작성하는 곳(중)으로부터, 그룹을 개시합니다. 패킷이 그룹의 「머리」의 룰에 매치 하는 경우, 필터 처리는 그 그룹에 바뀌어, 그 룰을 그 그룹의 디폴트로서 사용합니다. quick 를 head 룰과 함께 사용하는 경우, 그 그룹의 처리로부터 돌아올 때까지는, 룰 처리는 정지하지 않습니다.

어느 룰은, 신규 그룹의 머리로 있는 곳개, 비디폴트 그룹의 멤버인 것이 가능합니다 (head 와 group 를 동일 룰내에서 동시에 사용 가능합니다).

head <n>
    신규 그룹 (번호 n)을 작성하는 것을 나타냅니다.

group <n>
    이 룰을, 그룹 0 이 아니고, 그룹 (번호 n)에 두는 것을 나타냅니다.

로깅

log 액션 또는 옵션에서, 패킷의 로그를 실시할 때, 패킷의 헤더가 ipl 파켓트로깅 의사 디바이스에 기입해집니다. log 키워드의 직후에, 다음의 수식 어구를 (이 순서로) 사용할 수 있습니다:

body
    패킷의 내용의 최초의 128 바이트를, 헤더의 다음에 로그 하는 것을 나타냅니다.

first
    로그가 "keep" 옵션과 함께 사용되는 경우, 본옵션도 지정하는 것을 권합니다. 이것에 의해, 방아쇠가 되는 패킷만을 로그 해, 이 후에 상태 정보에 매치 하는 전패킷을 로그 하지 않게 됩니다.

or-block
    하등의 이유로 필터가 로그를 잡히지 않는 경우 (로그 독해가 매우 늦은 경우 등), 이 패킷에 대한 이 룰의 액션이 block 였다고 해석 시킵니다.

level <loglevel>
    이 패킷의 정보 로그에, 어느 로그 퍼실리티와 우선도를 사용하는지, 또는 디폴트 퍼실리티로 어느 우선도를 사용하는지를 지정합니다. 정보 로그에는, ipmon 의 -s 옵션을 사용합니다.

이 디바이스에 기입해지는 레코드의 포맷에 대해서는 ipl(4)를 참조해 주세요. 이 로그를 읽어내 정형하려면 , ipmon(8)를 사용합니다.

사용예

quick 옵션은 다음과 같은 룰에 대해서 형편이 좋습니다:
block in quick from any to any with ipopts

이것은, 표준적인 길이가 아닌 헤더를 가지는 (IP 옵션을 가진다) 패킷에 매치 해, 이 앞의 룰 처리를 실시하지 않고 , 매치이 발생한 것과 패킷을 블록 해야 할것을 기록합니다.

다음과 같은 「계속」룰의 해석에 의해:

        block in from any to any port < 6000
        pass in from any to any port >= 6000
        block in from any to any port > 6003

범위 6000-6003 가 용서되어 외는 허락하지 않게 설정할 수 있습니다. 최초의 룰의 효과보다, 후속 룰이 우선하는 것에 주의해 주세요. 같은 것을 실시하는, 다른 (용이한) 방법은 다음과 같습니다:

        block in from any to any port 6000 <> 6003
        pass in from any to any port 5999 >< 6004

효과를 갖게하기 위해서(때문에)는, "block" 및 "pass" 의 양쪽 모두를 여기에 쓸 필요가 있습니다. 왜냐하면,"block" 액션에 매치 하지 않는 것이 통과를 의미하는 것은 아니고, 룰이 효과를 가지지 않는 것을 의미할 뿐(만큼)이기 때문입니다. 포트가 1024 미만의 것을 허락하려면 , 다음과 같은 룰을 사용합니다:

        pass in quick from any to any port < 1024

이것은, 최초의 블록의 전에 둘 필요가 있습니다. le0/le1/lo0 로부터의 모든 내향 패킷을 처리해, 디폴트에서는 내향의 전패킷을 블록 한다 신규 그룹을 작성하려면 , 다음과 같이 합니다:

       block in all
       block in quick on le0 all head 100
       block in quick on le1 all head 200
       block in quick on lo0 all head 300

그리고, le0 로 ICMP 패킷만을 허락하려면 , 다음과 같이 합니다:

       pass in proto icmp all group 100

le0 로부터의 내향 패킷만이 그룹 100 으로 처리되기 때문에, 인터페이스명을 재차 지정할 필요가 없는 것에 주의해 주세요. 같이 다음과 같이 TCP 등의 처리를 분해할 수 있습니다:

       block in proto tcp all head 110 group 100
       pass in from any to any port = 23 group 110

맨 마지막 줄을, 그룹을 사용하지 않고 기술하면(자), 다음과 같이 됩니다:

       pass in on le0 proto tcp from any to any port = telnet

"port = telnet" 와 기술하고 싶은 경우에는,"proto tcp" 를 지정할 필요가 있는 것에 주의해 주세요. 왜냐하면, 파서는 자기에 근거해 룰을 해석해, 지정된 프로토콜에 의해 전서비스/포트명을 수식하기 때문입니다.

관련 파일
/dev/ipauth
/dev/ipl
/dev/ipstate
/etc/hosts
/etc/services

관련 항목
ipftest(1), iptest(1), mkfilters(1), ipf(4), ipnat(5), ipf(8), ipfstat(8)