¿î¿µÃ¼Á¦¿Í Ä¿³Î Â÷¿ø¿¡¼ÀÇ Æ©´×°ú º¸¾È¿¡ ´ëÇؼ Áß¿äÇÑ ºÎºÐÀ» ¼³¸íÇÏ°Ú´Ù.
º¸¾Èµµ ´Ù·ç±â´Â ÇÏÁö¸¸ ÀϹÝÀûÀÎ Â÷¿ø¿¡¼ÀÇ º¸¾È¿¡ ´ëÇÑ ³»¿ëÀº »°´Ù.
ÀϹÝÀûÀÎ º¸¾È¿¡ ´ëÇؼ´Â Àß ´Ù·é ¼ÀûÀ̳ª ÀÚ·áµéÀÌ ¸¹±â ¶§¹®¿¡ Áߺ¹µÈ ³»¿ëÀ» ¼³¸íÇϱ⺸´Ù´Â ´Ù¸¥ °÷¿¡¼´Â ÀÚ¼¼È÷ ´Ù·çÁö ¾Ê¾ÒÁö¸¸ Áß¿äÇÑ ºÎºÐµéÀ» ¼³¸íÇÏ´Â°Ô ³ªÀ» °Í °°´Ù. ¸ÕÀú ÆÄÀϽýºÅÛ ¼³Á¤°ú °ü·ÃµÈ ºÎºÐ¿¡ ´ëÇؼ ¼³¸íÀ» ÇÏ°í ¿î¿µÃ¼Á¦ ¹× Ä¿³Î Â÷¿øÀÇ Æ©´×°ú º¸¾È¿¡ ´ëÇؼ ¼³¸íÀ» ÇÏ°Ú´Ù.
1. ÆÄÀÏ ½Ã½ºÅÛ °ü·Ã
/etc/fstab¿¡´Â ÆÄÀÏ ½Ã½ºÅÛ °ü·ÃµÈ Á¤º¸°¡ µé¾îÀÖ´Ù.
$ cat /etc/fstab
/dev/sda2 /home ext2 defaults,rw,nosuid,nodev,noexec 1 2
/dev/sda3 /var ext2 defaults,rw,nosuid,nodev,noexec,noatime 1 2
/dev/sda4 /tmp ext2 defaults,rw,nosuid,nodev,noexec 1 2
¿©±â¼ ¼¼ ¹ø° ÁÙÀº ÇØ´ç ÆÄƼ¼Ç¿¡ ´ëÇÑ Á¦¾îÁ¤º¸°¡ µé¾îÀִµ¥ Àǹ̴ ´ÙÀ½°ú °°´Ù.
default : quota, read-write, suid, async
noquota : ÄõÅÍ »ç¿ëÇÏÁö ¾ÊÀ½
nosuid : SUID/SGID ¼³Á¤À» ÇÒ ¼ö ¾øÀ½
nodev : ¹®ÀÚ³ª ºí¶ô Ư¼ö µð¹ÙÀ̽º ¼³Á¤À» ÇÒ ¼ö ¾øÀ½
noexec : ¹ÙÀ̳ʸ® ÆÄÀÏÀÇ ½ÇÇà ±ÇÇÑÀ» ÁÖÁö ¾ÊÀ½
quota : ÄõÅÍ ¼³Á¤
ro : Àбâ Àü¿ë ÆÄÀϽýºÅÛ
rw : Àбâ/¾²±â ÆÄÀϽýºÅÛ
suid : SUIG/SGID ¼³Á¤ Çã¿ë
noatime : atime(ÆÄÀÏ Á¢±Ù ½Ã°£)À» ¾÷µ¥ÀÌÆ®ÇÏÁö ¾ÊÀ½
¸®´ª½º ¹× À¯´Ð½º¿¡¼´Â ÆÄÀÏ »ý¼º ½Ã°£ ¹× ¸¶Áö¸· º¯°æ½Ã°£°ú ÇÔ²² ¸¶Áö¸· Á¢±Ù½Ã°£À» °è¼Ó ±â·ÏÇÑ´Ù.
±×·¸Áö¸¸ ÀÚÁÖ Á¢±ÙÇÏ°í º¯°æÀÌ µÇ´Â ÆÄÀÏ¿¡ ´ëÇؼ´Â ÆÄÀÏ Á¢±Ù½Ã°£ÀÌ ÇÊ¿äÇÏÁö ¾Ê´Ù¸é ±»ÀÌ ¸¶Áö¸· ÆÄÀÏ Á¢±Ù½Ã°£À» ±â·ÏÇÏÁö ¾Ê¾Æµµ µÈ´Ù.
À¥¼¹ö, ij½¬ÆÄÀÏ, ·Î±×ÆÄÀÏ µî ÁÖ·Î ÀбâÀü¿ë ÆÄÀÏÀÌ ÀÌ¿¡ ÇØ´çÇÒ °ÍÀÌ´Ù. ÀÌ ¼³Á¤¸¸À¸·Î ¼º´É º´¸ñÇö»óÀÇ °¡Àå Å« ÁÖ¹üÀÎ µð½ºÅ© I/O¸¦ ÁÙÀÌ´Â µ¥¿¡ µµ¿òÀÌ µÉ ¼ö ÀÖ´Ù. ±×·¸Áö¸¸ ÆÄÀÏÀÌ º¯°æµÈ °æ¿ì¿¡´Â ¾÷µ¥ÀÌÆ®°¡ µÇ´Ï °ÆÁ¤ÇÏÁö ¸»±â ¹Ù¶õ´Ù. (chattr ÇÁ·Î±×·¥À» ÀÌ¿ëÇÏ¿© °³º° ÆÄÀÏ¿¡ ´ëÇؼµµ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù)
nosuid´Â SUID,SGID¸¦ ÇÏÁö ¸øÇϵµ·Ï ¸·´Â´Ù. SET-UID ÇÁ·Î±×·¥Àº º¸¾È»ó ¹®Á¦°¡ »ý±æ ¿©Áö°¡ ¸¹À¸¸ç ·çÆ® °èÁ¤À¸·Î Á¢±ÙÇÒ ¼ö ÀÖ´Â Áö¸§±æÀÌ µÇ´Â °æ¿ì°¡ ¸¹´Ù. ºÒ°¡ÇÇÇÏ°Ô »ç¿ëÇØ¾ß ÇÒ °æ¿ì°¡ ÀÖÁö¸¸ ±× ¿Ü¿¡´Â nosuid ¼³Á¤À» ÅëÇØ º¸¾ÈÀ» °ÈÇÏ´Â°Ô ÁÁ´Ù. ·¹µåÇÞ °è¿¿¡¼ SET-UID root ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°Àº °ÍµéÀÌ ÀÖ´Ù.
# find / -type f ( -perm -04000 -o -perm -02000 ) -exec ls -alF {} ;
-rwsr-xr-x 1 root root 14188 Mar 7 2000 /bin/su*
-rwsr-xr-x 1 root root 86690 Oct 20 2000 /bin/ping*
-rwsr-xr-x 1 root root 62192 May 4 09:45 /bin/mount*
-rwsr-xr-x 1 root root 28432 May 4 09:45 /bin/umount*
-r-sr-xr-x 1 root root 15688 Dec 1 2000 /sbin/pwdb_chkpwd*
-r-sr-xr-x 1 root root 16312 Dec 1 2000 /sbin/unix_chkpwd*
-rwsr-xr-x 1 root root 22232 Feb 22 10:21 /usr/bin/crontab*
-rws--x--x 1 root root 14056 Jan 11 2001 /usr/bin/chfn*
-rws--x--x 1 root root 13800 Jan 11 2001 /usr/bin/chsh*
-rws--x--x 2 root root 563164 Aug 9 2000 /usr/bin/suidperl*
-rws--x--x 2 root root 563164 Aug 9 2000 /usr/bin/sperl5.00503*
-rwxr-sr-x 1 root man 36368 May 23 13:25 /usr/bin/man*
-r-s--x--x 1 root root 12244 Feb 8 2000 /usr/bin/passwd*
-rwxr-sr-x 1 root mail 11620 Feb 8 2000 /usr/bin/lockfile*
-rwsr-sr-x 1 root mail 76432 Feb 8 2000 /usr/bin/procmail*
-rwxr-sr-x 1 root slocate 23024 Dec 21 2000 /usr/bin/slocate*
-rwsr-xr-x 1 root root 198312 Nov 10 2000 /usr/bin/ssh1*
-rws--x--x 1 root root 5640 Jan 11 2001 /usr/bin/newgrp*
-rwxr-sr-x 1 root tty 8332 Jan 11 2001 /usr/bin/write*
-rwxr-sr-x 1 root utmp 6096 Feb 25 2000 /usr/sbin/utempter*
-rws--x--x 1 root root 9568 Mar 29 18:30 /usr/sbin/suexec*
-rwsr-sr-x 1 root mail 369340 Jun 19 14:31 /usr/sbin/sendmail*
-rwsr-xr-x 1 root root 17704 Oct 7 2000 /usr/sbin/traceroute*
-rwsr-xr-x 1 root root 34751 Jan 16 00:50 /usr/libexec/pt_chown*
¿©±â¼ ºÒÇÊ¿äÇÑ ÆÄÀÏÀº chmod¸¦ ÀÌ¿ë ¼³Á¤À» ¹Ù²Ù¾î¾ß ÇÑ´Ù. chage, gpasswd, wall, chfn, chsh, newgrp, write, usernetctl, traceroute, mount, umount, ping, netreport µîÀÌ ¿©±â¿¡ ÇØ´çÇÑ´Ù.
±×·±µ¥ À§ÀÇ ÇÁ·Î±×·¥Àº ¼ºñ½º¸¦ Á¦°øÇϱâ À§ÇØ ¾î¿ ¼ö ¾ø´Â °æ¿ìÀÌÁö¸¸ ±×·¯ÇÑ °æ¿ì°¡ ¾Æ´Ï¶ó¸é ƯÁ¤ÇÑ ÆÄƼ¼±¿¡ nosuid¸¦ »ç¿ëÇؼ °èÁ¤ µîÀÇ »ç¿ëÀÚ°¡ Àå³À» Ä¡´Â °æ¿ì¸¦ ¸·À» ¼ö ÀÖ´Ù. ¿©±â¿¡ noexec±îÁö ÁÖ¸é ¹ÙÀ̳ʸ® ÆÄÀÏÀ» ½ÇÇàÇÏÁö ¸øÇϱ⠶§¹®¿¡ ´õ ¾ÈÀüÇÏ°Ô ½Ã½ºÅÛÀ» À¯ÁöÇÒ ¼ö ÀÖ´Ù. noexec¸¦ ÁØ ÆÄƼ¼ÇÀº ·çÆ®µµ ¹ÙÀ̳ʸ® ÆÄÀÏÀ» ½ÇÇàÇÏÁö ¸øÇÑ´Ù. quota¸¦ ÀÌ¿ëÇؼ »ç¿ëÀÚ°¡ Á¦ÇѵǾî ÀÖ´Â ÇÏµå µð½ºÅ© °ø°£À» ¸ðµÎ Â÷ÁöÇÏ´Â ÀÏÀ» ¸·À» ¼ö ÀÖ´Ù. ÄõÅÍ ¼³Á¤Àº ¿©±â¼´Â »ý·«À» ÇÏ°Ú´Ù. async ¿É¼ÇÀº ÆÄÀϽýºÅÛ¿¡ ´ëÇÑ I/O¸¦ ºñµ¿±âÀûÀ¸·Î ¸Þ¸ð¸®¿¡ ¹öÆÛ¸µÇÏ´Â °ÍÀε¥ ±âº»°ªÀ¸·Î µÇ¾î ÀÖ´Ù. µð½ºÅ© Á¢±Ù ½Ã°£À» ÃÖ¼ÒÈÇϱâ À§ÇÑ ºÎºÐÀ̹ǷΠ¹Ù²Ü ÇÊ¿ä°¡ ¾ø´Ù. ÀÌ°ÍÀ» sync·Î ¹Ù²Ù¸é ¸Þ¸ð¸®¿¡¼ º¯°æµÈ ÀÚ·á°¡ ¹Ù·Î µð½ºÅ© I/O¿¡ ¹Ý¿µÀÌ µÇ¹Ç·Î ¼Óµµ°¡ ¾ó¸¶³ª ´À·ÁÁúÁö Àå´ãÇÒ ¼ö ¾ø´Ù.
2. º¸¾È°ü·Ã Ä¿³Î ¼³Á¤
Ä¿³Î°ú °ü·ÃµÈ ¿É¼ÇÀº /proc¿¡¼ Á÷Á¢ °ªÀ» ½á ÁÙ ¼öµµ ÀÖ°í /etc/sysctl.conf ÆÄÀÏÀ» ÀÌ¿ëÇÏ¿© ¹Ù²Ü ¼öµµ ÀÖ´Ù.
Ä¿³Î°ú °ü·ÃµÈ ¿É¼ÇÀº ±×³É ¹«Á¶°Ç »ç¿ëÇÏ´Â°Ô ¾Æ´Ï¶ó ÀÚ½ÅÀÇ È¯°æÀ» »ý°¢ÇؾßÇÏ°í ±× ¿ø¸®¸¦ Á¦´ë·Î ÀÌÇØÇßÀ» ¶§ »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù.
±×·±µ¥ ÀÌ ÀÛ¾÷ÀÌ ±×·¸°Ô ¸¸¸¸ÇÑ ÀÛ¾÷Àº ¾Æ´Ï°í ¿î¿µÃ¼Á¦¿Í ³×Æ®¿÷¿¡ ´ëÇؼ ¸¹Àº Áö½ÄÀÌ ÀÖ¾î¾ß ÀÌÇØ°¡ °¡´ÉÇÏ´Ù.
¿©±â¼´Â ÁÖ·Î ¸¹ÀÌ »ç¿ëµÇ´Â Ä¿³Î ¿É¼Ç¿¡ ´ëÇؼ »ìÆ캸°Ú´Ù.
Ä¿³Î°ú °ü·ÃµÈ ¼³Á¤Àº sysctl ÇÁ·Î±×·¥À» ÀÌ¿ëÇÏ¿© Æí¸®ÇÏ°Ô ¼³Á¤ÇÒ ¼ö ÀÖ´Ù.
sysctl -a Çϸé ÇöÀç ¼³Á¤µÈ °ªÀÌ ³ª¿À°í -w ¿É¼ÇÀ» ÀÌ¿ëÇÏ¿© ƯÁ¤°ªÀ» ÀúÀåÇÒ ¼ö ÀÖ´Ù.
ÀçºÎÆÃÈÄ¿¡µµ °è¼Ó »ç¿ëÇÏ·Á¸é /etc/sysctl.conf ÆÄÀÏ¿¡ ÀúÀåÇÏ¿© »ç¿ëÇÏ¸é µÈ´Ù.
¤· ping ¿äû¿¡ ¹ÝÀÀÇϱ⠸·±â :
ping ¿äû¿¡ ¹ÝÀÀÇÏ´Â °ÍÀ» ¸·À» ¼ö ÀÖ´Ù.
¿ÜºÎ¿¡¼ ´©±¸µµ ¼¹ö¿¡ ÇÎÀ» º¸³¾ ¼öµµ ¾ø°í º¸³»µµ ¹ÝÀÀÀ» ÇÏÁö ¾Ê±â¿¡ º¸¾È»óÀ¸·Î µµ¿òÀÌ µÉ ¼ö ÀÖ°í ³×Æ®¿÷ º¸¾ÈÀ» Çâ»ó½Ãų ¼ö ÀÖ´Ù.
±×·¯³ª ¿ø°Ý¿¡¼ ¼ºñ½º¸¦ °ü¸®ÇÏ´Â °æ¿ì °£´ÜÇÏ°Ô ½Ã½ºÅÛÀÇ »óŸ¦ È®ÀÎÇÒ ¼ö ÀÖ´Â ¼ö´ÜÀ» ¸·´Â °á°ú¸¦ ÃÊ·¡ÇÒ ¼öµµ ÀÖ´Ù.
net.ipv4.icmp_echo_ignore_all = 1
¤· Broadcast ·Î ¿À´Â ÇÎÀ» Â÷´ÜÇϱâ :
ºê·Îµåij½ºÆ® ÁÖ¼Ò¿¡ pingÀ» ½î´Â °ÍÀ» ¸·´Â´Ù. smurf °ø°Ý ¹æÁö¿ëÀÌ´Ù.
½º¸ÓÇÁ °ø°ÝÀº ¿¡ÄÚ ¸®Äù½ºÆ® ÆÐŶÀ» ¾î¶² ³×Æ®¿÷ÀÇ ºê·Îµåij½ºÆ® ÁÖ¼Ò·Î º¸³»¸é ÇØ´ç ³×Æ®¿öÅ©ÀÇ ¸ðµç È£½ºÆ®°¡ request ÆÐŶ¿¡ ÀÀ´äÇÏ´À¶ó ´Ù¸¥ ÀÏÀº ÇÏÁö ¸øÇÏ´Â °ÍÀ» ¸»ÇÑ´Ù.
±×·¸Áö¸¸ Á¤ÀÛ ¹®Á¦´Â ÇØ´ç ³×Æ®¿öÅ©ÀÇ È£½ºÆ®°¡ ¾Æ´Ï´Ù.
ÀÌ ¾öû³ °³¼öÀÇ ÄÄÇ»Å͵鿡¼ ÀϽÿ¡ ¾î´À ÇÑ °÷À¸·Î ICMP echo replay ÆÐŶÀ» º¸³»¸é ÆÐŶÀ» º¸³Â´ø ½Ã½ºÅÛÀº ¸¶ºñ»óÅ·Π°¡±â ½Í´Ù.
ÇÏÁö¸¸ ÀÌ¹Ì Ãâ¹ßÁö ÁÖ¼Ò ÀÚü°¡ ½ÇÁ¦ ÆÐŶÀ» º¸³½ ½Ã½ºÅÛÀÌ ¾Æ´Ï¶ó °ø°ÝÀ» ÇÒ È£½ºÆ®·Î ¹Ù²î¾îÀÖ´Â »óÅÂÀÏ °ÍÀÌ´Ù. (IP ½ºÇªÇÎ)
net.ipv4.icmp_echo_ignore_broadcasts = 1
¤· IP ¼Ò½º ¶ó¿ìÆà ¸·±â :
¶ó¿ìÆðú ¶ó¿ìÆà ÇÁ·ÎÅäÄÝÀº ¸î°¡Áö ¹®Á¦¸¦ »ý¼ºÇس½´Ù.
RFC 1122¿¡ µû¸£¸é ¸ñÀûÁöÀÇ °æ·Î¿¡ ´ëÇÑ ¼¼ºÎÀûÀÎ ³»¿ëÀ» ´ã°í ÀÖ´Â IP ¼Ò½º ¶ó¿ìÆÃÀº ¸ñÀûÁö È£½ºÆ®¿¡¼µµ °°Àº °æ·Î¸¦ µû¶ó ¹ÝÀÀÀ» ÇØ¾ß ÇÏ´Ù´Â ¹®Á¦Á¡ÀÌ ÀÖ´Ù. Å©·¡Ä¿°¡ ƯÁ¤ ³×Æ®¿÷¿¡ ¼Ò½º ¶ó¿ìÆà ÆÐŶÀ» º¸³¾ ¼ö ÀÖ´Ù¸é µ¹¾Æ¿À´Â ¹ÝÀÀÀ» °¡·Îä¼ »ó´ë¹æÀÇ È£½ºÆ®¿Í ½Å·Ú¹ÞÀº È£½ºÆ®Ã³·³ ¼ÓÀÏ ¼ö ÀÖ´Ù.
±âº»°ªÀÌ 1À̹ǷΠ0À¸·Î ¹Ù²Û´Ù.
net.ipv4.conf.all.accept_source_route = 0
¤· backlog ´Ã¸®±â¿Í syncookie ±â´É »ç¿ëÇϱâ :
SYN Attack Àº ¼ºñ½º °ÅºÎ °ø°Ý(DOS)ÀÇ Çϳª·Î °ø°ÝÇÒ ½Ã½ºÅÛÀÇ ¸ðµç ÀÚ¿øÀ» ¼ÒºñÇÏ°Ô Çؼ ÀçºÎÆÃÇÏ°Ô ¸¸µç´Ù.
µÎ È£½ºÆ® »çÀÌ¿¡ TCP ¿¬°áÀÌ ÀÌ·ç¾îÁö´Â °ÍÀº Ŭ¶óÀ̾ðÆ® È£½ºÆ®°¡ TCP Çì´õ¿¡ SYN Ç÷¡±×¸¦ onÇÑ »óÅ·Π¼¹ö È£½ºÆ®·Î ¿¬°á ¿äûÀ» ÇÏ¸é¼ ½ÃÀ۵ȴÙ.
±×·¯¸é ¿äûÀ» ¹ÞÀº ¼¹ö´Â Ŭ¶óÀ̾ðÆ®·Î SYN/ACK¸¦ º¸³»°í À̸¦ ¹ÞÀº Ŭ¶óÀ̾ðÆ®´Â ¼¹ö¿¡°Ô ACK¸¦ º¸³½´Ù.
±×·±µ¥ Ŭ¶óÀ̾ðÆ®¿¡¼ ACK¸¦ º¸³»Áö ¾Ê°í ÀÖÀ¸¸é ¾î¶»°Ô µÉ±î?
¹®Á¦´Â TCP¿¡¼ ÇÑ ¼ÒÄÏ¿¡¼ µ¿½Ã¿¡ SYN ¿äûÀ» ó¸®Çϱ⿡´Â ÇÑ°è°¡ ÀÖÀ¸¸ç ÀÌ ÇÑ°è°¡ ¹é·Î±×(backlog)¶ó°í ÇÑ´Ù.
¹é·Î±×´Â ¿¬°á ¿äûÀÌ ¾ÆÁ÷ ¿ÏÀüÈ÷ 󸮵ÇÁö ¾Æ´ÏÇÑ ´ë±â»óÅ¿¡ Àִ ťÀÇ ±æÀÌÀÌ´Ù.
ÀÌ ¹é·Î±× Å¥°¡ ²Ë Â÷°Ô µÇ¸é ÀÌÈÄ µé¾î¿À´Â SYN ¿äûÀº ¹«½ÃµÇ¸ç ÀÌ·¯ÇÑ °ø°ÝÀ» SYN Ç÷¯µùÀ̶ó°í ÇÑ´Ù.
´Ù¸¥ À¯´Ð½º Áß¿¡¼´Â µé¾î¿À´Â ¼ÒÄÏ ¿äû¿¡ ´ëÇÏ¿© µÎ °³ÀÇ Å¥¸¦ ¸¸µå´Â °æ¿ìµµ ÀÖ´Ù.
ÀÌ °æ¿ì Çϳª´Â half-open ¼ÒÄÏ(SYNÀ» ¹Þ°í SYN/ACK¸¦ º¸³½ »óÅÂ)À» À§ÇÑ Å¥ÀÌ°í ¶ÇÇϳª´Â ¿ÏÀüÈ÷ ¿¬°áÀÌ µÇ¾úÁö¸¸ ¾ÖÇø®ÄÉÀ̼ǿ¡¼ accept() ÄÝÀ» ±â´Ù¸®´Â Å¥ÀÌ´Ù.
(¼Ö¶ó¸®½ºÀÇ °æ¿ì tcp_conn_req_max_q0, tcp_conn_req_max_q°¡ ÀÌ¿¡ ÇØ´çÇÑ´Ù)
backlogµµ ¹«Á¶°Ç ´Ã¸®´Â °ÍÀÌ ÁÁÀº °ÍÀº ¾Æ´Ï¶ó´Â º¸°í°¡ ÀÖÀ¸¸ç 1024 ÀÌ»óÀ¸·Î ¼³Á¤½Ã¿¡´Â Ä¿³Î ¼Ò½º¸¦ ¼öÁ¤ÇØ¾ß ÇÑ´Ù.
syncookie´Â SYN Flood °ø°Ý¿¡ ´ëÀÀÇϱâ À§ÇØ ³ª¿Â °ÍÀÌÁö¸¸ large windows¿¡¼´Â ¼º´É¿¡ ¹®Á¦°¡ ¹ß»ýÇÒ °¡´É¼ºÀÌ ÀÖ´Ù°í ÇÑ´Ù.
syncookie¸¦ »ç¿ëÇÏ·Á¸é Ä¿³Î¿¡¼ ÁöÁ¤ÀÌ µÇ¾î ÀÖ¾î¾ß ÇÑ´Ù.
net.ipv4.tcp_max_syn_backlog=1024
net.ipv4.tcp_syncookies = 1
¤· ICMP redirect¸¦ ¸·´Â´Ù :
È£½ºÆ®¿¡¼ ƯÁ¤ ¸ñÀûÁö·Î ÃÖÀûȵÇÁö ¾ÊÀº ¶ó¿ìÆÃÀ» ÇÑ´Ù°í ÇÒ¶§ ICMP redirect ÆÐŶÀº È£½ºÆ®¿¡°Ô Á¤È®ÇÑ ¶ó¿ìÆà °æ·Î¸¦ ¾Ë·ÁÁÖ´Â ¿ªÇÒÀ» ÇÑ´Ù.
±×·±µ¥ Å©·¡Ä¿°¡ ICMP redirect ÆÐŶÀ» À§Á¶ÇÒ ¼ö ÀÖ°Ô µÈ´Ù¸é È£½ºÆ®ÀÇ ¶ó¿ìÆà Å×À̺íÀ» º¯°æÇÒ ¼ö ÀÖ°Ô µÇ°í ¿øÇÏÁö ¾Ê´Â °æ·Î·Î Æ®·¡ÇÈÀ» º¸³» È£½ºÆ®ÀÇ º¸¾ÈÀ» ÇØÄ¥ ¼ö ÀÖ´Ù.
Àß µðÀÚÀÎµÈ ³×Æ®¿÷¿¡¼´Â ÃÖÁ¾ ¸ñÀûÁö·ÎÀÇ redirect°¡ ÇÊ¿äÇÏÁö ¾Ê´Ù. redirect º¸³»°í ¹Þ´Â °ÍÀ» ¸ðµÎ ¾ø¾Ö¾ß ÇÑ´Ù. (**ÁÖ1)
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.all.accept_redirects=0
¤· bad icmp ÆÐŶ Â÷´Ü :
¾î¶² router µéÀº broadcast frameµé·Î °ÅÁþ ÀÀ´äÀ» º¸³¿À¸·Î¼ RFC 1122¸¦ À§¹ÝÇÑ´Ù.
ÀÌ·¯ÇÑ °ÍµéÀº º¸Åë Ä¿³Î °æ°í¸¦ ÅëÇØ ·Î±ëÀÌ µÈ´Ù. ÀÌ°ÍÀ» TRUE·Î ¼³Á¤À» ÇÒ°æ¿ì Ä¿³ÎÀº ÀÌ·¯ÇÑ °æ°í¸¦ ÇÏÁö ¾ÊÀ» °ÍÀ̸ç,
·Î±× ÆÄÀÏÀÌ ÁöÀúºÐÇØ Áö´Â °ÍÀ» ÇÇÇÒ ¼ö ÀÖ´Ù. ±âº»°ªÀº FALSE ÀÌ´Ù.
1·Î ¼³Á¤ÇÏ¿© È°¼ºÈ¸¦ Çϸé IP³ª TCP Çì´õ°¡ ±úÁø bad icmp packetÀ» ¹«½ÃÇÑ´Ù.
net.ipv4.icmp_ignore_bogus_error_responses = 1
¤· IP ½ºÇªÇÎ ¹æÁöÇϱâ
DOS °ø°Ý¿¡¼ ÀÚ½ÅÀÇ ³×Æ®¿öÅ©°¡ ½ºÇªÇÎµÈ °ø°ÝÁöÀÇ ¼Ò½º·Î ¾²ÀÌ´Â °ÍÀ» Â÷´ÜÇÑ´Ù.
RFC182¿¡ µû¸¥ IP spoof ¹æÁö¸¦ À§ÇÑ ¼³Á¤ÀÌ´Ù.
net.ipv4.conf.all.rp_filter = 1
¤· IP ½ºÇªÇÎµÈ ÆÐŶ ·Î±×¿¡ ±â·ÏÇϱâ :
½ºÇªÇÎµÈ ÆÐŶ, ¼Ò½º ¶ó¿ìÆà ÆÐŶ, redirect ÆÐŶ¿¡ ´ëÇÏ¿© ·Î±×ÆÄÀÏ¿¡ ±â·ÏÀ» ³²±ä´Ù.
net.ipv4.conf.all.log_martians = 1
Âü°í·Î /etc/host.conf ÆÄÀÏ¿¡ nospoof ¿É¼ÇÀ» ÁÖ¾î IP ½ºÇªÇÎ ¹æÁö¸¦ À§ÇÑ ¼³Á¤À» Ãß°¡Çϱ⠹ٶõ´Ù.
# cat /etc/host.conf
order bind, hosts
multi on
nospoof on
3. ÃÖÀûÈ °ü·Ã Ä¿³Î ¹× ¿î¿µÃ¼Á¦ ¼³Á¤
Ä¿³Î°ú ¿î¿µÃ¼Á¦¿¡¼ÀÇ ÃÖÀûÈ´Â ³×Æ®¿÷, °¡»ó ¸Þ¸ð¸®, µð½ºÅ© I/O, °¢Á¾ ÀÚ¿ø Á¦ÇÑ µîÀ¸·Î ³ª´ ¼ö ÀÖ´Ù.
TCP-IP¿¡¼ ³×Æ®¿÷ ÃÖÀûÈ´Â TCP/IPÀÇ ±âº»°ªÀ» ÁÙ¿©¼ TCP/IP¿¡¼ ´õ ¸¹Àº ¿¬°áÀ» ó¸®ÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â°Ô ¸ñÀûÀÌ´Ù.
TCPÀÇ ¿¬°á ÇØÁ¦ ½Ã°£À» ÁÙÀÌ°í ºÒÇÊ¿äÇÑ IP È®Àå±â´ÉÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù.
¤· ¿¬°áÁ¾·á½Ã°£À» ÁÙÀδ٠:
tcp_fin_timeoutÀº closeµÇ¾úÀ» ¶§ FIN-WAIT-2 »óÅ·Π¾ó¸¶³ª ¿À·§µ¿¾È ¼ÒÄÏÀ» À¯ÁöÇÏ°í Àִ°¡¸¦ ÁöÁ¤ÇÑ´Ù.
»ó´ë È£½ºÆ®¿¡ ¹®Á¦°¡ »ý°Ü¼ close¸¦ ¸øÇÒ ¼öµµ ÀÖ°í ¿¹»óÄ¡ ¾Ê°Ô Á×À» ¼öµµ ÀÖ´Ù.
Ä¿³Î 2.4¿¡¼ ±âº»°ªÀº 60ÃÊÀε¥ Ä¿³Î 2.2¿¡¼´Â 180ÃÊ¿´´Ù. Ä¿³Î 2.2¿Í °°ÀÌ ´õ ´Ã¸± ¼ö´Â ÀÖÁö¸¸
½Ã½ºÅÛÀÌ À¥¼¹öÀÇ ¿ëµµ¶ó¸é ¼ö¸¹Àº ¼ÒÄÏµé ¶§¹®¿¡ ¸Þ¸ð¸®¿¡ ¹®Á¦°¡ »ý±æ ¼ö ÀÖ´Ù.
FIN-WAIT-2 ¼ÒÄÏÀº ÃÖ´ë 1.5KÀÇ ¸Þ¸ð¸®¸¦ »ç¿ëÇϱ⠶§¹®¿¡ FIN-WAIT-1º¸´Ù´Â À§ÇèÀÌ ´úÇÏÁö¸¸ ´õ ¿À·¡ °¡´Â °æÇâÀÌ ÀÖ´Ù.
net.ipv4.tcp_fin_timeout = 30
¤· keepalive ½Ã°£ ÁÙÀ̱â :
tcp_keepalive_timeÀº keepalive°¡ È°¼ºÈµÇ¾î ÀÖÀ» ¶§ ¾ó¸¶³ª ÀÚÁÖ keepalive ¸Þ½ÃÁö¸¦ º¸³»ÁÙÁö Á¤ÇÑ´Ù.
ÀÌ´Â HTTP 1.1ÀÇ ¿¬°áÁö¼Ó ¿É¼Ç°ú °ü°è¾øÀÌ TCP ÀÚü¿¡ ÀÖ´Â ±â´ÉÀÌ´Ù.
TCP Á¢¼ÓÀº ÇÑÂÊ¿¡¼ ´Ù¸¥ ÂÊÀ¸·Î µ¥ÀÌÅ͸¦ Àü¼ÛÇÒ ÇÊ¿ä°¡ ¾ø´Â °æ¿ì¿¡´Â Æ®·¡ÇÈÀÌ ÀüÇô ¹ß»ýÇÏÁö ¾ÊÀ¸¹Ç·Î ÈÞÁö »óÅÂÀÎ Á¢¼ÓÀÇ °æ¿ì¿¡´Â
Æú¸µÀ̳ª ³×Æ®¿öÅ© ºÎÇÏ°¡ ¾ø´Ù. ±×·±µ¥ ´õ ÀÌ»ó »ç¿ëÇÏÁö ¾Ê´Â ³×Æ®¿öÅ© Á¢¼ÓÀ» À§ÇØ ¼¹ö¿¡¼´Â ¸Þ¸ð¸® ¹öÆÛ¸¦ À¯ÁöÇÏ°í ÀÖ´Â °ÍÀ¸·Î ÀÚ¿øÀ» ³¶ºñÇÏ´Â °ÍÀÌ´Ù.
»ç¿ëÀÚ°¡ ¸ðµ©À» ²¨¹ö¸®°Å³ª ÄÄÇ»ÅÍÀÇ Àü¿øÀ» ²ô´Â °æ¿ìµµ ÀÌ¿¡ ÇØ´çÇÑ´Ù.
±âº»°ªÀº 2½Ã°£(7200ÃÊ)Àε¥ ó¸®·®ÀÌ ¸¹Àº À¥¼¹öÀÎ °æ¿ì¿¡´Â »ç¿ëÀÚ°¡ ÆäÀÌÁö¸¦ ÀÐ°í ¾ó¸¶³ª ¿À·¡ ¸Ó¹«´ÂÁö¸¦ ÆÇ´ÜÇÏ¿© ÀÌ ´ë±â½Ã°£À» ÃÖ´ë ½Ã°£ °£°ÝÀ¸·Î ¼³Á¤ÇÏ¸é µÇ¸ç
º¸Åë 30ºÐÁ¤µµ¸é Àû´çÇÏ´Ù.
net.ipv4.tcp_keepalive_time = 1800
¤· ¿¼ö ÀÖ´Â Æ÷Æ® ´Ã¸®±â :
ip_local_port_range ¿É¼ÇÀº TCP¿Í UDP¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ´Â ·ÎÄà Æ÷Æ®ÀÇ ¹üÀ§¸¦ ÁöÁ¤ÇÑ´Ù.
µÎ°¡Áö ¼ýÀÚ·Î ÀÌ·ç¾îÁ® Àִµ¥ ¾ÕÀÇ ¹øÈ£´Â ½ÃÀÛÆ÷Æ®ÀÌ°í µÚÀÇ ¹øÈ£´Â ¸¶Áö¸· ·ÎÄà Æ÷Æ® ¹øÈ£ÀÌ´Ù.
¸Þ¸ð¸®¾ç¿¡ µû¶ó ±âº»°ªÀÌ Á¶Á¤µÇ´Âµ¥ 128M ÀÌÇÏÀÏ °æ¿ì¿¡´Â 1024-4999, 128M ÀÌ»óÀÏ °æ¿ì¿¡´Â 32768-61000 ÀÌ´Ù.
net.ipv4.ip_local_port_range = 32768 61000
¤· ÄÄÆÄÀÏ ¿É¼Ç º¯°æ
x86 ÇÁ·Î±×·¥¿¡¼ ÃÖ´ëÀÇ ¼º´ÉÀ» ³»±â À§Çؼ´Â ÄÄÆÄÀÏ ¿É¼Ç¿¡ -O9 Ç÷¡±×¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.
´ëºÎºÐÀÇ ÇÁ·Î±×·¥Àº Makefile¿¡ -O2¸¦ ÁöÁ¤Çϴµ¥ -O9´Â Äڵ带 °¡Àå ÃÖ°í·Î ÃÖÀûÈÇÏ´Â °ÍÀÌ´Ù.
ÇÁ·Î±×·¥ÀÇ Å©±â´Â Ä¿ÁöÁö¸¸ ¼Óµµ°¡ »¡¶óÁø´Ù. ±×·¸Áö¸¸ CPU°¡ 686À̻󿡼¸¸ ¼º´É Çâ»óÀÌ ÀÖ´Ù.
-mcpu=cpu_type -march=cpu_typeÀ» »ç¿ëÇÏ¸é °¢ CPU¿¡ ÃÖÀûÈµÈ Äڵ尡 »ý¼ºµÈ´Ù.
ÀÌ·² °æ¿ì¿¡´Â ÇÁ·Î±×·¥ÀÌ ÇØ´ç CPU¿¡¼¸¸ µ·´Ù´Â ´ÜÁ¡ÀÌ ÀÖ´Ù.
gcc¿¡¼ -S ¿É¼ÇÀ» ÀÌ¿ëÇÏ¸é ¾î¼Àºí¸®¾î·Î ¹ø¿ªµÇ¾î °á°ú°¡ Ãâ·ÂµÇ´Âµ¥ ÃÖÀûȸ¦ ÇÒ¼ö·Ï ¾î¼Àºí¸® Äڵ尡 ª°Ô º¯ÇÏ´Â °ÍÀ» º¼ ¼ö ÀÖ´Ù.
ÀÌ¿Ü¿¡µµ gcc¸¦ egcs·Î ¹Ù²Ù¾î¼ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÌ¿Ü¿¡µµ ÃÖÀûÈµÈ ÄÄÆÄÀÏÀ» Çϱâ À§ÇØ ¸î°¡Áö ÃßõÇÏ´Â ¿É¼ÇÀÌ ÀÖ¾úÁö¸¸
Ä¿³Î ÄÄÆÄÀÏ µî¿¡¼ Á¦´ë·Î ºÎÆÃÀÌ µÇÁö ¾Ê´Â °æ¿ì°¡ ÀÖ¾î ¿©±â¼´Â ÀϹÝÀûÀÎ ¿É¼Ç¿¡ ´ëÇؼ¸¸ ¼Ò°³¸¦ ÇÏ¿´´Ù.
¤· bdflush Á¦¾î :
bdflush´Â °¡»ó ¸Þ¸ð¸®(VM) ¼ºê½Ã½ºÅÛÀÇ È°µ¿°ú °ü·ÃÀÌ µÇ¾îÀִµ¥ bdflush Ä¿³Î ´ë¸ó¿¡ ´ëÇÑ Á¦¾î¸¦ ÇÑ´Ù.
bdflush´Â ºí·° µð¹ÙÀ̽º ÀÔÃâ·Â ¹öÆÛ¸¦ °ü¸®ÇÏ´Â Ä¿³Î ´ë¸óÀ¸·Î ÁÖ·Î ¹öÆÛ¸¦ ºñ¿ì´Â ¿ªÇÒÀ» ¸Ã°í ÀÖ´Ù.
ÇÏµå µð½ºÅ©¿¡ ¾²¿©Áú µ¥ÀÌÅÍ´Â ¹Ù·Î ÇÏµå µð½ºÅ©·Î ÀúÀåµÇ´Â °ÍÀÌ ¾Æ´Ï¶ó Áß°£¿¡ ¹öÆÛ¸¦ ÅëÇÑ´Ù°í ¾ÕºÎºÐ¿¡¼ ¼³¸íÀ» ÇÏ¿´´Ù.
ÁÖ±âÀûÀ¸·Î ¹öÆÛÀÇ ³»¿ëÀ» ÇÏµå µð½ºÅ©¿¡ ±â·ÏÇÏ´Â ÇüÅ·ΠÇÏµå µð½ºÅ© Á¢±ÙÀ» ÃÖ´ë·Î ÁÙ¿©¼ ÆÄÀÏ ½Ã½ºÅÛÀÇ ¼º´ÉÀ» ³ôÀ̱â À§ÇÑ °ÍÀÌ´Ù.
bdflush´Â 9°³ÀÇ °ªÀ¸·Î ±¸¼ºÀÌ µÇ¾îÀÖÀ¸¸ç ±âº»°ªÀº Ä¿³Î 2.2¿¡¼´Â 40 500 64 256 500 3000 500 1884 2 À̾ú´Ù°¡ Ä¿³Î 2.4¿¡¼´Â ±¸¼ºÀÌ ¾à°£ ¹Ù²î¾ú´Ù.
±âº»°ª¸¸ ¹Ù²ï °ÍÀÌ ¾Æ´Ï¶ó ¼ø¼µµ ¹Ù²î¾ú´Ù.
¼ø¼°¡ nfract, ndirty, nrefill, dummy1, interval, age_buffer, nfract_sync, dummy2, dummy3 ÀÌ¸ç ±âº»°ªÀº "30 64 64 256 500 3000 60 0 0" ÀÌ´Ù.
Ä¿³Î ¼Ò½º´Â /usr/src/linux/fs/buffer.cÀÌ´Ù. ¿©±â¿¡¼ Áß¿äÇÑ ºÎºÐÀº ¾ÕÀÇ ¼¼°¡ÁöÀÌ´Ù.
nfract´Â Àüü ¹öÆÛ Ä³½¬Áß¿¡¼ ´õƼ ¹öÆÛÀÇ ºñÀ²À» ³ªÅ¸³½´Ù.
¿©±â¼ ´õƼ´Â ÇÁ·Î¼¼½º¿¡¼ º¯°æÀÌ µÇ¾î ÇÏµå µð½ºÅ©¿¡ ¾²¿©Áú µ¥ÀÌÅ͸¦ ³ªÅ¸³½´Ù.
(¹Ý´ë´Â clean ¹öÆÛÀÌ´Ù) ¼öÄ¡¸¦ ³ôÀÌ¸é µð½ºÅ©¿¡ ¾²´Â µ¿ÀÛÀº ÃÖ´ëÇÑ Áö¿¬ÀÌ µÇÁö¸¸ ¸Þ¸ð¸®°¡ ºÎÁ·ÇÒ °æ¿ì I/OºÎÇÏ°¡ °É¸± ¼ö ÀÖ´Ù. ¶Ç ¾î´À Ã¥¿¡¼´Â ÀÌ ¼öÄ¡¸¦ 100%·Î ÁöÁ¤ÇÏ´Â °ÍÀ» ÃßõÇÏ°í Àִµ¥
¸Þ¸ð¸®¿Í °ü·ÃÇÏ¿© "do_try_to_free_pages failed for ...." µîÀÇ ¹®Á¦°¡ ¹ß»ýÇÑ °æ¿ì°¡ »ý±â°í ÀÖ´Ù.
ndirty´Â Çѹø¿¡ ±â·ÏµÉ ´õƼ ºí¶ôÀÇ ÃÖ´ë ¼ýÀÚÀÌ´Ù. ¼öÄ¡¸¦ ³ôÀ̸é I/OÀÛ¾÷À» Áö¿¬½Ãų ¼ö Àִµ¥ ¼öÄ¡°¡ ³Ê¹« ³·À¸¸é bdflush°¡ ¿À·§µ¿¾È ÀÛµ¿À» ÇÏÁö ¾Ê¾Æ ¸Þ¸ð¸® ºÎÁ· Çö»óÀÌ »ý±æ ¼ö ÀÖ´Ù.
nrefillÀº refillÀ» È£ÃâÇÒ ¶§¸¶´Ù °¡Á®¿Ã Ŭ¸° ¹öÆÛ °³¼öÀÌ´Ù. ¶§·Î´Â ¹öÆÛ°¡ ¸Þ¸ð¸® ÆäÀÌÁö¿¡ ºñÇØ ´Ù¸¥ Å©±â°¡ µÉ ¼ö Àֱ⠶§¹®¿¡ ¹Ì¸® free ¹öÆÛ¸¦ ÇÒ´çÇÏ´Â °ÍÀÌ ÇÊ¿äÇÏ´Ù.
¼öÄ¡°¡ Ŭ¼ö·Ï ¸Þ¸ð¸®°¡ ³¶ºñµÉ È®·üÀº ³ôÁö¸¸ refill_freelist()¸¦ ½ÇÇàÇÒ ÇÊ¿ä´Â Àû¾îÁø´Ù.
vm.bdflush = 30 64 64 256 500 3000 60 0 0
¤· ¹öÆÛ ¸Þ¸ð¸® »ç¿ë·® Á¶Àý :
buffermem Àº Àüü ¸Þ¸ð¸®¿¡¼ ¹öÆÛ ¸Þ¸ð¸® »ç¿ë·®À» % ºñÀ²·Î Á¶ÀýÇÑ´Ù. ±âº»°ªÀº 2 10 60À¸·Î µÇ¾î ÀÖ´Ù.
¿©±â¼ ½ÇÁ¦ »ç¿ëÇÏ´Â °ªÀº Á¦ÀÏ ¾ÕÀÇ ÇÑ °³¸¸ »ç¿ëÇϸç Àüü ¸Þ¸ð¸®¿¡¼ ¹öÆÛ·Î »ç¿ëÇÒ ¼ö ÀÖ´Â ÃÖ¼Ò·®À» %·Î ³ªÅ¸³½´Ù.
vm.buffermem = 2 10 60
À§¿¡¼ ¸»À» ÇÑ ´ë·Î °¡»ó ¸Þ¸ð¸®¿Í °ü·ÃÇÑ ¼³Á¤Àº ½Ã½ºÅÛÀÇ ¼º´É¿¡ Å« ¿µÇâÀ» ¹ÌÄ¡Áö¸¸ À߸ø ¹Ù²Ù¾úÀ» °æ¿ì¿¡´Â
¾Æ¿¹ ½Ã½ºÅÛÀÌ ¸Ü¾î¹ö¸®´Â Çö»óÀÌ »ý±æ ¼ö°¡ ÀÖ´Ù.
Å×½ºÆà ¼¹ö¿¡¼ Á¶±Ý¾¿ °ªÀ» ¹Ù²Ù¾î°¡¸é¼ Àڽſ¡°Ô ¸Â´Â ¼³Á¤À» ã¾Æ¾ß ÇÒ µíÇÏ´Ù.
Àý´ë ÇöÀç ¼ºñ½ºµÇ°í ÀÖ´Â ½Ã½ºÅÛ¿¡¼ Å×½ºÆÃÀ» ÇÏÁö´Â ¸»ÀÚ.
¤· ½º¿ÍÇÎ Á¶Àý :
°¡»ó ¸Þ¸ð¸®¿Í °ü·ÃµÈ ¼³Á¤ Áß ½Ã½ºÅÛÀÇ ¼º´É°ú ¿¬°üÀÌ ±íÀº °ÍÀ¸·Î´Â freepages(vm.freepages)°¡ ÀÖ´Ù.
freepages´Â Ä¿³Î¿¡¼ ½º¿ÍÇÎÀ» ¾ðÁ¦ ¾î¶»°Ô ÇÒÁö¿¡ ´ëÇÑ µ¿ÀÛÀ» Á¦¾îÇÑ´Ù.
ù ¹ø° °ªÀº minÀ¸·Î free pages°¡ ÀÌ ¼ýÀÚ ÀÌÇÏ·Î ³Ñ¾î°¥ ¶§¸¸ Ä¿³Î¿¡¼ ´õ ¸¹Àº ¸Þ¸ð¸®¸¦ ÇÒ´çÇÑ´Ù.
µÎ ¹ø° °ªÀº low·Î free pages°¡ ÀÌ ¼ýÀÚ ÀÌÇÏ·Î ³Ñ¾î°¥ ¶§ Ä¿³Î¿¡¼ ½º¿ÍÇÎÀ» ½ÃÀÛÇÑ´Ù.
¼¼ ¹ø° °ªÀº high·Î ½Ã½ºÅÛ¿¡¼ ½º¿ÍÇÎÀ» ¿øÈ°ÇÏ°Ô Çϱ⠽ÃÀÛÇϱâ À§Çؼ ÃÖ¼ÒÇÑ °¡Áö°í ÀÖ¾î¾ß ÇÒ free ¸Þ¸ð¸® ÆäÀÌÁö¸¦ ÁöÁ¤ÇÑ´Ù. ±×·¯¹Ç·Î Ç×»ó ½Ã½ºÅÛ¿¡¼ ¿©±â¿¡ ÇØ´çÇÏ´Â ÆäÀÌÁö¸¦ free·Î °¡Áö°í ÀÖÀ¸·Á ÇÑ´Ù.
¾Æ·¡´Â ±âº» ¼³Á¤°ªÀÌ´Ù.
vm.freepages = 383 766 1149
¤· ¿ ¼ö ÀÖ´Â ÆÄÀÏ ÇÚµé Á¶Á¤ :
file-max´Â ¸®´ª½º Ä¿³Î¿¡¼ ÇÒ´çÇÒ ¼ö ÀÖ´Â ÃÖ´ë ÆÄÀÏ ÇÚµéÀ» ÁöÁ¤ÇÑ´Ù.
"running out of file handles" ¶ó´Â ¿¡·¯ ¸Þ½ÃÁö°¡ ³ª¿À´Â °æ¿ì¿¡´Â ÀûÀýÈ÷ ´Ã·ÁÁÖ¾î¾ß ÇÑ´Ù.
ÀÌ´Â ÆÄÀÏ ¿ÀÇÂÀÌ ¸¹Àº »çÀÌÆ®¿¡¼ ³ªÅ¸³ª´Â Çö»óÀÌ´Ù. À¥È£½ºÆà ¾÷üÀÇ °æ¿ì À¥·Î±×ÆÄÀÏ, ¸ÞÀϼ¹ö °ü·ÃÆÄÀÏ µîÀ» Á¦´ë·Î °ü¸®ÇÏÁö ¾ÊÀ¸¸é ÀÌ·± °æ¿ì°¡ »ý±ä´Ù.
ºÒÇÊ¿äÇÑ ÆÄÀÏÀ» ¾ø¾Ö°í ·Î±×ÆÄÀÏÀ» ÅëÇÕÇÏ¿© ó¸®ÇÑ ÈÄ ÀÌÈÄ¿¡ º°µµ·Î µµ¸ÞÀκ°·Î ºÐ¸®ÇÏ´Â ¹æ¹ýÀ» »ý°¢ÇØ º¼ ¼ö ÀÖ´Ù.
4M´ç 256°³ÀÇ ÆÄÀÏÀ» ÇÒ´çÇØÁÖ¸é µÈ´Ù. ¸Þ¸ð¸®¿¡ ¸ÂÃß¾î ¼³Á¤ÇØÁÖ¸é µÈ´Ù.
fs.file-max = 8192
/proc/sys/fs¿¡¼ file-nrÀ» º¸¸é ÇöÀç ÇÒ´çµÇ¾î ÀÖ´Â ÆÄÀÏ °³¼ö¸¦ ¾Ë ¼ö ÀÖ´Ù.
# cat /proc/sys/fs/file-nr
696 158 32768
ù ¹ø° ¼ýÀÚ´Â ÇöÀç ÇÒ´çµÈ ÆÄÀÏÇÚµé, µÎ ¹ø° ¼ýÀÚ´Â ±×Áß »ç¿ëµÈ ÆÄÀÏÇÚµéÀÌ°í Á¦ÀÏ µÚÀÇ ¼ýÀÚ´Â ÆÄÀÏÇÚµéÀÇ ÃÖ´ë ¼ýÀÚÀÌ´Ù.
À§¿¡¼ ÁöÁ¤ÇÑ file-max °ªÀÌ´Ù.
½Ã½ºÅÛ¿¡¼ ÇöÀç ÇÒ´çµÇ¾î ÀÖ´Â inode °³¼ö´Â inode-state ³ª inode-nrÀÇ Á¦ÀÏ ¾ÕÀÇ ¼ýÀÚ¸¦ º¸¸é µÈ´Ù.
# cat /proc/sys/fs/inode-state
3457 6 0 0 0 0 0
¤· ÇÁ·Î¼¼½º °³¼ö¿Í ÆÄÀÏ °³¼ö Á¶Á¤ :
ulimit -a¸¦ ÀÌ¿ëÇÏ¿© »ç¿ëÀÚº° ÇÁ·Î¼¼½º ¼ýÀÚ¿Í ¿¼ö ÀÖ´Â ÆÄÀÏ °³¼ö¸¦ Á¦ÇÑÇÒ ¼ö ÀÖ´Ù.
Ä¿³Î 2.2¿¡¼´Â µ¿½Ã¿¡ »ý¼º °¡´ÉÇÑ ÇÁ·Î¼¼½º ¼ö¿¡ ´ëÇÑ Á¦ÇÑÀÌ ÀÖ¾ú´Âµ¥ Ä¿³Î 2.4·Î ³Ñ¾î¿À¸é¼ ÀÌ¿¡ ´ëÇÑ Á¦ÇÑÀÌ ¾ø¾îÁ³´Ù.
(task.h¿¡¼ ÁöÁ¤Çߴµ¥ Ä¿³Î 2.4¿¡´Â ÆÄÀÏÀÌ ¾ø¾îÁ³´Ù) ÀÌÁ¦ À¯ÀÏÇÑ Á¦¾àÀº ¸Þ¸ð¸® ÇÑ°èÀÌ¸ç ¸¹Àº ¼öÀÇ ÇÁ·Î¼¼½º¸¦ Áö¿øÇϱâ À§ÇØ ½ºÄÉÁì·¯µµ Çâ»óÀÌ µÇ¾ú´Ù.
max user processes´Â 16383À̸ç open files´Â 1024ÀÌ´Ù. ½´ÆÛÀ¯ÀúÀÎ root¿¡°Ô´Â max user processes Á¦ÇÑÀ» ulimit -n unlimited ¶ó´Â ¸í·ÉÀ» ÅëÇÏ¿© ¾ø¾Ø´Ù.
ÀÌÈÄ¿¡µµ °è¼Ó Àû¿ëÀ» ÇÏ·Á¸é .bashrc µî¿¡ ÁöÁ¤À» ÇÏ¸é µÈ´Ù.
# ulimit -a
core file size (blocks) 0
data seg size (kbytes) unlimited
file size (blocks) unlimited
max memory size (kbytes) unlimited
stack size (kbytes) 8192
cpu time (seconds) unlimited
max user processes 16383
pipe size (512 bytes) 8
open files 1024
virtual memory (kbytes) 2105343
±×·±µ¥ ÀÚ¿ø Çѵµ¸¦ º¯°æÇÑ´Ù°í ÇÏ´õ¶óµµ »ç¿ëÀÚ°¡ ¼ÒÇÁÆ® Çѵµ¸¦ º¯°æÇÒ ¼ö ÀÖ´Ù.
¶ÇÇÑ À§ÀÇ ¸ðµç Á¦ÇÑÀº ÇÁ·Î¼¼½ºº°·Î µÇ¾î Àִµ¥ ½ÇÁ¦ ÀÛ¾÷Àº ¿©·¯°³ÀÇ ÇÁ·Î¼¼½º·Î ±¸¼ºÀÌ µÇ¾î ÀÖ´Ù.
±×·¸Áö¸¸ ÄÚ¾î ÆÄÀÏ Å©±âÀÇ Çѵµ¸¦ Á¦ÇÑÇÏ´Â °ÍÀº À¯¿ëÇÑ ÀÏÀÌ´Ù.
À̸¦ º¸¿ÏÇÒ ¼ö ÀÖ´Â °ÍÀÌ PAM(Pluggable Authentication Module)À» ÀÌ¿ëÇÑ limit.conf ÆÄÀÏÀÇ È°¿ëÀÌ´Ù.
/etc/security µð·ºÅ丮¿¡ ÀÖ´Ù. ÀÌ ÆÄÀÏÀ» ÀÌ¿ëÇÏ¿© ·Î±×ÀÎÇÑ »ç¿ëÀÚÀÇ ½Ã½ºÅÛ ÀÚ¿øÀ» Á¦ÇÑÇÒ ¼ö ÀÖ´Ù.
¸ÕÀú /etc/pam./login ÆÄÀÏ¿¡ ¾Æ·¡ ³»¿ëÀÌ ¾øÀ¸¸é Ãß°¡ÇÑ´Ù. limit.conf ¸¦ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ¼³Á¤ÇÏ´Â °ÍÀÌ´Ù.
session required /lib/security/pam_limits.so
ÀÌÁ¦ /etc/security/limit.conf ÆÄÀÏÀ» ÇÊ¿ä¿¡ µû¶ó ¼öÁ¤ÇÑ´Ù. °£´ÜÇÑ ¿¹¸¦ µé¾î ¼³¸íÇغ¸°Ú´Ù.
* hard core 0
* hard rss 5000
* hard nproc 20
* hard cpu 5
* hard data 10000
ÄÚ¾î ÆÄÀÏÀº »ý¼ºÇÏÁö ¸øÇÏ°í ÃÖ´ë resident set size´Â 5M·Î, ÇÁ·Î¼¼½º´Â ÃÖ´ë 20°³·Î Á¦ÇÑÀ» ÇÏ¿´°í CPU ¼±Á¡ ½Ã°£Àº ÃÖ´ë 5ºÐÀ̸ç ÃÖ´ë µ¥ÀÌÅÍ´Â 10MÀÌ´Ù.
°èÁ¤À» °¡Áø »ç¿ëÀÚ°¡ ¾Æ¹«·± Á¦ÇѾøÀÌ Á¢¼ÓÇÏ¿© ¸Þ¸ð¸®¸¦ ¾öû³ª°Ô Àâ¾Æ¸Ô´Â ÇÁ·Î±×·¥À» ¸¸µé¾ú´Ù°í Çغ¸ÀÚ. (**ÁÖ2)
$ cat memdown.c
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *memory;
int size=1024;
int m=0;
int i=0;
while(1)
{
for(i=0;i<1024;i++)
{
memory = (char *)malloc(size);
if(memory == NULL) exit(-1);
sprintf(memory, "¸Þ¸ð¸®¸¦ »ç¶ûÇØ~n");
}
m++;
printf("ÇöÀç %d M ¼Òºñn",m);
}
exit(0);
}
$ gcc -o memdown memdown.c
±×·¯¸é memdownÀ» ½ÇÇàÇغ¸ÀÚ. Àý´ë ¼¹ö¿¡¼´Â ÇÏÁö ¸»±â ¹Ù¶õ´Ù.
¾Æ¹«·± Á¦ÇÑÀÌ ¾ø´Â °æ¿ì¿¡´Â ¸Þ¸ð¸®°¡ ºÎÁ·ÇÑ ½Ã½ºÅÛ¿¡¼´Â ÇöÀç ÀÖ´Â ¸Þ
¸ð¸®¸¦ ¸ðµÎ Àâ¾Æ¸Ô°í ³ªÁß¿¡´Â ½º¿Ò±îÁö ÀüºÎ ¼ÒºñÇÒ ¼ö°¡ ÀÖ´Ù. ÀÌ·¸°Ô
¸Þ¸ð¸® °í°¥, ÇÁ·Î¼¼½º °í°¥ µîÀ» ¸·´Âµ¥ À¯¿ëÇÏ´Ù.
¿©±â¼ Á¦ÇÑÀ» °É ¼ö ÀÖ´Â »çÇ×Àº ´ÙÀ½°ú °°´Ù.
- core : ÄÚ¾îÆÄÀÏ Å©±â(KB)
- data : ÃÖ´ë µ¥ÀÌÅÍ Å©±â(KB)
- fsize : ÃÖ´ë ÆÄÀÏÅ©±â(KB)
- memlock - ÃÖ´ë ¸Þ¸ð¸®Àá±è(locked-in-memory) ÁÖ¼Ò °ø°£(KB)
- nofile : ÃÖ´ë ¿¼ö ÀÖ´Â ÆÄÀϼö
- rss : ÃÖ´ë »óÁÖ¼Â(resident set) Å©±â(KB)
- stack : ÃÖ´ë ½ºÅà ũ±â(KB)
- cpu : ÃÖ´ë CPU ½Ã°£(MIN)
- nproc : ÃÖ´ë ÇÁ·Î¼¼½º °³¼ö
- as - ÁÖ¼Ò °ø°£ Á¦ÇÑ
- maxlogins - ÃÖ´ë ·Î±×ÀÎ ¼ýÀÚ
- priority - »ç¿ëÀÚ ÇÁ·Î¼¼½º ½ÇÇà ¿ì¼±¼øÀ§
À§¿¡¼ º¸¾Ò´ø °£´ÜÇÑ ÇÁ·Î±×·¥Àº "username hard data 10000" ÀÌ·¸°Ô °£
´ÜÇÑ ÇÑÁÙ·Î ÃæºÐÈ÷ ¸·À» ¼ö ÀÖ´Ù. ´Ù½Ã À§ÀÇ ÇÁ·Î±×·¥À» ½ÇÇàÇغ¸¸é 9M±î
Áö ¸Þ¸ð¸®¸¦ »ç¿ëÇÑÈÄ ¸ØÃá´Ù.
$ ./memdown
ÇöÀç 1 M ¼Òºñ
ÇöÀç 2 M ¼Òºñ
ÇöÀç 3 M ¼Òºñ
ÇöÀç 4 M ¼Òºñ
ÇöÀç 5 M ¼Òºñ
ÇöÀç 6 M ¼Òºñ
ÇöÀç 7 M ¼Òºñ
ÇöÀç 8 M ¼Òºñ
ÇöÀç 9 M ¼Òºñ
maxloginÀº À¥È£½ºÆà ¾÷ü¿¡¼ »ç¿ëÀÚµéÀÇ Á¢¼ÓÀ» Á¦ÇÑÇϴµ¥ À¯¿ëÇÏ´Ù.
°èÁ¤À» ÁÖ°í ¸î½Ê¸íÀ̼ Á¢¼ÓÀ» Çϵµ·Ï ³»¹ö·ÁµÎ¾î¼´Â ¾ÈµÇ±â ¶§¹®ÀÌ´Ù.
¤· ÇÁ·Î¼¼½º´ç ¿ ¼ö ÀÖ´Â ÆÄÀÏ °³¼ö :
À§¿¡¼ ¼³Á¤À» ¹Ù²Û´Ù°í ÇÏ´õ¶óµµ ÇÁ·Î¼¼½º´ç ¿ ¼ö ÀÖ´Â ÆÄÀÏ °³¼ö´Â 1024·Î µÇ¾î ÀÖ´Ù.
À̸¦ ¼öÁ¤ÇÏ·Á¸é Ä¿³Î ¼Ò½º¸¦ °íÃľßÇϴµ¥ Ä¿³Î ¼Ò½º µð·ºÅ丮ÀÇ include/linux µð·ºÅ丮·Î À̵¿ÇÏ¿© fs.h ¿Í limits.h¸¦ ¼öÁ¤ÇÏ¸é µÈ´Ù.
fs.h¿¡¼´Â INR_OEPN °ú NR_OEPNÀ» ¿øÇÏ´Â ¼öÄ¡·Î Á¶Á¤ÇÏ°í »õ·Î ÄÄÆÄÀÏÀ» ÇÏ¸é µÈ´Ù.
±×·±µ¥ ½Ã½ºÅÛ¿¡¼ µ¿½Ã¿¡ ¿ ¼ö ÀÖ´Â ÆÄÀϼö ÀÌ»óÀ¸·Î ÀÌ ¼öÄ¡¸¦ ³ôÀÌ´Â °ÍÀº ºÒÇÊ¿äÇÑ ÀÏÀÌ´Ù.
±×¸®°í ±»ÀÌ ¼öÁ¤ÇÏÁö ¾Ê´õ¶óµµ ÀϹÝÀûÀΠȯ°æ¿¡¼ ÇϳªÀÇ ÇÁ·Î¼¼½º°¡ 1024°³ ÀÌ»óÀÇ ÆÄÀÏÀ» ¿©´Â ÀÏÀº µå¹°´Ù°í »ý°¢ÀÌ µÈ´Ù.
Ãâó : tunelinux.pe.kr