iptables 방화벽 규칙을 사용할 때 허용되는 모든 포트에서 NEW 상태를 주장하는 이유는 무엇입니까?


23

모든 패키지가 관련 연결을 허용하고 특정 서비스 포트가 새 연결에 연결되도록 iptables가 구성되는 경우가 종종 있습니다.

NEW를 언급 한 이유는 무엇입니까? 연결이 새로운 것이 아니라면 관련이 있다고 생각하므로 특정 포트 규칙은 어느 것도 실행하지 않습니다. 그렇다면 왜 프로토콜 및 포트 번호뿐만 아니라 NEW로 서비스 포트를 명시 적으로 정의해야합니까?

답변:


21

넷 필터 방화벽 (iptables)의 규칙은 순차적으로 점검되며 패킷의 운명 (ACCEPT, DROP, REJECT 등)은 첫 번째 일치 기준으로 결정됩니다.

방화벽을 상태로 가득 채우고 첫 번째 규칙을 일반적으로 만들면 -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT해당 단일 규칙 만 통과 한 후 서버에 대한 대부분의 합법적 인 트래픽이 허용됩니다. 해당 트래픽은 다른 규칙을 통과 할 필요가 없습니다.

룰베이스의 크기에 따라 방화벽 성능에 상당한 차이가있을 수 있습니다.

방화벽에서 이제 유효성을 검사해야하는 유일한 트래픽은 명시 적으로 새로운 연결입니다.

즉, 공용 웹 서버의 방화벽과 워크 스테이션에서 소수의 웹 마스터에 대한 액세스를 비교합니다.

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp -m multiport --dports 80,443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -m iprange --src-range 10.9.8.7-10.9.8.10 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited

합법적 인 패킷의 약 99 %가 설정된 연결에 속하며 첫 번째 규칙에만 적용됩니다. 해당 규칙과 일치하지 않는 패킷 중 대부분은 웹 사이트에 대한 새로운 연결이어야하며 멀티 포트 모듈은 단일 규칙에서 HTTP 또는 HTTPS에 대한 액세스 권한을 부여 할 수 있습니다. 웹 마스터는 ssh 및 sftp를 사용하여 고정 주소를 가진 여러 워크 스테이션에서 로그인하면 다른 모든 것은 거부됩니다.

TCP 포트에서 규칙을 논리적으로 정렬하는 방화벽 :

-A INPUT -p tcp  -m tcp --dport 22  --source 10.9.8.7 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 22  --source 10.9.8.8 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 22  --source 10.9.8.9 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 22  --source 10.9.8.10 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 443 -j ACCEPT

여기에서 액세스가 부여되기 전에 HTTP 웹 서버에 대한 모든 패킷을 5 개의 규칙에 따라 확인해야합니다. 그리고 더 많은 서비스를 서버에서 실행하면 예를 들어 fail2ban 또는 유사한 제품을 사용할 때 쉽게 50 개 이상의 규칙이 될 수 있습니다.


1
" 액세스가 첫 번째 일치 기준으로 허용된다 "고 말한 것을 제외하고는 훌륭한 답변입니다 (+1) . 첫 번째 일치 항목이 DROP 또는 REJECT 인 경우 액세스가 허용되지 않습니다. LOG 인 경우 나중에 일치하는 항목을 계속 찾아야합니다. 커스텀 체인이 관여하면 상황이 상당히 빨라질 수 있습니다. 나는 오히려 " 패킷의 운명은 첫-분포 적 일치에 기초하여 결정된다 "고 말할 것이다 .
MadHatter는 Monica를

5
related/established선이 있지만 후속 규칙이 주장하지 않는 경우를 반영 할 수 있습니까 NEW?
다니엘 Widrick

13

NEW 패킷이 새로운 연결을 시작했음을 의미합니다.

ip_conntrack_*방화벽을 상태 저장으로 만드는 커널 모듈에 의해 처리됩니다 . 상태 저장 방화벽은 트래픽 스트림을 볼 수 있습니다.

프로토콜과 포트 번호 만 지정하면 방화벽은 상태 저장이 아니라 상태 비 저장입니다. 패킷을 제한하거나 차단한다는 의미입니다. 이러한 유형의 방화벽은 데이터 흐름을 인식하지 못합니다.

좋은 예는 FTP입니다. 활성 FTP는 제어 채널에 포트 21을 사용하지만 데이터 채널에 포트 20을 사용합니다. 상태 저장 방화벽의 경우 포트 20은 포트 21에서 이전에 새로 설정된 연결과 관련되어 있으므로 포트 20을 명시 적으로 열 필요가 없습니다.

다음은 iptables매뉴얼 페이지 의 추출입니다 .

NEW-패킷이 새로운 연결을 시작했거나 양방향으로 패킷을 보지 못한 연결과 관련이 있음을 의미합니다.

ESTABLISHED-패킷이 양방향에서 패킷을 본 연결과 연관되어 있음을 의미합니다.

관련됨-패킷이 새 연결을 시작하지만 FTP 데이터 전송 또는 ICMP 오류와 같은 기존 연결과 연결되어 있음을 의미합니다.


1
포트 20과 포트 21을 '연결'하는 메커니즘은 무엇입니까? 열린 IP 연결을 다른 포트로 전송할 수 있습니까?
dronus

nf_conntrack_ftp.ko
mateusza

7
-A INPUT -m tcp -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -DROP

위의 규칙 세트는 INVALID통과 상태 인 TCP 포트 22로 패킷을 허용합니다.ACCEPT

유효 하지 않은 경우 : 이전의 상태 중 어느 것도 적용되지 않으면 패킷은 INVALID 상태입니다. 이는 다양한 유형의 스텔스 네트워크 프로브로 인해 발생하거나 CONNTRACK 항목이 부족함을 의미 할 수 있습니다 (로그에도 표시되어 있음). 또는 단순히 전적으로 양성일 수 있습니다.

/unix/57423/how-to-understand-why-the-packet-was-considered-invalid-by-the-iptables


STATE를 확인 NEW하면 잘못된 패킷이 실수로 액세스되지 않습니다.

그리고 의미를 명확히하기 위해 :

  • NEW : 새로운 연결입니다
  • ESTABLISHED : 현재 연결에 관련된 패킷입니다
  • 관련 : 새 연결이지만 기존 연결에 의해 선언되었습니다
  • 유효 하지 않음 : 위의 어느 것도 적용되지 않습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.