일반적으로 IP 테이블을 사용하면 트래픽을 삭제하거나 거부합니다. TCP의 경우 iptables가 syn을 다시 보내지만 연결하는 것을 잊어버리는 방법이 있습니까?
답변1
xtables-addons
목표를 가지고 TARPIT
(매뉴얼 페이지):
TARPIT는
들어오는 TCP 연결을 캡처하고 보존하기 위해 로컬 연결별 리소스를 사용하지 않습니다.TARPIT는 TCP 수준에서만 작동하며 완전히 애플리케이션 독립적입니다. 모듈은 TCP 요청에 응답하고 청취 서버처럼 작동하지만 ACK 또는 RST를 보내는 것 외에는 데이터를 보내지 않습니다. 들어오는 패킷은 무시되고 삭제됩니다.
Debian/Ubuntu에서 패키지는 다음과 같습니다.xtables-addons-common
.
답변2
RST 패킷을 삽입할 수 있으며 관련 호스트에 특이하고 사용자 정의된 방화벽 구성이 없으면 RST로 인해 연결이 닫힐 수 있습니다. 또 다른 접근 방식은 연결을 수락한 다음 어떻게든 상태 항목을 제거하는 것입니다.
...
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp --syn -m tcp --dport 22 -j ACCEPT
...
로깅(예: 로그 스캐너를 통해 작동) 또는 다른 모듈이 설치되어 있을 수도 있습니다 sec.pl
.conntrack-tools
conntrack -D -s 192.0.2.42
192.0.2.42 SSH를 통해 연결한 후 이 IP에 대한 상태 테이블 항목을 삭제합니다.
답변3
Syn을 다시 보냈지만 연결하는 것을 잊으셨나요?
이는 SYN/ACK를 생성하지만 연결을 추적하지 않음을 의미합니다.
별로 그렇지는 않습니다.
가장 먼저 해야 할 일: 왜?
SYN이 닫힌 포트로 전송되면 다음을 수행합니다.
패킷을 삭제하고 추가 처리를 방지합니다.
귀하가 어떤 질문에 대답하려고 하는데 공격자가 귀하가 거기에 있다는 응답을 받게 되면 RST로 대답하십시오. 완전히 가능하고 일반적인 iptables 답변은 다음과 같습니다.
iptables -p tcp [...] -j REJECT --reject-with tcp-reset을 사용하여 RST를 다시 보낼 수 있습니다.
SYN이 다음과 같은 경우열려 있는포트 다음:
서버(서비스)가 적합하다고 판단되는 요청을 처리할 수 있도록 합니다.
SYNPROXY 도움말 서버를 사용하세요.
이는 실제로 SYN-ACK Flood DDoS 공격으로부터 서버를 보호하려는 시도입니다. 이것은 귀하가 요청한 것과 동일하지 않으며 가능하지도 않습니다. 두 엔터티(서버 및 iptables)가 동시에 동일한 패킷에 대해 SYN/ACK로 응답하는 것은 불가능합니다. 둘 중 하나입니다.
하지만 SYNPROXY는 똑똑합니다.작동 방식(및 기타):
SYNPROXY를 사용하면 클라이언트는 SYNPROXY에 투명하게 연결됩니다. 따라서 클라이언트와 SYNPROXY 간에 3방향 TCP 핸드셰이크가 먼저 발생합니다.
클라이언트는 서버 A에 TCP SYN을 보냅니다.
방화벽에서 이 패킷이 도착하면 UNTRACKED로 표시됩니다.
그런 다음 UNTRACKED TCP SYN 패킷을 SYNPROXY에 제공합니다.
SYNPROXY는 이 정보를 얻고 (서버 A로서) TCP SYN+ACK(추적되지 않음)로 응답합니다.
클라이언트는 SYNPROXY에도 제공되는 TCP ACK(iptables에 INVALID 또는 UNTRACKED로 표시됨)로 응답합니다.
클라이언트가 SYNPROXY에 연결되면 SYNPROXY는 자동으로 실제 서버와의 3방향 TCP 핸드셰이크를 시작하여 SYN 패킷을 스푸핑하여 실제 서버가 원래 클라이언트가 연결을 시도하고 있음을 알게 됩니다.
SYNPROXY는 TCP SYN을 실제 서버 A로 보냅니다. 이는 OUTPUT 체인에서 발생하는 iptables의 새로운 연결입니다. 패킷의 소스 IP는 클라이언트의 IP입니다.
실제 서버 A는 클라이언트에 SYN+ACK를 응답합니다.
SYNPROXY는 이 메시지를 수신하고 ACK로 서버에 응답합니다. 이제 연결이 ESTABLISHED로 표시되었습니다.
연결이 설정되면 SYNPROXY는 클라이언트와 서버 간의 트래픽을 떠납니다.
따라서 SYNPROXY는 모든 유형의 TCP 트래픽에 사용할 수 있습니다. 콘텐츠 자체를 방해하지 않으므로 암호화되지 않은 트래픽과 암호화된 트래픽 모두에 사용할 수 있습니다.
라고 한...
서버가 없는 포트에서는 SYNPROXY를 설정할 수 없습니다(작동하지 않음).
따라서 닫힌 포트의 경우 서버가 필요합니다. 가짜 서버일 수도 있지만 어쨌든 서버입니다.
Python - Scapy - 모든 포트를 열린 상태로 표시
관련된: