RRC서버가 깔린 리눅스에 워낙 CLOSE_WAIT가 많이 걸리고,
해제되지 않아 여기 저기 찾다가 발견한 사이트
http://tunelinux.pe.kr/bbs/read.php?table=linuxinfo&no=76
sysctl 명령어를 이용하란다~~
혹시, 링크가 깨질까봐, 원문을 copy해둔다.
## 질문
xxx 작성:
안녕하세요.전번에 netlog에 대한 답변들은 고마웠습니다.
요즘 SYN attack에 대한 생각을 정리중인데,도움을 좀 청할까 해서요..
리눅스나 원도우에서 SYN이 들어오면은최대 접속 SYN 갯수가 있을 것이고,
3상태 연결이 안되었을때, 연결이 취소될때까지의 시간이 있을건데,
이것은 리눅스 상에서 설정을 어디를 보면 되는지.좀 아시는 분 가르켜 주세
요.
그리고, window NT나 유닉스는 기본적인 값이 얼마인지궁금합니다.
아시는 뿐들은 꼭 좀 답변 올려주세요.
## 답변
Linux에서 IP Stack을 관리하는 명령어는 sysctl입니다.
사용법은 간단합니다.
usage: sysctl -w variable=value ... ; 설정
sysctl -a ; 조회
timeout관련 정보는 grep으로 찾아보시기를 바랍니다.
그리고, Tuning과 관련하여 몇가지 정보를 추가하면(kernel 2.2기준)
- SYN attack 관련
sysctl -w net.ipv4.tcp_max_syn_backlog=1280 ; socket queue 증가
sysctl -w net.ipv4.tcp_syn_cookies=1 ; enable
- Routing table 변경
sysctl -w net.ipv4.conf.all.send_redirects=0 ; disable
sysctl -w net.ipv4.conf.all.accept_redirects=0
- Source Routing 관련
sysctl -w net.ipv4.conf.all.accept_source_route=0 ; source route 패킷
드롭
sysctl -w net.ipv4.conf.all.forwarding=0 ; forwarding
disable
sysctl -w net.ipv4.conf.all.mc_forwarding=0
- Timewait 값 조절 (DDOS 관련)
sysctl -w net.ipv4.vs.timeout_timewait=60 ; 60초 이하로 설정 권
장
- Broadcast ECHO Response (smurf Attack 관련)
sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1 ; 응답안함
등이 있습니다. 이외에 추가적으로 확인해 보시기 바랍니다.
자료참조: Rob Thomas, 이강석 "Unix IP Stack Tunig Guide"-센터내부자료 참
조.
.FIN.
## 추가답변
안녕하십니까?
저는 xxxxx의 홍석범입니다.
아래 메일로 말씀하신 부분에 조금만 추가를 하면....
1. 최대 접속 SYN 갯수에 대해
시스템에서 수용할 수 있는 최대 접속 SYN 패킷의 개수는 backlog queue 와
관련이 있습니다. 즉 backlog_queue 를 크게 늘렸을 경우에는 그만큼 많은
SYN 패킷을 수용할 수 있는 것이지요...
리눅스뿐만이 아니라 대부분의 시스템에는 이 값(kb 단위) 이 매우 낮게 설정
되어 있는데,
적절히 재설정하실 필요가 있습니다.
(현재 설정치는 sysctl -A|grep backlog로 확인해 보세요..)
일반적으로는 RAM 이 128M 이상일 경우 1024를 설정하면 되고
이하일 경우에는 128 을 설정하는데, 리누스의 부하가 많이 걸릴 경우에는
이 값을 적절히 늘려주면 됩니다.
그런데, 이 값을 무한정 늘릴 수 있는 것은 아니고 값이 1024 이상일 경우에
는
include/net/tcp.h 를 수정하여야 한다고 알고 있습니다..
그리고 경험적으로 이 값을 너무 크게 설정하였을 경우에는 syncookie 가
잘 적용되지 않는 것으로 알고 있습니다.
(그러니 syncookie 설정을 하였을 경우에는 backlog queue 를 그리 크게
하실 필요는 없습니다.)
아울러 말씀하신 자료에는
sysctl -w net.ipv4.tcp_syn_cookies=1 로 되어 있는데
sysctl -w net.ipv4.tcp_syncookies=1 이 맞습니다..
2. 연결이 취소될때까지의 시간에 대해
이 설정은
sysctl -w net.ipv4.vs.timeout_synrecv=10 와
관련이 있는것 같습니다.
(syn 패킷을 받은후 half open 상태 대기는 10초정도가 적당합니다.)
이 설정을 하시려면 바로 이용하실 수는 없고 커널 패치를 하셔야 합니다.
vs 라는 것은 Virtual Server 의 뜻으로 말 그대로 clustering 등을
구성할 때 필요한 커널 패치입니다.
이는 http://linuxvirtualserver.org/ 에서 패치하시면
됩니다.
그런데, 제가 테스트해보기로는 이 설정이 그대로 잘 적용은 되지 않더군
요,..,.
(이외 vs 커널 패치를 하면 drop_entry, drop_packet 등 다른 몇가지 정책을
추가로
설정할 수 있습니다.)
3. NT 등 Windows 계열의 SYN_Attack 에 대해
NT에서는 Registry값을 수정함으로써 튜닝이 가능합니다.
이 값에 대한 튜닝은 microsoft 의 technical page 나
http://packetstorm.securify.com/groups/rhino9/synflood.doc 를
참고하시기 바랍니다.
4. 그러나, 가장 확실한 방법은.....
제가 보기에는 서버 level 에서의 튜닝은 단지 공격을 감소시킬 수 있을뿐
근본적인 대책은 아닙니다.
이를 위해 라우터 level 에서 차단하는 것이 권장할만한 방법인데,
제가 테스트해 보기로는 몇가지 방법이 있더군요....
이 방법은 시간이 되는대로 정리를 해 보도록 하겠습니다.
이 글은 스프링노트에서 작성되었습니다.