iptables의 --state 옵션의 용도는 무엇입니까?

iptables의 --state 옵션의 용도는 무엇입니까?

--state나는 단지 선택권을 얻지 못합니다 iptables.

나는 "새로운", "확립된", "관련된"의 예를 읽었습니다. 그런데 이것이 왜 필요한가?

즉, 포트(예: 22)를 열 때입니다. 통신은 22를 통해 이루어지며 그게 전부입니다. 이 상태 매개변수를 사용하는 이유는 무엇입니까?

어쩌면 포트 22가 나쁜 예일 수도 있습니다. 그러나 승인되고 확립되거나 관련된 연결이 있는 새 연결을 생성할 때 상태는 단지 더 많은 포트를 여는 것입니까?

예: 다음의 차이점은 무엇입니까?

iptables -A OUTPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT  -p tcp --sport 22 -m state --state ESTABLISHED     -j ACCEPT

그리고

iptables -A OUTPUT -p tcp --dport 22 -m state -j ACCEPT
iptables -A INPUT  -p tcp --sport 22 -m state -j ACCEPT

둘 다 작동해야합니다.

답변1

iptables -A INPUT  -p tcp --sport 22 -m state -j ACCEPT

이렇게 하면 나가는 SSH 연결에 대해 패킷을 반환하는 대신 모든 위치에서 시스템의 모든 포트로 소스 포트 22를 사용하는 모든 TCP 연결이 허용됩니다. SSH뿐만 아니라 컴퓨터의 모든 포트에서 서버를 실행하는 경우 누구나 해당 서버에 연결할 수 있습니다(22를 소스 포트로 사용한다고 추측하는 한). 모호한 보안.

Conntrack은 시스템에서 열리는 실제 나가는 연결을 추적하므로 iptables들어오는 연결 패킷을 수락하도록 지시함으로써 ESTABLISHED 해당 패킷만 받고 있다는 것을 알 수 있습니다.

하지만 다음과 같은 사항에 유의하세요.

iptables -A INPUT  -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

나가는 SSH 연결(포트 22)에 대한 응답만 허용합니다. 연결해야 하는 시스템의 다른 포트, OUTPUT미러 체인의 모든 규칙 에 대해 이를 복사해야 합니다 .

또 다른 예는 상위 포트로의 패킷을 수락하고 (모든) 나가는 연결에 대한 응답 패킷을 허용하는 것입니다.

iptables -A INPUT -p tcp --dport 1024:65535 -j ACCEPT

이렇게 하면 높은 포트(8080 또는 6667 등)에서 실행되는 모든 서버에 대한 연결이 허용되며 실수로 계속 실행되는 서버도 가능합니다. 물론 범위를 더 제한할 수 있지만 시스템이 나가는 연결에 사용하는 범위를 확인해야 합니다.

다시 말하지만, TCP를 사용하면 새 연결을 차단하기 위해 추가할 수 있지만 ! --synUDP에서는 반환 또는 응답 패킷이 하위 수준 초기 패킷과 다르지 않기 때문에 이것이 불가능합니다. 여기서 conntrack은 시스템에서 가장 최근에 열린 연결과 외부에서 들어오는 다른 패킷을 구별하는 거의 유일한 옵션입니다.

답변2

"둘 다 작동해야 한다"라고 말하는 것은 둘 다 작동하는 것을 의미합니다.그러기를 바라지만,우리를당신이 원하는 것이 무엇인지 모릅니다.

첫 번째 규칙 쌍은 다음을 허용합니다.나가는원격 포트 22에 연결합니다. 이것은 당신이 원하는 것일 수도 있고 아닐 수도 있습니다. 대부분의 사람들은 들어오는 연결을 제한하는 데 더 관심이 있습니다.

두 번째 규칙 쌍은 원격 포트 22로 나가는 연결도 허용합니다. 그러나 방화벽을 사용하면 허용되어야 하는 것이 실제로 허용되는지 쉽게 테스트할 수 있습니다. 차단해야 하는 콘텐츠가 실제로 차단되었는지 여부를 테스트하는 것은 더 어렵습니다.

이 경우 두 번째 규칙 쌍은 원격 포트가 22인 한 모든 포트에 대한 수신 연결을 허용합니다. 나는 이것이 당신이 원하는 것이 아니라고 확신합니다. 과거에는 상태 비저장 방화벽의 규칙 때문에 정확하게 소스 포트 22에 연결하려는 시도를 많이 보았습니다. 최근에는 본 적도 없고, 아직도 이런 시도가 흔할 수 있으며, 공격자가 소스 포트를 선택하기 쉽습니다.

답변3

iptables -A INPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

~ 할 것이다아니요새로운 연결이 허용됩니다.

매뉴얼 페이지에서:"NEW는 패킷이 새로운 연결을 시작했거나 양방향에서 패킷을 보지 못한 연결과 연관되어 있음을 나타냅니다.". IOW, 기본 정책이 DROP/REJECT인 경우 이 규칙만으로는 호스트에 연결할 수 없습니다.

관련 정보