기본 콘텐츠로 건너뛰기

사람은 숫자가 아니다

FreeBSD: Limiting open port RST response from xxx to 200 packets/sec

FreeBSD에서 /var/log/message 안에 "Limiting open port RST response from xxx to 200 packets/sec"라는 메시지를 볼 수 있다. 외부로부터 잘못된 SYN요청이 과도하게 들어와서 RST로 응답하는 회수를 초당 200건으로 제한했다는 의미이다. 이게 SYN 공격을 통해서 발생할 수도 있지만, 의도치 않게 네트워크 상황에 따라 발생할 수도 있다.

예를 들어 해외에 NAT로 묶인 망이 있고, 그곳에 서비스 이용 클라이언트가 3,000개(순단 시 자동으로 재접속 시도가 있다는 것도 가정!)가 있다는 가정을 해보자. 해외망 특성상 네트워크 순단이 숨쉬기보다 조금 덜 발생하는데, 위에서 말한 망이 살짝 순단일 경우 동시에 3,000개 접속(session)이 떨궈진다. 이때 거의 한정적인 아이피 - NAT에 묶여 있으니 - 에서 많은 SYN이 발생할 것이다. 게다가 이런 경우 심심치 않게 중간 망이나 NAT쪽 망이 갑자기 부하가 몰려 장비가 앉았다 일어났다를 빠르게 반복할 수도 있다. NAT에 묶인 클라이언트 OS는 connection timeout를 뿜기 전에 SYN을 몇 번 더 보내볼 것이고... 덕분에 서비스를 제공한 서버로 의도와 상관 없이 DDoS SYN attack을 날려주는 멋진 결과를 선사한다.

공격이라고 생각한다면 tcpdump를 이용해서 패킷을 걸러내는 문서를 참조해보자.


Powered by ScribeFire.


댓글

이 블로그의 인기 게시물

Bash Array, Map 정리

Bash에서 Array, Map에 대한 정리. (매번 찾기 귀찮) 찾아보진 않았지만, Bash에서 Array든 Map이든 동일하게 Map(C++에서 Unordered Map)으로 동작하는 것 같다. 왜냐하면, Array의 Index가 연속하지 않아도 동작한다. 그저 Key가 0 이상의 정수인 Map이랑 비슷하게 동작한다. 예) 1, 2, 3, 9, 10 Array # 생성 declare -a empty_array declare -a ar=(haha hoho baba "long string haha hoho") # 접근 echo "ar[0]=${ar[0]}" echo "all as array=${ar[@]}" # 큰따옴표 안에서 각 원소를 따로따로 전달한다. echo "all as one=${ar[*]}" # 큰따옴표 안에서 각 원소를 문자열 하나로 합쳐 전달한다. echo "indexes=${!ar[@]}" echo "indexes=${!ar[*]}" echo "length=${#ar[@]}" echo "length=${#ar[*]}" echo "last=${ar[-1]}" echo "last=${ar[@]: -1}" # 콜론 뒤에 빈 칸이 꼭 필요하다. 옛 방식 # 현재 상황 declare -p ar #(출력) declare -a ar=([0]="haha" [1]="hoho" [2]="baba" [3]="long string haha hoho") ar[100]=hello # 인덱스를 건너 뛰어도 동작한다. declare -p ar #(출력) declare -a ar=([0]="haha" [1]="hoho" [2]="baba" [3]=&

설치한 패키지에서 RPM 추출하기

오래된 패키지를 관리할 저장소가 없어졌고, 기존 패키지로 다른 서버를 세팅해야할 일이 생겼다면 RPM의 리패키지 기능을 이용해보자. $ rpm -e --repackage [PACKAGE_NAME] 위와 같이 리패키지하면, /var/spool/repackage/ 에 생성한 RPM파일이 있다. :-)