Linux에서는 일반적으로 일반적인 필터링을 위해 "필터" 테이블을 사용합니다.
iptables --table filter --append INPUT --source 1.2.3.4 --jump DROP
iptables --table filter --append INPUT --in-interface lo --jump ACCEPT
아래 netfilter 흐름도에 따르면 패킷은 먼저 "원본" 테이블을 통과합니다.
그래서 우리는 다음과 같이 쓸 수 있습니다:
iptables --table raw --append PREROUTING --source 1.2.3.4 --jump DROP
iptables --table raw --append PREROUTING --in-interface lo --jump ACCEPT
- 패킷은 더 빠르게 처리되며 conntrack+mangle+nat+routing을 거칠 필요가 없습니다. 따라서 약간 적은 양의 CPU/메모리가 사용됩니다(이는 iptable_raw 모듈을 로드하여 약간 보상됩니다).
- 필터링/전달을 위해 동일한 규칙을 추가할 필요가 없기 때문에 상자가 라우터이기도 한 경우 규칙은 하나뿐입니다(분명히 모든 규칙에 적용되지는 않음).
방금 간단한 테스트를 해보았는데 아주 잘 작동했습니다.
내가 찾은 문서에는 항상 엄격한 경우에 원시 테이블을 사용하는 방법이 설명되어 있습니다. 그러나 누구도 사소한 이유조차 제시하지 않았습니다.
질문: 독단적인 것 외에 원시 테이블을 사용하지 않는 이유가 있나요?
답변1
~에서iptables:
raw: This table is used mainly for configuring exemptions from connection
tracking in combination with the NOTRACK target. It registers at the
netfilter hooks with higher priority and is thus called before
ip_conntrack, or any other IP tables.
It provides the following built-in chains:
- PREROUTING (for packets arriving via any network interface)
- OUTPUT (for packets generated by local processes)
분석하다:
따라서 RAW 테이블은 conntrack보다 앞에 있으며 netfilter에서 추적하고 싶지 않은 패킷에 NOTRACK 플래그를 설정하도록 설계되었습니다.
-j 대상은 NOTRACK으로 제한되지 않으므로 CPU/메모리 소비를 줄여 원시 테이블에서 패킷을 필터링할 수 있습니다.
대부분의 경우 서버는 모든 연결을 추적할 필요가 없습니다. 이전에 설정된 연결을 기반으로 iptables의 패킷을 필터링해야 하는 경우에만 추적이 필요합니다. 포트 80(및 가능하면 21)을 여는 등 단순한 목적으로만 사용되는 서버에서는 이 작업이 필요하지 않습니다. 이러한 경우 연결 추적을 비활성화할 수 있습니다.
그러나 NAT 라우터를 실행하려고 하면 상황이 좀 더 복잡해집니다. NAT를 수행하려면 외부 네트워크에서 내부 네트워크로 패킷이 전달될 수 있도록 이러한 연결을 추적해야 합니다.
NOTTRACK을 사용하여 전체 연결을 설정하면 연결된 연결도 추적할 수 없으며 conntrack 및 nat 도우미는 추적되지 않은 연결에 대해 작동하지 않으며 관련 ICMP 오류도 작동하지 않습니다. 즉, 수동으로 켜야 합니다. FTP 및 SCTP와 같은 복잡한 프로토콜이 관련되어 있으면 관리하기 어려울 수 있습니다.
예:
예를 들어 트래픽이 많이 발생하는 라우터가 있고 라우팅되는 트래픽이 아닌 들어오고 나가는 트래픽에 대해 방화벽을 설정하려는 경우가 있습니다. 그런 다음 NOTRACK 플래그를 설정하여 전달된 트래픽을 무시하여 처리 능력을 절약할 수 있습니다.
NOTRACK을 사용할 수 있는 또 다른 예는 트래픽이 많은 웹 서버가 있는 경우 모든 로컬 소유 IP 주소 또는 실제로 웹 트래픽을 제공하는 IP 주소에서 포트 80 추적을 끄는 규칙을 설정할 수 있다는 것입니다. 그런 다음 네트워크 트래픽을 제외한 다른 모든 서비스에 대한 상태 추적을 즐길 수 있으며, 이는 이미 과부하된 시스템에서 처리 능력을 일부 절약할 수 있습니다.
예 -->개인 네트워크를 위한 반상태 비저장 Linux 라우터 실행
결론적으로: 원시 테이블을 사용하지 않을 이유는 없지만 원시 테이블과 함께 NOTRACK 대상을 사용할 때 주의해야 할 몇 가지 이유가 있습니다.