Linux 커널 2.6.32의 경우 설정하면 net.ipv4.tcp_syncookies = 1
항상 사용됩니까, 아니면 SYN 플러드 공격 중에만 사용됩니까?
나는 그 반대라고 말하는 2 개의 출처를 찾았습니다.
1:
"그러나 SYN 쿠키를 사용할 때 적용되는 두 가지 주의 사항이 있습니다. 첫째, 서버는 8개의 고유 MSS 값으로 제한됩니다. 이는 3비트로 인코딩할 수 있는 전부입니다. 둘째, 서버는 모든 값을 거부해야 합니다. 서버가 해당 정보가 저장될 SYN 대기열 항목을 삭제하기 때문에 TCP 옵션(예: 큰 창 또는 타임스탬프)
이러한 제한은 필연적으로 최적이 아닌 경험으로 이어지지만 공격을 받을 때만 적용되기 때문에 클라이언트는 그 효과를 거의 알아채지 못합니다. 이러한 상황에서는 연결을 저장하기 위한 TCP 옵션의 손실이 일반적으로 합리적인 타협으로 간주됩니다."
2:
"단점은 모든 TCP 데이터가 32비트 시퀀스 번호 필드에 들어갈 수 없기 때문에 고성능에 필요한 일부 TCP 옵션이 비활성화될 수 있다는 것입니다." 이는 서버가 현재 공격을 받고 있지 않더라도 SYN 쿠키를 켜면 선택적 ACK 및 TCP 창 크기 조정과 같은 옵션이 작동하지 않는다는 것을 의미합니다."
답변1
두 번째 소스
"이는 서버가 현재 공격을 받고 있지 않더라도 SYN 쿠키를 켜면 선택적 ACK 및 TCP 창 크기 조정과 같은 옵션이 작동하지 않는다는 것을 의미합니다."
그냥 헛소리야, 전까지는
"TCP: request_sock_TCP: 포트 53에서 SYN 플러딩 가능성이 있습니다. 쿠키를 보내는 중입니다. SNMP 카운터를 확인하세요."
비활성화된 항목이 없습니다.
이는 iperf3과 성능을 비교하고 "net.ipv4.tcp_syncookies = 1"을 활성화한 상태에서 "net.ipv4.tcp_sack" 및 "net.ipv4.tcp_window_scaling"을 활성화/비활성화함으로써 쉽게 증명할 수 있습니다.
공식 소스 대신 무작위 소스를 읽는 이유는 무엇입니까? https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt
tcp_syncookies - BOOLEAN
Only valid when the kernel was compiled with CONFIG_SYN_COOKIES
Send out syncookies when the syn backlog queue of a socket
overflows. This is to prevent against the common 'SYN flood attack'
Default: 1
Note, that syncookies is fallback facility.
It MUST NOT be used to help highly loaded servers to stand
against legal connection rate. If you see SYN flood warnings
in your logs, but investigation shows that they occur
because of overload with legal connections, you should tune
another parameters until this warning disappear.
See: tcp_max_syn_backlog, tcp_synack_retries, tcp_abort_on_overflow.
syncookies seriously violate TCP protocol, do not allow
to use TCP extensions, can result in serious degradation
of some services (f.e. SMTP relaying), visible not by you,
but your clients and relays, contacting you. While you see
SYN flood warnings in logs not being really flooded, your server
is seriously misconfigured.