ySQL 데이터베이스에서 Syn Flooding이 발생하면

2458 단어
Syn 공격은 가장 흔하고 이용되기 쉬운 공격 기법이다. TCP 프로토콜의 결함을 이용하여 대량의 위조 TCP 연결 요청을 발송하고 가짜 IP로 대량의 SYN 패키지를 보내며 공격된 서버는 SYN+ACK에 응답한다. 상대방은 가짜 IP이기 때문에 가방을 영원히 받지 못하고 응답하지 않기 때문에 피격 서버는 대량의 SYN_를 유지한다.RECV 상태의 반 연결은 기본 5차례 응답 악수 패키지를 다시 시도하고 TCP를 가득 채우고 연결 대기열을 기다리며 자원이 소모되어 정상적인 업무 요청이 연결되지 않습니다.
Syn 공격은 응용 서버에서 흔히 볼 수 있지만 데이터베이스 서버는 내부 네트워크에서 유사한 공격을 만나기 어려울 것이다. 그러나 때때로 응용 프로그램이 데이터베이스와 연결 자세가 정확하지 않으면 데이터베이스 쪽에서도 Syn 공격으로 여겨지고 연결 구축을 거부할 수 있다.

[문제 설명]


데이터베이스 돌발적인 링크 거부, 오류 신고, 문제가 발생한 시간에 데이터베이스 서버의 운영체제 로그, 즉/var/log/messages에서 다음과 같은 오류 정보를 볼 수 있습니다.
kernel: possible SYN flooding on port 3306. Sending cookies.

[문제 분석]


문제가 발생한 점에서 데이터베이스 모니터링 지표를 보면Threads Connected라는 지표가 증가했다.이것도 뚜렷하다. 데이터베이스에 있어 Syn Flooding은 응용 프로그램이 데이터베이스에 돌발적으로 연결을 시작하고 운영체제가 처리하지 못하기 때문에 Syn Flooding에 보고한다. 데이터베이스의 성능 지표를 보면 연결 수는 돌발적인 증가가 있을 것이다.이런 돌발적인 성장이 어떻게 일어났는지 분석해 봉우리를 깎고 골짜기를 메워 연결을 안정시키는 방안이 필요하다.

[솔루션]


데이터베이스 서버에서 다음과 같은 조정을 한다. 이 조정은 TCP 반연결 버퍼를 증가시키고 기본값은 2048이며 우리는 8192로 조정하여 시스템의 돌발 압력을 증가시킨다는 뜻이다.Tcp_syn_retires 및 Tcp_synack_retires 기본값은 5입니다. 즉, 서버 측에서 다섯 번의 패키지를 보내야 재시도를 중지할 수 있습니다. 우리는 이 매개 변수를 2로 조정합니다.캐시 연결 수를 줄이기 위해 오류가 발생한 패키지를 최대한 빨리 오류를 발생시킵니다.
echo 8192 > /proc/sys/net/ipv4/tcp_max_syn_backlog
echo 2 > /proc/sys/net/ipv4/tcp_syn_retries
echo 2 > /proc/sys/net/ipv4/tcp_synack_retries

이 매개 변수는 즉시 효력이 발생하여 다시 시작할 필요가 없다.물론 서버가 다시 시작되면 이 매개 변수들도 기본값으로 되돌아갑니다.이 조정을 통해 데이터베이스 측의 압력 저항 능력이 강화되었지만 문제를 완전히 해결하지는 못했다.
우리는 클라이언트에서도 상응하는 조정을 한다.
데이터베이스의 연결 수 압력을 줄이기 위해 일반적으로 우리는 연결 탱크를 다음과 같이 구성하는 것을 권장합니다.
testWhileIdle="false"。 
minIdle="0"。 
maxAge="30000"。 。
initialSize="1"。 
timeBetweenEvictionRunsMillis="5000"。 ( )

현재 장면에 대해 우리는 minIdle이라는 매개 변수를 0에서 5로 조정하는 것을 건의합니다.연결 탱크에 평소에 5개의 빈 연결이 존재하도록 하면 데이터베이스에 요청할 때 이 5개의 빈 연결을 먼저 사용합니다.봉우리를 깎아 곡식을 메우는 작용에 이르다.물론 부작용은 데이터베이스의 평소 연결 수가 늘어나는 것이다.구체적으로 얼마나 적절하게 조정해야 하는지는 실제 데이터베이스 연결 부하 상황을 결합시켜야 한다.대하다NET 프로그램, 상응하는 연결 탱크 매개 변수도 조정할 수 있습니다: minPoolSize라는 매개 변수를 적당히 수정할 수도 있고 5로 조정할 수도 있습니다.
이 조정을 통해 기본적으로 대부분의 데이터베이스 Syn Flooding 문제가 해결될 수 있다.
물론 이것들은 모두 조정 수단이기 때문에 시스템을 약간 개선할 수밖에 없다.압력 저항력을 높이다.최종 분석은 연결 압력이 어디에서 오는지 봐야 한다.그리고 왜 데이터베이스에 대량으로 연결되어야 하는지.이런 돌발 장면에 대해 데이터베이스로 적합한지 여부.대안은 앞에서 Redis로 버퍼를 추가하는 것입니다.데이터베이스에 대한 갑작스런 연결 요청을 피하다.이것은 응용의 개조와 관련된다.

좋은 웹페이지 즐겨찾기