1. ¼­¹®

º» ¹®¼­´Â ¿©Çà°úµµ °°À¸¸ç, ÀϺκÐÀº ¾ÆÁÖ ½±°Ô ¿©ÇàÇÒ ¼ö ÀÖ°í ¶Ç ´Ù¸¥ ºÎºÐ¿¡¼­´Â µ¶ÀÚ ¿©·¯ºÐ ½º½º·Î ±æÀ» ã¾Æ¾ß ÇÒ °ÍÀÌ´Ù. ÇÊÀÚ°¡ µ¶ÀÚ¿¡°Ô ÇÒ ¼ö ÀÖ´Â ÃÖ»óÀÇ Ãæ°í´Â ¾ÆÁÖ Å« ¸Ó±×ÀÜ¿¡ Ä¿Çdzª ÇÖÃÝÄݸ´À» °¡µæ ´ã¾Æ Æí¾ÈÇÑ ÀÇÀÚ¿¡ ¾É¾Æ À§Ç轺·± ±æÀ» °¡±â Àü¿¡ º»¹®ÀÇ ³»¿ëÀ» ³ÝÆ®¿÷ ÇØÅ·À̶ó´Â ¾ÆÁÖ À§Ç轺·¯¿î ¼¼»ó¿¡ ºÎÇÕ½ÃÄÑ ±íÀÌ »ý°¢ÇØ º¸¶ó´Â °Í ¹Û¿¡ ¾ø´Ù.

³ÝÇÊÅÍ ÇÁ·¹ÀÓ¿÷ÀÇ ÃÖ»óÀ§¿¡ ÀÖ´Â ³»ºÎ±¸Á¶ÀÇ »ç¿ë¹ýÀ» º¸´Ù Àß ÀÌÇØÇϱâ À§Çؼ­´Â, Packet Filtering HOWTO¿Í NAT HOWTO¸¦ Àо´Â °ÍÀÌ ÁÁÀ» °ÍÀÌ´Ù. Ä¿³Î ÇÁ·Î±×·¡¹Ö¿¡ ´ëÇÑ Á¤º¸¸¦ ¾ò°íÀÚ ÇÑ´Ù¸é Rusty's Unreliable Guide to Kernel Hacking°ú Rusty's Unreliable Guide to Kernel LockingÀ» Âü°íÇϱ⠹ٶõ´Ù.

(C) 2000 Paul `Rusty' Russell. Licensed under the GNU GPL.

1.1. ³ÝÇÊÅÍ(netfilter)¶õ ¹«¾ùÀΰ¡?

³ÝÇÊÅʹ ǥÁØ Berkeley socket interfaceÀÇ ¿ÜºÎ¿¡ Á¸ÀçÇÏ´Â packet mangling(ÆÐŶÀ» Å丷³»´Â ÀÏ)¿¡ ´ëÇÑ ÇÁ·¹ÀÓ¿÷À¸·Î, Å©°Ô ³× ºÎºÐÀ¸·Î ±¸¼ºµÇ¾î ÀÖ´Ù. ¸ÕÀú °¢°¢ÀÇ ÇÁ·ÎÅäÄÝÀº "hooks"¶ó´Â °ÍÀ» Á¤ÀÇÇϸç, ÀÌ´Â ÆÐŶ ÇÁ·ÎÅäÄÝ ½ºÅÃÀÇ packet's traversal¿¡ ÀÖ´Â Àß Á¤ÀÇµÈ Æ÷ÀÎÅ͸¦ ÀǹÌÇÑ´Ù. ÀÌ·¯ÇÑ Æ÷ÀÎÅÍ¿¡¼­, °¢°¢ÀÇ ÇÁ·ÎÅäÄÝÀº ÆÐŶ°ú Èųѹö(hook number)¸¦ ÀÌ¿ëÇÏ¿© ³ÝÇÊÅÍ ÇÁ·¹ÀÓ¿÷À» È£ÃâÇÏ°Ô µÈ´Ù.

µÎ ¹øÂ°·Î, Ä¿³ÎÀÇ ÀϺκÐÀº °¢ ÇÁ·ÎÅäÄÝ¿¡ ´ëÇÏ¿© ´Ù¸¥ hookÀ» °¨½ÃÇϵµ·Ï µî·ÏÇÒ ¼ö ÀÖ´Ù. µû¶ó¼­ ÆÐŶÀÌ ³ÝÇÊÅÍ ÇÁ·¹ÀÓ¿÷À» Åë°úÇÒ ¶§, ´©°¡ ±× ÇÁ·ÎÅäÄݰú ÈÅÀ» µî·ÏÇß´ÂÁö È®ÀÎÇÏ°Ô µÈ´Ù. ÀÌ·¯ÇÑ °ÍÀÌ µî·ÏµÇ¾î ÀÖ´Ù¸é, µî·ÏµÈ ¼ø¼­´ë·Î ÆÐŶÀ» °Ë»çÇϰí, ÆÐŶÀ» ¹«½ÃÇϰųª(NF_DROP), Åë°ú½Ã۰í(NF_ACCEPT), ¶Ç´Â ÆÐŶ¿¡ ´ëÇÑ °ÍÀ» Àؾî¹ö¸®µµ·Ï ³ÝÇÊÅÍ¿¡°Ô Áö½ÃÇϰųª(NF_STOLEN), »ç¿ëÀÚ °ø°£¿¡ ÆÐŶÀ» ´ë±â½Ã۵µ·Ï(queuing) ³ÝÇÊÅÍ¿¡°Ô ¿äûÇÑ´Ù(NF_QUEUE).

¼¼ ¹øÂ° ºÎºÐÀº ´ë±âµÈ ÆÐŶÀ» »ç¿ëÀÚ °ø°£À¸·Î º¸³»±â À§ÇØ Á¦¾îÇÏ´Â °ÍÀ¸·Î ÀÌ·¯ÇÑ ÆÐŶÀº ºñµ¿±â¹æ½ÄÀ¸·Î 󸮵ȴÙ.

¸¶Áö¸· ºÎºÐÀº ÄÚµå¿Í ¹®¼­¿¡ ±â·ÏµÈ ÁÖ¼®¹®À¸·Î ±¸¼ºµÇ¾î ÀÖÀ¸¸ç, ÀÌ´Â ¾î¶°ÇÑ ½ÇÇèÀû ÇÁ·ÎÁ§Æ®¿¡ ´ëÇØ¼­µµ µµ¿òÀÌ µÇ´Â ºÎºÐÀÌ´Ù. ³Ý ÇÊÅÍÀÇ ¸ðÅä´Â ´ÙÀ½°ú °°´Ù.
				``±×·¡¼­... KDEº¸´Ù ¾ó¸¸Å­ ÁÁ´Ù´Â °ÅÁÒ?''
			

ÀÌ·¯ÇÑ Àú¼öÁØ ÇÁ·¹ÀÓ¿÷°ú ´õºÒ¾î, ´Ù¾çÇÑ ¸ðµâÀÌ ÀÛ¼ºµÇ¾úÀ¸¸ç, ÀÌ´Â ÀÌÀü ¹öÀüÀÇ Ä¿³Î¿¡ ´ëÇÏ¿© À¯»çÇÑ ±â´É, È®Àå °¡´ÉÇÑ NAT½Ã½ºÅÛ ±×¸®°í È®Àå °¡´ÉÇÑ ÆÐŶ ÇÊÅ͸µ ½Ã½ºÅÛÀ» Á¦°øÇÑ´Ù.

1.1.1. Ä¿³Î 2.0°ú 2.2¿¡¼­ÀÇ ¹®Á¦Á¡?

  1. »ç¿ëÀÚ °ø°£À» Åë°úÇÏ´Â ÆÐŶ¿¡ ´ëÇÏ¿© ¾î¶°ÇÑ ÇϺα¸Á¶µµ ¸¸µé¾îÁ® ÀÖÁö ¾ÊÀ¸¸ç ±× ÀÌÀ¯´Â ´ÙÀ½°ú °°´Ù.

    • Ä¿³Î¼öÁØ¿¡¼­ ÄÚµùÇÏ´Â °ÍÀÌ ¾î·Æ´Ù

    • ¹Ýµå½Ã C/C++·Î Ä¿³Î ¼öÁØÀÇ ÄÚµùÀÌ µÇ¾î¾ß ÇÑ´Ù.

    • µ¿Àû ÇÊÅ͸µ Á¤Ã¥ÀÌ Ä¿³Î¿¡ Æ÷ÇԵǾî ÀÖÁö ¾Ê´Ù.

    • Ä¿³Î 2.2¿¡¼­´Â ³Ý¸µÅ©¸¦ °Åó »ç¿ëÀÚ °ø°£À¸·Î ÆÐŶÀ» º¹»çÇÏ´Â ¹æ¹ýÀ» Á¦½ÃÇÏ¿´À¸³ª, ÀçÀü¼Û ÆÐŶÀÌ ´À¸®°í `sanity' check¿¡ Áö¹èµÈ´Ù. ¿¹¸¦ µé¸é, ÀçÀü¼Û ÆÐŶÀÌ ±âÁ¸ÀÇ ÀÎÅÍÆäÀ̽º·Î µé¾î¿Àµµ·Ï ¿äûÇÏ´Â °ÍÀÌ ºÒ°¡´ÉÇÏ´Ù.

  2. Åõ¸íÇÑ ÇÁ¶ô½Ã ±¸ÇöÀÌ ¾î·Æ´Ù.

    • ±× ÁÖ¼Ò¿Í ¿¬°üµÈ ¼ÒÄÏÀÌ Á¸ÀçÇÏ´Â Áö ¾Ë¾Æº¸±â À§ÇØ ¸ðµç ÆÐŶÀ» »ìÆìº»´Ù.

    • Root´Â ¿ÜºÎ ÁÖ¼Ò¿Í ¿¬°áµÇ´Â °ÍÀ» Çã°¡ÇØ¾ß ÇÑ´Ù.

    • ·ÎÄÿ¡¼­ »ý¼ºµÈ ÆÐŶÀ» ¸®´ÙÀÌ·ºÆ®ÇÒ ¼ö ¾ø´Ù.

    • REDIRECT´Â UDP¿¡ ´ëÇÑ ÀÀ´äÀ» ó¸®ÇÏÁö ¸ø ÇÑ´Ù. ¿¹¸¦ µé¸é, UDP ÆÐŶÀ» 1153À¸·ÎÀÇ ¸®´ÙÀÌ·ºÆ®°¡ µ¿ÀÛÀ» ÇÏÁö ¾Ê´Â °æ¿ìµµ ÀÖÀ¸¸ç, ÀÌ´Â ÀϺΠŬ¶óÀÌ¾ðÆ®°¡ 53¹ø Æ÷Æ®°¡ ¾Æ´Ñ ´Ù¸¥ °÷À¸·ÎºÎÅÍ µé¾î¿À´Â ÀÀ´äÀ» ½È¾îÇϱ⠶§¹®ÀÌ´Ù.

    • REDIRECT´Â tcp/upd Æ÷Æ® Àç¹èÄ¡¿¡ ´ëÇÏ¿© °ü¿©ÇÏÁö ¾Ê´Â´Ù. Áï, »ç¿ëÀÚ°¡ REDIRECT ·ê¿¡ ÀÇÇØ °áÁ¤µÈ Æ÷Æ®¸¦ ¾ò¾î¿Í¾ß ÇÑ´Ù.

    • Ä¿³Î 2.1 ½Ã¸®Áî °³¹ß±â°£ Áß ÃÖ¼Ò µÎ ¹ø Á¤µµ ÁߴܵǾú´Ù.

    • Äڵ尡 »ó´çÈ÷ ÁöÀúºÐÇÏ´Ù. Ä¿³Î 2.2.1¿¡¼­ #ifdef CONFIG_IP_TRANSPARENT_PROXYÀÇ »ç¿ë Åë°è¸¦ º¸¸é, 11°³ÀÇ ÆÄÀÏ¿¡ 34¹ø ³ªÅ¸³­´Ù. CONFIG_IP_FIREWALL°ú ºñ±³ÇØ º¸¸é, 5°³ÀÇ ÆÄÀÏ¿¡ 10¹ø¸¸ ³ªÅ¸³­´Ù.

  3. ÀÎÅÍÆäÀ̽º ¾îµå·¹½º¿Í º°°³·Î ÆÐŶÇÊÅÍ ·êÀ» ¸¸µå´Â °ÍÀÌ ºÒ°¡´ÉÇÏ´Ù.

    • ÀÎÅÍÆäÀ̽º¸¦ °ÅÃÄ¿À´Â ÆÐŶÀÌ ·ÎÄÿ¡¼­ »ý¼ºµÈ °ÍÀÎÁö ·ÎÄÃÀ» µé¾î¿À´Â °ÍÀÎÁö ±¸ºÐÇϱâ À§Çؼ­ ¹Ýµå½Ã ·ÎÄà ÀÎÅÍÆäÀ̽ºÀÇ ÁÖ¼Ò¸¦ ¾Ë¾Æ¾ß ÇÑ´Ù.

    • ¸®´ÙÀÌ·º¼ÇÀ̳ª ¸Å½ºÄ¿·¹À̵ùÀÇ °æ¿ì´Â Á¤º¸°¡ ÃæºÐÇÏÁö ¾Ê´Ù..

    • Æ÷¿öµù üÀθ¸ÀÌ ¿ÜºÎ·Î ÇâÇÏ´Â ÀÎÅÍÆäÀ̽º¿¡ ´ëÇÑ Á¤º¸¸¦ °¡Áö°í ÀÖ´Ù. ³×Æ®¿÷ ±¸¼º¿¡ ´ëÇÑ Áö½ÄÀ» ÀÌ¿ëÇÏ¿© ¾î´À ÀÎÅÍÆäÀ̽º·ÎºÎÅÍ ÆÐŶÀÌ µé¾î¿À´ÂÁö ¾Ë°í ÀÖ¾î¾ß¸¸ ÇÑ´Ù.

  4. ¸Å½ºÄ¿·¹À̵ùÀÌ ÇÊÅ͸µ¿¡ Æ÷ÇԵǾî ÀÖ´Ù:

    ÇÊÅ͸µ°ú ¸Å½ºÄ¿·¹À̵ù°£ÀÇ »óÈ£ÀÛ¿ëÀÌ ¹æÈ­º® ±¸ÃàÀ» º¹ÀâÇÏ°Ô ¸¸µç´Ù:

    • ÀÔ·Â ÇÊÅ͸µÀÎ °æ¿ì, ÀÀ´ä ÆÐŶÀÌ ¹Ú½º ÀÚü¸¦ ÇâÇÏ´Â °ÍÀ¸·Î ³ªÅ¸³­´Ù.

    • µð¸Å½ºÄ¿·¹À̵å(demasqueraded)µÇ´Â ÆÐŶÀÌ Æ÷¿öµå ÇÊÅ͸µ¿¡¼­´Â ÀüÇô ³ªÅ¸³ªÁö ¾Ê´Â´Ù.

    • Ãâ·Â ÇÊÅ͸µ¿¡¼­´Â ÆÐŶÀÌ ·ÎÄà ¹Ú½º·ÎºÎÅÍ µé¾î¿À´Â °Íó·³ º¸ÀδÙ.

  5. Æ÷Æ® Æ÷¿öµù, ¶ó¿ìÆÃ°ú QoS¿¡ ¿µÇâÀ» ÁÙ ¼ö ÀÖ´Â TOS ó¸®, ¸®´ÙÀÌ·ºÆ®, ICMP µµ´ÞºÒ°¡(unreachable)°ú ¸¶Å©(mark) µîÀÌ ÆÐŶ ÇÊÅ͸µ Äڵ忡 Æ÷ÇԵǾî ÀÖ´Ù.

  6. ipchains ÄÚµå´Â ¸ðµâÈ­µÇ¾î ÀÖÁöµµ ¾Ê°í È®ÀåÇÒ ¼öµµ ¾ø´Ù. (¿¹: MAC ¾îµå·¹½º ÇÊÅ͸µ, ¿É¼Ç ÇÊÅ͸µ µî)

  7. ÇϺα¸Á¶°¡ ºÒÃæºÐÇϱ⠶§¹®¿¡ ´Ù¸¥ ±â¼úÀ» ³¶ºñÇÏ°Ô ¸¸µé¾ú´Ù.

    • per-protocol ¸ðµâÀ» ´õÇÑ ¸Å½ºÄ¿·¹À̵ù

    • ¶ó¿ìÆÃ Äڵ忡 ÀÇÇÑ ºü¸¥ Á¤Àû NAT(per-protocol 󸮸¦ Æ÷ÇÔÇÏÁö ¾Ê¾Ò´Ù).

    • Æ÷Æ® Æ÷¿öµù, ¸®´ÙÀÌ·ºÆ®, ÀÚµ¿ Æ÷¿öµù

    • The Linux NAT and Virtual Server Projects.

  8. CONFIG_NET_FASTROUTE¿Í ÆÐŶ ÇÊÅ͸µ°£ÀÇ È£È¯¼º °á¿©:

    • Æ÷¿öµå ÆÐŶÀº ¼¼ °³ÀÇ Ã¼ÀÎÀ» °ÅÃÄ Àü´ÞµÈ´Ù.

    • ÀÌ·¯ÇÑ Ã¼ÀÎÀ» ¹«½ÃÇϰí Áö³ª°£ °æ¿ì ¾Ë·ÁÁÙ ¹æ¹ýÀÌ ¾ø´Ù.

  9. ¶ó¿ìÆÃ ÇÁ·ÎÅØ½º·Î ÀÎÇØ ¹ö·ÁÁø ÆÐŶÀ» °üÂûÇÒ ¼ö ¾ø´Ù. (Áï, Source Address Verification)

  10. ÆÐŶ ÇÊÅ͸µ ·ê¿¡ ´ëÇÏ¿© ÀÚµ¿À¸·Î Ä«¿îÅ͸¦ Àо ¹æ¹ýÀÌ ¾ø´Ù.

  11. CONFIG_IP_ALWAYS_DEFRAGÀº ÄÄÆÄÀÏÇÒ ¶§ ÁÖ´Â ¿É¼ÇÀÌ¶ó¼­ ÀϹÝÀûÀÎ ¸ñÀûÀ¸·Î ¿øÇÏ´Â Ä¿³ÎÀ» ¹èÆ÷ÆÇÀ» ¸¸µé±â°¡ ¾î·Æ´Ù.

1.1.2. ´©±¸½ÃÁÒ?

³ª´Â ÀÌ·± ÁþÀ» Çϸ®¸¸Å­ ¹Ùº¸½º·¯¿î »ç¶÷ÀÌ´Ù. ipchainsÀÇ °øµ¿ÀúÀÚÀ̰í ÇöÀç ¸®´ª½º Ä¿³Î IP ¹æÈ­º®ÀÇ ¸ÞÀÎÅͳʷμ­, ÇöÀçÀÇ ½Ã½ºÅÛ ¶§¹®¿¡ »ç¶÷µéÀÌ ¸¹Àº ¹®Á¦¸¦ °Ý¾ú´Ù´Â °Í »Ó¸¸ ¾Æ´Ï¶ó ±×µéÀÌ ½ÃµµÇϰí ÀÖ´Â °ÍÀÌ Á¡Á¡ ´õ ³ëÃâµÇ°í ÀÖ´Ù´Â °ÍÀ» ¾Ë¾Ò´Ù.

1.1.3. ±×°Ô ¿Ö ÆøÁÖÇÏÁÒ?

ÀÌ~~¾ß!, Áö³­ ÁÖ¿¡ ÀÌ ¹®¼­¸¦ ºÃ¾î¾ß ÇÏ´Â °Çµ¥...

»ç½Ç ³ª´Â ¿ì¸® ¸ðµÎ°¡ µÇ±â ¿øÇÏ´Â ±×·± ÈǸ¢ÇÑ ÇÁ·Î±×·¡¸Ó°¡ ¾Æ´Ï°í, ½Ã°£, Àåºñ ±×¸®°í ¿µ°¨µµ ºÎÁ·Çؼ­ ½Ã³ª¸®¿À Àüü¸¦ ÃæºÐÈ÷ Å×½ºÆ® ÇØº¸Áö ¸øÇß´Ù. ±×Àú ³»°¡ ÇØº» °ÍÀ̶ó°í´Â ¿©·¯ºÐµéÀÌ Âü¿©Çϱ⸦ ¹Ù¶ó´Â ¸¶À½¿¡¼­ ¸¸µç testsuite¸¦ µ¹¸®´Â °ÍÀÌ °íÀÛÀ̾ú´Ù.