iptables : NEW, ESTABLISHED 및 RELATED 패킷의 차이점


46

서버에서 방화벽의 일부 :

iptables -A INPUT -p tcp --dport 22 -m state NEW --state -m recent --set

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 100 --hitcount 10 -j DROP

온라인 검색시 항상 해당 규칙에 NEW가 사용되고 있지만 ESTABLISHED 및 RELATED가 사용되지 않는 이유를 이해하기가 어렵습니다.

이처럼 :

iptables -A INPUT -p tcp --dport 22 -m state NEW,ESTABLISHED,RELATED --state -m recent --set

iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED,RELATED -m recent --update --seconds 100 --hitcount 10 -j DROP

정확히 새로운 패킷이 ESTABLISHED 및 RELATED로 변경 될 때 누군가 나에게 설명 할 수 있습니까?

답변:


46

수신자가 전화를 받기 전에 전화가 걸려온 새 패킷을 고려하십시오. ESTABLISHED 패킷은 "Hello"입니다. 그리고 관련된 패킷은 당신이 그들에게 당신이 그들을 보내려고하는 이메일에 대해 이야기하기 위해 전화를 거는 것입니다. (이메일이 관련되어 있습니다.)

내 비유가 그렇게 좋지 않은 경우 개인적으로 매뉴얼 페이지가 잘 처리한다고 생각합니다.

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

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

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

iptables (8)-Linux 매뉴얼 페이지


9
궁금한 점이 있으면 관련 패킷을 결정하는 방법을 알고 있습니까? 응용 프로그램이 연결이 관련 연결이 될 것임을 iptables에 알리는 데 사용할 수있는 메커니즘이 있습니까, 아니면 순수하게 iptables의 stateful 부분의 일부입니까?
Matthew Scharley

9
ip_conntrack_ *라는 일련의 커널 모듈에 의해 처리되는데, 각각은 관련없는 연결 (FTP 등)을 사용하는 특정 프로토콜을 위해 작성되었습니다. 귀하의 질문에 대답하려면 응용 프로그램에 유사한 모듈을로드해야한다고 생각합니다.
Kyle Smith

4
알았어 고마워 그러나 NEW가있는 규칙으로 돌아 가면 이미 설정된 것처럼 보일 수 있고 규칙에 의해 차단되지 않을 수 있습니까?
Kris

2
@ 크리스 : 나가는 패킷을 가짜로 만드는 것은 매우 어렵습니다. 답변에 매뉴얼 페이지의 문구로 어떻게 보지 못합니다. 열린 연결을 위해 묶인 것처럼 보이는 패킷을 위조하는 것이 가능하지만 방화벽이 없어도 TCP 스택은 이미 열린 연결에 대해 알지 못하면 바닥에 패킷을 떨어 뜨릴 것입니다. 송신기. 이것이 라우터의 방화벽에있는 경우 라우터 를 통과 할 때 SYN/ ACK/ RST/ etc 패킷을 검사 하여이 상태를 유지할 수 있으며 iptables 가이 작업을 수행 할 것으로 기대합니다.
Matthew Scharley

2
@Kris : TeamViewer와 같은 VNC 소프트웨어는 이와 유사한 기능 (기술적으로 동일하지는 않지만)을 방화벽 / 라우터를 통해 터널링합니다. 이 프로세스를 홀 펀칭 이라고 합니다. 즉, 인터넷을 통해 다른 장치에서 연결하려는 호스트 PC (제한 방화벽 뒤에있을 수 있음)가 있습니다. 두 PC 모두 별도의 서버 (예 : TeamViewer 서버)에 대한 개별 연결을 열어 패킷간에 관련이있는 것처럼 방화벽을 확인하여 해당 PC가 각 서버와 별도의 연결을 설정할 수 있도록합니다. 다른.
Levit

14

서버와 클라이언트 모두에게 제한 INPUT적이고 개방적 OUTPUT인 가정 :

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT

그리고 iptables-extensions (8) 에서 활성 모드의 FTP 예제를 통해 :

1. 새로운

NEW 패킷이 새로운 연결을 시작했거나 양방향으로 패킷을 보지 못한 연결과 연관되었습니다.

클라이언트 온 포트 50000(임의의 권한이없는 임의의 포트)는 port의 FTP 서버에 연결 21합니다. 서버는이 들어오는 연결을 수락하기 위해 최소한 이것이 필요합니다.

iptables -A INPUT --dport 21 -m state --state NEW -j ACCEPT

2. 설립

ESTABLISHED 패킷이 양방향으로 패킷을 본 연결과 연관되어 있습니다.

이제 클라이언트 측에서, 그는 포트에서 서버로 나가는 연결 열어 21로컬 포트를 사용하여 50000그는에서 도착하는 응답 할 수 있도록 다음의 iptables을 필요 server (21)로를 client (50000):

sudo iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

3. 관련

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

FTP 연결이 설정 및 데이터 연결에 대해 수행 할 수있다 된 지금은 후 포트 (활성 FTP 클라이언트가 데이터 연결 서버가됩니다으로, 예), 클라이언트는 서버 소켓을 열 것입니다 60000(이 포트를 표시합니다 나의 이해 클라이언트에 60000RELATED의 다른 연결로 50000->21)와 FTP를 사용하여 서버에이 포트 번호를 보내드립니다 PORT명령을 사용합니다. 그런 다음 FTP 서버는 해당 포트 에서 클라이언트 의 포트 20로 새 연결을 열고 60000클라이언트는 이제이 새 연결이 성공하기 위해 다음을 요구합니다.

sudo iptables -A INPUT -m state --state RELATED -j ACCEPT

마지막으로, 이것이 작동하려면 ip_conntrack_ftp시스템이 연결 / 패키지를 표시 할 수 있도록 커널 모듈 을 활성화해야합니다 RELATED(이것은 너무 이해하지 않았습니다).

modprobe ip_conntrack_ftp

tcp 3-way 핸드 셰이크가 아닌 이전에 로컬에서 시작된 단방향 흐름 만 필요합니다. 내 이해가 맞습니까?
sdaffa23fdsf

답을 주셔서 감사합니다. 확립 된 당신을 위해 "서버에서 클라이언트로 응답이 서버 (21)에서 클라이언트 (50000)로 도착 할 수있게하는 iptables"가 서버에서 클라이언트 인 경우 왜 출력이 아닌 입력입니까?
Medya

@Medya는 클라이언트 관점에서 server (21)에서 client (50000)로 전송 된 패킷이 들어오는 패킷이므로 클라이언트의 경우 INPUT.
Jaime Hablutzel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.