Linux TCP SYN Flood 공격이란 무엇이며 탐지 및 대응 방법

웹 서버나 API 서버를 운영하다 보면 갑자기 접속이 느려지거나 정상 사용자가 서비스에 접속하지 못하는 상황이 발생할 수 있습니다. 그 원인 중 하나가 바로 TCP SYN Flood 공격입니다.

SYN Flood는 TCP의 3-Way Handshake 과정을 악용하여 서버의 연결 대기 큐(Backlog Queue)를 가득 채우는 대표적인 DDoS 공격 기법입니다. 공격이 계속되면 정상적인 사용자의 연결 요청이 거부되거나 응답 속도가 크게 저하될 수 있습니다.

이번 글에서는 TCP SYN Flood 공격의 원리, 탐지 방법, Linux에서의 대응 및 실무 운영 팁까지 자세히 알아보겠습니다.

TCP SYN Flood란?

TCP 연결은 다음과 같은 3-Way Handshake 과정을 거칩니다.

Client                    Server

SYN --------------------->

        <----------------- SYN + ACK

ACK --------------------->

하지만 SYN Flood 공격은 마지막 ACK를 보내지 않습니다.

Attacker                  Server

SYN --------------------->

        <----------------- SYN + ACK

(응답 없음)

이렇게 되면 서버는 연결이 완료될 것으로 기대하며 메모리에 연결 정보를 계속 유지하게 됩니다.

수천~수백만 개의 SYN 요청이 발생하면 연결 대기 큐가 모두 사용되어 정상 사용자의 연결이 거부될 수 있습니다.

SYN Flood 공격의 특징

대표적인 특징은 다음과 같습니다.

  • SYN 패킷이 매우 많이 발생
  • ACK 응답이 거의 없음
  • Half-Open Connection 증가
  • Backlog Queue 포화
  • CPU보다 메모리 사용 증가
  • 정상 사용자 접속 실패

1. SYN_RECV 상태 확인하기

현재 Half-Open Connection을 확인합니다.

ss -ant | grep SYN-RECV

개수만 확인하려면 다음 명령을 사용합니다.

ss -ant | grep SYN-RECV | wc -l

평소보다 비정상적으로 많다면 SYN Flood를 의심할 수 있습니다.

2. TCP 연결 상태 확인하기

전체 TCP 상태를 확인합니다.

ss -s

또는

netstat -s

SYN 관련 연결이 급증했는지 확인합니다.

3. SYN 패킷 확인하기

tcpdump를 이용해 SYN 패킷만 확인합니다.

tcpdump -i eth0 tcp[tcpflags] == tcp-syn

특정 포트만 확인하려면 다음과 같이 실행합니다.

tcpdump -i eth0 port 80

짧은 시간에 과도한 SYN 패킷이 들어오는지 확인합니다.

4. SYN Cookies 확인하기

Linux에서는 SYN Cookies를 통해 SYN Flood를 완화할 수 있습니다.

현재 설정을 확인합니다.

sysctl net.ipv4.tcp_syncookies

예시

net.ipv4.tcp_syncookies = 1

값이 1이면 활성화된 상태입니다.

5. SYN Cookies 활성화하기

비활성화되어 있다면 활성화합니다.

sysctl -w net.ipv4.tcp_syncookies=1

영구 적용하려면 다음을 추가합니다.

net.ipv4.tcp_syncookies = 1

적용합니다.

sysctl -p

6. Backlog Queue 증가시키기

SYN Queue 크기를 늘립니다.

sysctl -w net.ipv4.tcp_max_syn_backlog=8192

현재 값을 확인합니다.

sysctl net.ipv4.tcp_max_syn_backlog

접속량이 많은 서버에서는 기본값보다 크게 설정하는 경우가 많습니다.

7. SYN Timeout 조정하기

Half-Open Connection 유지 시간을 줄입니다.

sysctl -w net.ipv4.tcp_synack_retries=3

재전송 횟수가 줄어들면서 불필요한 연결 유지 시간이 감소합니다.

8. NIC 및 네트워크 상태 확인하기

인터페이스 상태를 확인합니다.

sar -n DEV 1

또는

ip -s link

패킷 드롭이나 오류가 증가하는지 확인합니다.

9. 방화벽을 이용한 대응

iptables 예시입니다.

iptables -A INPUT -p tcp --syn -m limit --limit 30/s --limit-burst 100 -j ACCEPT

과도한 SYN 요청을 제한하여 서버 부하를 줄일 수 있습니다.

10. 커널 로그 확인하기

공격 흔적이나 네트워크 오류를 확인합니다.

dmesg | grep -Ei "syn|tcp"

또는

journalctl -k | grep -Ei "syn|tcp"

비정상적인 연결 관련 메시지가 있는지 확인합니다.

SYN Flood 대응 순서

실무에서는 다음 순서대로 대응하는 것이 좋습니다.

  1. SYN_RECV 상태 확인
  2. SYN 패킷 확인
  3. SYN Cookies 활성화
  4. Backlog Queue 증가
  5. SYN Timeout 조정
  6. NIC 상태 확인
  7. 방화벽 제한 적용
  8. 커널 로그 확인
  9. 서비스 응답 확인
  10. 공격 종료 후 설정 재점검

SYN Flood 예방 방법

운영 환경에서는 다음과 같은 예방책을 함께 적용하는 것이 좋습니다.

  • SYN Cookies 활성화
  • 충분한 Backlog Queue 확보
  • 최신 Linux 커널 사용
  • 방화벽 Rate Limit 설정
  • DDoS 방어 장비 사용
  • CDN 및 Reverse Proxy 활용
  • 실시간 모니터링 구축

자주 묻는 질문

SYN Cookies는 반드시 활성화해야 하나요?

대부분의 인터넷 서비스 서버에서는 활성화하는 것이 권장됩니다. 대량의 SYN 요청이 발생해도 서버가 연결 정보를 메모리에 저장하지 않아 공격에 대한 대응력이 향상됩니다.

SYN_RECV 상태가 많으면 무조건 공격인가요?

아닙니다. 순간적으로 접속자가 증가한 경우에도 SYN_RECV 상태가 늘어날 수 있습니다. 평소보다 지속적으로 높은 상태가 유지된다면 SYN Flood 공격 여부를 확인해야 합니다.

SYN Flood는 CPU보다 메모리에 더 큰 영향을 주나요?

일반적으로는 Half-Open Connection을 유지하기 위한 메모리와 연결 큐에 먼저 영향을 주며, 공격 규모가 커지면 CPU와 네트워크 대역폭에도 영향을 줄 수 있습니다.

마무리

TCP SYN Flood 공격은 TCP 연결 과정을 악용하여 서버의 연결 대기 큐를 가득 채우는 대표적인 서비스 거부 공격입니다. ss, tcpdump, sysctl, iptables 등을 활용하면 공격을 빠르게 탐지하고 대응할 수 있으며, SYN Cookies 활성화와 Backlog Queue 최적화, 방화벽 정책을 함께 적용하면 안정적인 서버 운영에 큰 도움이 됩니다.

댓글 남기기