IP6FW(8)

명칭
ip6fw - IPv6 파이어 폴용 제어 유틸리티

서식
ip6fw [-q] [ -p preproc [-D macro[=value]] [-U macro]] pathname ip6fw [-f | -q] flush ip6fw [-q] zero [number ...] ip6fw delete number ... ip6fw [-aftN] list [number ...] ip6fw [-ftN] show [number ...] ip6fw [-q] add [number] action [log] proto from src to dst [via name | ipv6no] [options]

해설
간단하게 설정하기 위해서, 룰을 파일에 격납해, 최초의 서식에 나타내도록(듯이) ip6fw 에 처리시키는 것이 가능합니다. 절대 pathname (을)를 사용할 필요가 있습니다. 파일은, 1 행씩 읽혀 ip6fw 유틸리티에의 인수에 적용됩니다.

옵션으로서 프리프로세서를 -p preproc 그리고 지정 가능하고, 여기를 pathname 하지만 파이프 됩니다. 유용한 프리프로세서에는 cpp(1) (와)과 m4(1) (이)가 있습니다. preproc 의 최초의 캐릭터가 slash (‘/’) 그리고 개시하지 않는 경우, 통상의 PATH 의 이름 검색이 실행됩니다. ip6fw 실행시에는 ( 아직) 전파일 시스템이 mount되어 있지 않은 환경에 있어서는, 주의가 필요합니다 (예를 들면 NFS 경유로 mount 하는 경우). 한 번 -p 하지만 지정되면(자), 옵션의 -D (와)과 -U 의 지정을 계속하는 것이 가능하고, 이것들은 프리프로세서에게 건네집니다. 이것에 의해, 설정 파일 (로컬 호스트명에 의한 조건등 )이 유연하게 되어, IP 주소등의 빈번하게 필요한 인수를 집중관리 가능해집니다.

ip6fw 코드는, 각 패킷에 대해서 매치 하는 것이 발견될 때까지 룰 리스트를 주사 하는 것에 의해 동작합니다. 룰에는 모두 2 개의 관련이 있는 카운터가 있습니다. 패킷 카운터와 바이트 카운터입니다. 이러한 카운터는 패킷이 룰에 매치 할 경우에 갱신됩니다.

룰은, 1 에서 65534 까지의 “행 번호” 그리고 서열이 붙여져 있어 룰을 결정하거나 삭제하거나 하는데 사용됩니다. 룰은 승순으로 시험 받아 패킷에 최초로 매치 한 룰이 적용됩니다. 복수의 룰이 같은 행 번호를 공유할 수 있습니다. 이 경우, 추가한 차례로 룰이 적용됩니다.

번호를 매기지 않고 룰을 더했을 경우, 그 직전의 룰보다 100 큰 번호가 붙여집니다. 정의된 룰 번호의 최대치가 65434 보다 큰 경우, 새롭게 정의되는 룰은, 룰의 마지막에 추가됩니다.

delete 조작에서는, 그것이 존재하는 경우에는, number (을)를 행 번호 짐최초의 룰이 삭제됩니다.

list 명령은, 현재의 룰 세트를 출력합니다.

show 명령은 `ip6fw -a list'와 등가입니다.

zero 조작은, 룰 번호 number 에 관련 지을 수 있었던 카운터를 0 으로 합니다.

flush 조작은, 모든 룰을 삭제합니다.

‘#’ 그리고 시작되는 명령 및 공백만의 커멘드는 보는거야 무시됩니다.

다음의 룰은 반드시 존재합니다:

    65535 deny all from any to any

이 룰은 디폴트의 포리시입니다. 즉, 아무것도 허락하지 않는다고 하는 것입니다. 룰을 설정할 때에 당신이 해야 할 일은, 이 포리시를 필요하게 맞추어 변경한다고 하는 것입니다.

다음의 옵션을 사용할 수 있습니다:

-a  리스트중에, 카운터치를 표시합니다. “show” 명령을 참조해 주세요.

-f  잘못해 사용하면(자) 문제를 일으킬 가능성이 있다 명령 (즉, flush)의 확인을 취하지 않습니다. 주의, 프로세스에 단말을 할당할 수 있지 않은 경우는, 암묵중에 이 옵션이 지정되어 있습니다.

-q  add 조작이나 zero 조작, flush 조작을 실시하고 있는 한중간에, 그 액션에 대해서 아무것도 표시하지 않습니다 (암묵중에 '-f'가 지정되어 있습니다). 이것은, 리모트 로그인시의 세션으로 스크립트내에서 복수의 ip6fw 명령을 실행하거나 (예를 들면, sh /etc/rc.firewall 와 같이), 많은 ip6fw 룰 파일을 처리하거나 하는 것으로 룰을 조절할 경우에 편리합니다. 통상 모드 (장황)로 flush 조작을 실시하면, 메세지가 출력 됩니다. 룰이 모두 flush 되므로, 로그인 세션에 메세지를 보내지 못하고, 로그인 세션도 닫아 버립니다. 그 때문에, 나머지의 룰 세트는 처리되지 않게 되어 버립니다. 복구에는, 콘솔에의 액세스가 필요하게 됩니다.

-t  list 하고 있는 한중간에, 마지막에 매치 했을 때의 타임 스탬프를 표시합니다.

-N  출력으로, 주소 및 서비스명을 해결하려고 합니다.

액션 (은)는 다음과 같습니다.

allow
    룰에 매치 한 패킷을 허가합니다. 그리고 탐색을 종료합니다. 별명은 pass, permit, accept 입니다.

deny
    룰에 매치 한 패킷을 버립니다. 그리고 탐색을 종료합니다. drop 하 deny 의 별명입니다.

reject
    (비추천입니다) 룰에 매치 한 패킷을 버려, ICMPv6 의 host unreachable notice 메세지를 보내려고 합니다. 그리고 탐색을 종료합니다.

unreach code
    룰에 매치 한 패킷을 버려, ICMPv6 의 unreachable notice 메세지를 코드 code 그리고 보내려고 합니다. 여기서, code (은)는 0 에서 255 까지의 번호 혹은 다음의 별명 중 머지않아인가입니다: noroute, admin, notneighbor, addr, noport 그리고 탐색을 종료합니다.

reset
    TCP 패킷만입니다. 룰에 매치 한 패킷을 버려, TCP reset (RST) notice 메세지를 보내려고 합니다. 그리고 탐색을 종료합니다 (아직 동작하지 않습니다)

count
    룰에 매치 한 모든 패킷에 대한 카운터를 갱신합니다. 탐색은, 다음의 룰로 계속합니다.

skipto number
    number 보다 작은 번호가 붙은 룰을 스킵 합니다. 탐색은 number 이상의 번호가 붙은 룰로 계속합니다.

커널을 IPV6FIREWALL_VERBOSE 돌출하고 컴파일 했을 경우, 패킷이 “log” 키워드포함의 룰에 매치 했을 때 또는 clear/resetlog 가 실행되었을 때에는, 메세지가 syslogd(8) 에 기록되는지, 이것이 실패했을 때에는 콘솔에 메세지가 표시됩니다. 커널을 IPV6FIREWALL_VERBOSE_LIMIT 옵션 돌출하고 컴파일 했을 경우, 특정의 체인 엔트리에 대해서 이 옵션으로 지정한 수만큼 패킷을 받은 후는 로그를 기록하지 않습니다. 이 제한으로 도달했을 경우, 제한과 룰 번호가 기록됩니다. 이 엔트리에 대한 카운터를 클리어 하는 것으로 로그의 기록을 재개할 수 있습니다.

syslogd(8) 로그 및 디폴트의 로그의 제한을, sysctl(8) 인터페이스를 개입시켜 동적으로 조정할 수 있습니다.

proto (은)는 다음과 같습니다.

ipv6
    모든 패킷이 매치 합니다. 별명 all (은)는 같은 효과를 가집니다.

tcp TCP 패킷만이 매치 합니다.

udp UDP 패킷만이 매치 합니다.

ipv6-icmp
    ICMPv6 패킷만이 매치 합니다.

<number|name>
    지정한 프로토콜만이 매치 합니다 (완전한 리스트는 /etc/protocols (을)를 참조해 주세요).

src 및 dst (은)는 다음과 같습니다.

<address/prefixlen>
    [ports]

<address/prefixlen> (은)는 다음과 같이 지정할 수 있습니다:

ipv6no
    fec0::1:2:3:4 그렇다고 하는 형식의 IPv6 넘.

ipv6no/prefixlen
    fec0::1:2:3:4/112 (와)과 같은 형식의 프레픽스장을 가진 IPv6 넘.

“not” 수식자를 주소의 전에 붙이는 것으로, 매치의 의미를 반전시킬 수가 있습니다. 이것에 의해, 다른 모든 주소가 대신에 매치 하게 됩니다. 이것은, 포트 번호의 선택에는 영향 없습니다.

TCP 및 UDP 프로토콜에서는, 옵션으로 ports 하지만 다음과 같이 지정할 수 있습니다:

{port|port-port}[, port[,...]]

( /etc/services 로부터 서비스명을, 수치에 의한 포트 번호 대신에 사용할 수 있습니다. 범위는 최초의 값으로서의 보고 지정할 수 있어 포트 리스트장은 IPV6_FW_MAX_PORTS ( /usr/src/sys/netinet6/ip6_fw.h 그리고 지정) 개의 포트까지 제한되고 있습니다.

0 이 아닌 오프셋(offset)를 가진다 (즉, 최초의 fragment는 아니다) fragment 패킷은, 1 개(살) 이상의 포트가 열거된 룰에는 절대로 매치 하지 않습니다. fragment 패킷의 매치에 대한 자세한 것은 frag 옵션을 참조해 주세요.

룰은, 패킷이 입력될 때, 및 출력될 때, 혹은 그 양쪽 모두일 때 적용됩니다. in 키워드는, 입력 패킷에게만 룰이 매치 하지 않으면 안 되는 것을 나타내는 것입니다. out 키워드는, 출력 패킷에게만 룰이 매치 하지 않으면 안 되는 것을 나타내는 것입니다.

어느 인터페이스를 통과하는 패킷에 매치 하기 위해서는, via (을)를 사용해 다음과 같이 인터페이스를 지정해 주세요.

via ifX
    패킷은, 인터페이스 ifX (을)를 통하지 않으면 안됩니다.

via if*
    패킷은, 인터페이스 ifX (을)를 통하지 않으면 안됩니다. 여기서, X 는 임의의 유니트 번호입니다.

via any
    패킷은, 하등의 인터페이스를 통하지 않으면 안됩니다.

via ipv6no
    패킷은, IPv6 주소 ipv6no (을)를 가진 인터페이스를 통하지 않으면 안됩니다.

via 키워드를 사용하면(자), 해당 인터페이스는 항상 체크되게 됩니다. via 대신에 recv 혹은 xmit (을)를 사용하면(자), (각각) 수신 인터페이스 또는 송신 인터페이스만이 체크됩니다. 양쪽 모두를 지정하는 것으로, 수신 인터페이스, 송신 인터페이스의 양쪽 모두에 패킷을 매치 시킬 수가 있습니다. 예를 들면, 다음과 같이 합니다.

    ip6fw add 100 deny ip from any to any out recv ed0 xmit ed1

recv 인터페이스는, 입력 패킷 혹은 출력 패킷의 어느 쪽인지로 테스트됩니다. 이것에 대해서, xmit 인터페이스는, 출력 패킷으로 밖에 테스트되지 않습니다. 그 때문에, xmit (을)를 사용하는 경우는 언제라도 out 하지만 필요합니다 (그리고, in (은)는 부정합니다). xmit 혹은 recv (와)과 함께 via (을)를 지정하는 것은 부정합니다.

패킷에는, 수신 인터페이스 혹은 송신 인터페이스가 없다 일지도 모릅니다. 로컬 호스트로부터 송신된 패킷에는 수신 인터페이스가 없습니다. 그리고, 로컬 호스트에 향하여 송신된 패킷에는 송신 인터페이스가 없습니다.

추가의 options (은)는 다음과 같습니다.

frag
    패킷이 fragment이며, 게다가 데이터 그램의 최초의 fragment가 아니면 매치 합니다. frag (은)는, tcpflags 혹은 TCP/UDP 포트의 지정과 함께는 사용할 수가 없습니다.

in  패킷이 들어 오려 하고 있는 경우에 매치 합니다.

out 패킷이 나가려 하고 있는 경우에 매치 합니다.

ipv6options spec
    IPv6 헤더에, spec 그리고 지정된 콤마 단락의 옵션 리스트의 요소가 포함되어 있으면 매치 합니다. 서포트하고 있는 IPv6 옵션은 다음과 같습니다. hopopt (hop-by-hop 옵션 헤더), route (루팅 헤더), frag (fragment 헤더), esp (암호 유료 하중), ah (인증헤더), nonxt (다음 헤더 없음), 그리고 opts (목적지 옵션 헤더)입니다. 특정의 옵션이 없는 것은, “”! 그리고 나타냅니다 (아직 동작하고 있지 않습니다)

established
    RST 혹은 ACK 비트가 세트 되고 있는 패킷에 매치 합니다.

setup
    SYN 비트는 세트 되고 있지만 ACK 비트가 세트되어 있지 않다 패킷에 매치 합니다.

tcpflags spec
    TCP 헤더에, spec 그리고 지정된 콤마 단락의 플래그 리스트의 요소가 포함되어 있으면 매치 합니다. 서포트하고 있는 TCP 플래그는 이하와 같습니다. fin, syn, rst, psh, ack, 그리고 urg 입니다. 특정의 플래그가 없는 것은 “”! (을)를 사용해 나타냅니다. tcpflags 지정을 포함한 룰은, 0 이 아닌 오프셋(offset)를 가진 fragment 패킷에는 절대로 매치 하지 않습니다. fragment 패킷에의 매치에 관한 자세한 것은 frag 옵션을 참조해 주세요.

icmptypes types
    ICMPv6 의 타입이 types 리스트중에 있으면 매치 합니다. 리스트에는, 범위와 개개의 타입을 콤마로 단락지은 것을, 임의에 조합해 지정할 수 있습니다

대조표
여기에는, 당신이 룰을 디자인할 때에 고려해야 할 중요한 포인트를 몇개인가 말해 있습니다.

•   입력 및 출력 패킷의 양쪽 모두를 필터 하는 것이라고 하는 것을 잊지 말아 주세요. 대부분의 접속에는 양방향의 패킷이 필요합니다.

•   매우 주의 깊게 테스트하는 것을 잊지 말아 주세요. 테스트하려면 콘솔의 근처에서 실시한다는 것이 좋은 아이디어입니다.

•   루프백 인터페이스를 잊지 말아 주세요.

미조정
파이어 월(fire wall)가 항상 파기하는 패킷이 1 종류 있습니다. 그것은, fragment 오프셋(offset) 1 을 가진 IPv6 fragment입니다. 이것은 올바른 패킷입니다만, 사용 방법은 1 개 뿐입니다. 그것은, 파이어 월(fire wall)의 샛길을 찾으려고 하는 것입니다.

네트워크 넘어로 로그인하고 있는 경우는, ip6fw 의 KLD 버젼을 로드하는 것은, 아마 당신이 생각하고 있을 정도로는 간단하지 않을 것입니다 (서포트되고 있지 않습니다 ) 다음과 같은 명령행을 추천 합니다.

    kldload /modules/ip6fw_mod.o && \
    ip6fw add 32000 allow all from any to any

같은 상황으로, 같은 행으로

    ip6fw flush

(을)를 실시하는 일도 좋지 않는 아이디어입니다.

패킷 변환
서포트되고 있지 않습니다.

사용예
이 명령은, hacker.evil.org (으)로부터 wolf.tambov.su 의 telnet 포트에의 TCP 패킷 모든 것을, 이 호스트로 포워드 하지 않게 합니다.

    ip6fw add deny tcp from hacker.evil.org to wolf.tambov.su 23

다음의 명령은, hackers 네트워크 전체로부터 자호스트에의 접속을 무엇으로 저것 금지합니다.

    ip6fw add deny all from fec0::123:45:67:0/112 to my.host.org

이것은, 카운트치의 기록과 타임 스탬프 정보를 표시하기 위한 리스트 명령이 좋은 사용예입니다.

    ip6fw -at l

혹은, 타임 스탬프 없음의, 짧은 형식의 것은

    ip6fw -a l
입니다.

관련 파일
ip(4), ipfirewall(4), protocols(5), services(5), reboot(8), sysctl(8), syslogd(8)

버그
주의 !! 주의 !! 주의 !! 주의 !!

이 프로그램은, 당신의 컴퓨터를 꽤 사용할 수 없는 상태 (으)로 해 버릴 가능성이 있습니다. 처음으로 사용하려면 , 컴퓨터의 콘솔로 작업해 주세요. 또, 이해하고 있지 않는 것은 아무것도 하지 말아 주세요

체인 엔트리를 조작 / 추가하려면 , 서비스명 및 프로토콜명은 받아들일 수 없습니다.

저자
Ugen J. S. Antsilevich, Poul-Henning Kamp, Alex Nash, Archie Cobbs 입니다.

-nosplit API 는, BSDI 용으로 Daniel Boulet 하지만 쓴 코드에 따르고 있습니다.

역사
ip6fw 유틸리티는 최초로 FreeBSD 4.0 그리고 등장했습니다.