Linux 커널 영역에서 사용되는 패킷 필터링 도구를 netfilter라고 한다.
netfilter를 조작하기 위한 사용자 영역에서 사용되는 유틸리티는 iptables, ebtables, arptables 등이 있다.
netfilter를 사용하하려면 커널 Config 설정에서 CONFIG_NETFILTER가 켜져 있어야 한다.
커널 Config 설정에서 netfilter 설정은 다음과 같다.
Networking options
--->Network packet filtering framework (Netfilter)
---> Ethernet Bridge tables (ebtables) support
netfilter는 5개의 Hooking 지점을 제공한다.
iptables는 총 5가지 Table을 제공한다. 주로 filter, nat, mangle 3가지 table을 사용한다.
Option | |
-A, --append | 규칙을 추가할 때 |
-D, --delete | 규칙을 삭제할 때 (일치되는 규칙을 찾거나, 선택한 Chain의 번호로 삭제 가능) |
-I, --insert | 규칙을 삽입할 때, 번호가 1번일 경우 Chain의 가장 위쪽에 삽입된다. |
-R, --replace | 선택한 Chain의 규칙을 교체할 때 |
-L, --list | 선택한 Chain의 list를 보여줌. 선택한 Chain이 없을 때는 모든 Chain을 보여줌. |
-F, --flush | Chain의 규칙을 비울 때 |
-N, --new-chain | 새로운 Chain을 생성할 때 |
-X, --delete-chain | Chain을 삭제할 때 |
-P, --policy | Chain의 정책을 설정할 때 |
-E, --rename-chain | 추가한 Chain에 대해 이름을 변경할 때 |
ebtables는 이더넷 프레임관점에서 netfilter rule을 설정하는 사용자 영역 유틸리티이다. iptables와 유사하지만 이더넷 프로토콜이 IP 프로토콜보다 훨씬 간단하기 때문에 덜 복잡하다.
ebtables에는 총 3가지 Table을 제공한다.
IPv6 | |
--ip6-source, --ip6-src[/mask] | IPv6 출발지 주소 |
--ip6-destination, --ip6-dst[/mask] | IPv6 목적지 주소 |
--ip6-tclass | Pv6 traffic 클래스(hex값) |
--ip6-protocol, --ip6-proto | IP 프로토콜 |
--ip6-source-port, --ip6-sport[:port] | 출발지 포트 또는 포트 범위, protocol 6(TCP), 17(UDP), 33(DCCP), 132(SCTP)만 해당 옵션 사용 가능함. |
--ip6-destination-port, --ip6-dport[:port] | 도착지 포트 또는 포트 범위, protocol 6(TCP), 17(UDP), 33(DCCP), 132(SCTP)만 해당 옵션 사용 가능함. |