성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] How can I tell whether two programs...
[정성태] The case of the fail-fast crashes c...
[정성태] Creating Docker multi-arch images f...
[정성태] BinaryFormatter removed from .NET 9...
[정성태] Extending the Windows Shell Progres...
[우광현] 와..... 범위를 잡았으니 클라이언트가 해당 범위를 확인해본다...
[정성태] 딱히, 그것 이상으로 더 설명할 내용이 없습니다. 동적 포...
[정성태] If Windows 3.11 required a 32-bit p...
[정성태] What is a hard error, and what make...
[괴물신인] 질문작성자인데 이 글을 이제봤네요 ㄷㄷ 이 글처럼 타입별로 인...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>IIS HTTPERR - Timer_MinBytesPerSecond, Timer_ConnectionIdle 로그</h1> <p> 이상하군요, IIS의 "C:\Windows\System32\LogFiles\HTTPERR" 오류 로그에 다음과 같이 Timer_MinBytesPerSecond 오류가 남고 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > #Software: Microsoft HTTP API 2.0 #Version: 1.0 #Date: 2020-09-02 12:52:59 #Fields: date time c-ip c-port s-ip s-port cs-version cs-method cs-uri streamid sc-status s-siteid s-reason s-queuename 2020-09-02 12:52:59 192.168.100.80 40738 192.168.100.55 8020 - - - - - - <span style='color: blue; font-weight: bold'>Timer_MinBytesPerSecond</span> - 2020-09-02 12:53:56 192.168.100.80 40782 192.168.100.55 8020 - - - - - - Timer_MinBytesPerSecond - 2020-09-02 12:55:03 192.168.100.80 40826 192.168.100.55 8020 - - - - - - Timer_MinBytesPerSecond - ...[생략]... </pre> <br /> Timer_MinBytesPerSecond를 검색해 보면 자세한 설명을 담은 글이 나오는데,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > What is MinBytesPerSecond? ; <a target='tab' href='https://techcommunity.microsoft.com/t5/iis-support-blog/timer-minbytespersecond-in-http-sys-logs/ba-p/1574047'>https://techcommunity.microsoft.com/t5/iis-support-blog/timer-minbytespersecond-in-http-sys-logs/ba-p/1574047</a> </pre> <br /> 그러니까, IIS는 초당 최소 240바이트의 속도로 응답받을 수 없는 클라이언트에 대해서는 연결을 끊어버리는 기본 설정을 가지고 있는 것입니다. DoS(Denial of Service) 공격을 막기 위해서라고 하는데... (240 * 8 = 1920bits) 약 2Kbits/sec도 안 되는 네트워크에서 접속했다는 가정이므로 현실적인 상황에서 보면 (공격을 목표로 하지 않는다면) 거의 없을 것이므로 나쁘지 않은 기능으로 보입니다.<br /> <br /> 문제는, 저 오류가 내부 네트워크인 192.168.100.80으로부터 접속한 클라이언트에 대해 발생한다는 것인데 저런 네트워크 속도가 6~7초마다 발생해 로그에 찍힌다는 것이 다소 이해가 되지 않습니다.<br /> <br /> 참고로, DoS 공격이 아닌 정상적인 요청에서 저런 오류가 발생한다면 이 문제를 없애기 위해 "system.applicationHost/webLimits"의 "minBytesPerSecond" 값을 0으로 설정하면 된다고 합니다.<br /> <br /> <hr style='width: 50%' /><br /> <br /> 그나저나, 저 옵션이 DoS 공격을 딱히 막을 수 있을만한 효과가 있는지 의문입니다. 왜냐하면, 그냥 연결만 해놓거나,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > static void Main(string[] args) { TcpClient clnt = new TcpClient(AddressFamily.InterNetwork); clnt.Connect(IPAddress.Parse("192.168.100.55"), 8020); Console.ReadLine(); } </pre> <br /> 연결 후 GET 요청을 한 다음 Response를 읽지 않으면,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > static void Main(string[] args) { TcpClient clnt = new TcpClient(AddressFamily.InterNetwork); clnt.Connect(IPAddress.Parse("192.168.100.55"), 8020); NetworkStream ns = clnt.GetStream(); string txt = "GET / HTTP/1.1\nHost: 192.168.100.55\n\n"; byte[] buffer = Encoding.UTF8.GetBytes(txt); ns.Write(buffer, 0, buffer.Length); Console.ReadLine(); } </pre> <br /> 각각 IIS에 의해 TCP 연결을 끊기까지 제법 시간을 소요(제 테스트 환경에서는 2분 2초 == 122초 정도) 하기 때문입니다. 그리고 바로 이럴 때 남겨지는 IIS의 오류 로그가 "Timer_ConnectionIdle"입니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 2020-09-07 07:56:07 192.168.0.19 4547 192.168.100.55 8020 - - - - - - Timer_ConnectionIdle - </pre> <br /> <hr style='width: 50%' /><br /> <br /> 따라서, 정말 DoS 공격이라고 판단되면 IP 주소를 막거나 하는 식의 대응을 해야 합니다. 이를 위해 네트워크 장비나 윈도우 운영체제의 Defender가 제공하는 Firewall로도 가능하겠지만, IIS 자체적으로도 "IP 주소 및 도메인 제한" 기능을 켜면,<br /> <br /> (Windows 10의 경우) IP Security<br /> <img alt='ip_sec_on_iis_1.png' src='/SysWebRes/bbs/ip_sec_on_iis_1.png' /><br /> <br /> (Windows Server의 경우) IP and Domain Restrictions (IP 주소 및 도메인 제한)<br /> <img alt='ip_sec_on_iis_2.png' src='/SysWebRes/bbs/ip_sec_on_iis_2.png' /><br /> <br /> IP 주소 및 범위에 대해 허용/거부를 Web Application 별로 세밀하게 제어할 수 있는 장점이 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > HOW TO BLOCK AN IP ADDRESS FROM VISITING MY WEBSITES THROUGH IIS? ; <a target='tab' href='https://manage.accuwebhosting.com/knowledgebase/2325/How-to-Block-an-IP-address-From-Visiting-My-Websites-Through-IIS.html'>https://manage.accuwebhosting.com/knowledgebase/2325/How-to-Block-an-IP-address-From-Visiting-My-Websites-Through-IIS.html</a> </pre> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
6382
(왼쪽의 숫자를 입력해야 합니다.)