답변:
종료 연결이 시간 초과되도록하려면을 사용할 수 있습니다 iptables
. DROP
비활성화하려는 포트 에서 규칙을 활성화하십시오 . 따라서 Samaba 서버의 시간 초과를 시뮬레이션하려면 활성 연결이 설정된 상태에서 서버에서 다음을 실행하십시오.
sudo iptables -A INPUT -p tcp --dport 445 -j DROP
DROP
대상은 회신하지 않습니다 RST
패킷 또는 ICMP
패킷의 보낸 사람에게 오류입니다. 클라이언트는 서버로부터 패킷 수신을 중지하고 결국 시간 종료됩니다.
iptables
구성한 경우 / 방법에 따라 규칙을 규칙 INPUT
세트에 더 높게 삽입 할 수 있습니다 .
ncat -v
정확한 출력을 사용 하여 정확히 무엇을하는지 보십시오 ncat
. 바닐라 우분투 12.04 설치에서 2m7.291s가 시간 초과되었습니다.
첫 번째 대답은 정확하지만이 시간 초과가 어떻게 작동하는지 발견 했으므로 관찰하고 테스트 할 수 있습니다 (포트를 차단하는 것을 잊지 마십시오!).
TCP 시간 초과를 처리하는 가장 흥미로운 커널 매개 변수는 4 가지가 있습니다.
/proc/sys/net/ipv4/tcp_keepalive_time
/proc/sys/net/ipv4/tcp_keepalive_intvl
/proc/sys/net/ipv4/tcp_keepalive_probes
/proc/sys/net/ipv4/tcp_retries2
이제 두 가지 시나리오가 있습니다.
소켓이 열리고 전송을 시도한 후 (다른 쪽에서 응답이없는 경우) 시스템이 재 시도 tcp_retries2
합니다. 기본값 인 은퇴는 2 분 이상 걸리고 소켓 시간이 초과됩니다.
소켓이 열리고 유휴 상태이므로 keepalive 제한이 흥미 롭습니다. 유휴 소켓을 사용하면 시스템이 tcp_keepalive_time
몇 초 동안 대기 한 후 몇 초 tcp_keepalive_probes
간격으로 TCP KEEPALIVE를 전송 하려고 시도 tcp_keepalive_intvl
합니다. 그리고 그 후에 만 소켓이 시간 초과됩니다.
netstat -o
/proc/sys/net/ipv4/tcp_keepalive_time
정말 소수