Ä¿ÇǴнº, ½Ã½ºÅÛ ¿£Áö´Ï¾îÀÇ ½°ÅÍ
  iptables¿¡¼­ ƯÁ¤ ½Ã°£ ÈÄ ruleÀ» ÀÚµ¿ »èÁ¦ÇÏ´Â ¹æ¹ý ÀÛ¼ºÀÏ : 2011/06/20 18:34
 
  • ±Û¾´ÀÌ : ÁÁÀºÁøÈ£ ( http://coffeenix.net/ )
  • Á¶È¸¼ö : 8732
     
    Á¦  ¸ñ : iptables¿¡¼­ ƯÁ¤ ½Ã°£ ÈÄ ruleÀ» ÀÚµ¿ »èÁ¦ÇÏ´Â ¹æ¹ý
    ÀÛ¼ºÀÚ : ÁÁÀºÁøÈ£(truefeel, http://coffeenix.net/ )
    ÀÛ¼ºÀÏ : 2011.6.14(È­)


    ¸®´ª½º iptables¿¡¼­ ƯÁ¤ ½Ã°£ÀÌ Áö³ª¸é ruleÀ» ÀÚµ¿À¸·Î »èÁ¦(expire)½ÃÅ°´Â ¹æ¹ýÀ» ã¾ÆºÃ´Ù.
    À̸¦Å׸é ƯÁ¤ IP¸¦ 30ºÐ°£¸¸ ¶Ç´Â ÇϷ絿¾È¸¸ Â÷´Ü½ÃÅ°°í DROP¿¡¼­ »©°í ½Í´Ù¸é ¾î¶»°Ô ÇؾßÇÒ±î.

    serverfault( http://serverfault.com/ )¿¡¼­ ´ë´ÜÇÑ ²Ç¼ö¸¦ ¹ß°ßÇß´Ù.

    How to make iptables rules expire?
    http://serverfault.com/questions/273324/how-to-make-iptables-rules-expire


    1. at ¸í·ÉÀ» ÀÌ¿ëÇؼ­

    at´Â cronó·³ ƯÁ¤ ½Ã°£¿¡ ÀÛ¾÷À» ½ÇÇàÇÒ ¼ö ÀÖ´Ù.

     
          iptables -I INPUT -s 192.168.123.100 -j DROP
    echo "iptables -D INPUT -s 192.168.123.100 -j DROP" | at @10pm
     


    ·êÀ» óÀ½ »ý¼ºÇÒ ¶§, 2°³ ¸í·ÉÀ» µ¿½Ã¿¡ ½ÇÇà½ÃŲ´Ù.
    Çϳª´Â -I(Insert) ¶Ç´Â -A(Append)·Î iptables¿¡ ·êÀ» »ý¼ºÇÏ´Â °ÍÀÌ°í,
    ´Ù¸¥ Çϳª´Â -D(Delete)·Î ÁöÁ¤ ½Ã°£À̳ª ½Ã°£°£°ÝÀ» ÁöÁ¤Çؼ­ ÀÚµ¿À¸·Î »èÁ¦µÇµµ·Ï at¸í·ÉÀ» ½ÇÇà½ÃÄѵδ °ÍÀÌ´Ù. at¸í·ÉÀº Æøź ŸÀ̸Ӱ¡ µÇ¾î, ÇØ´ç ½Ã°£ÀÌ µÇ¸é ·êÀ» ÀÚµ¿À¸·Î »èÁ¦¸¦ ÇÒ °ÍÀÌ´Ù.
    ÇöÀçºÎÅÍ 30ºÐ ÀÌÈÄ¿¡ ·êÀ» »èÁ¦ÇÏ°í ½Í´Ù¸é at now +30 minutes ó·³ ÁöÁ¤ÇÑ´Ù. hours, days, weeks µîÀÇ ´ÜÀ§¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

    À§¿Í°°ÀÌ ¾ÆÁÖ °£´ÜÇÑ ¹æ¹ýÀ¸·Î ÇØ°áÃ¥À» ã´Ù´Ï, ³î¶ø±â¸¸ ÇÏ´Ù.
    atd µ¥¸óÀÌ ¶ç¿öÁ® ÀÖ¾î¾ß Çϸç, at ¸í·ÉÀ¸·Î ½ÇÇàÁßÀÎ job¸ñ·ÏÀº atq·Î È®ÀÎÇÒ ¼ö ÀÖ´Ù. (¡Ø °³ÀÎÀûÀ¸·Î at´Â »ç¿ëÇÏÁö ¾Ê´Â´Ù.)


    2. iptables¿¡ expireó¸®ÇÒ timestamp¸¦ comment. ÇöÀç timestamp¿Í ºñ±³ »èÁ¦

    ´äº¯ÀÚ Seth Robertson´Â ¾î¶»°Ô ÀÌ·± ¹æ¹ýÀ» »ý°¢ÇسÂÀ»±î. ´ë´ÜÇÏ´Ù´Â »ý°¢¹Û¿¡ ¾Èµç´Ù.

    1) ·ê »ý¼º (expireó¸®ÇÒ ·êÀ» ¸¸µç´Ù. 30ºÐ µÚ¿¡ expireÇÒ °æ¿ì)

     
    # iptables -A INPUT -s 192.168.123.100 -m comment --comment "expire=`date -d '+ 30 min' +%s`" -j DROP
     


    iptable -L -n À¸·Î ·ê ¸ñ·ÏÀ» È®ÀÎÇÏ¸é ´ÙÀ½°ú °°ÀÌ ÁÖ¼®À¸·Î expireÇÒ ½Ã°£(timestamp°ª, ÇöÀç½Ã°£+30ºÐ)ÀÌ Ç¥½ÃµÇ¾î ÀÖ´Ù.

     
    DROP       all  --  192.168.123.100      0.0.0.0/0           /* expire=1308025139 */
     


    2) ·ê »èÁ¦

    ¸ÕÀú ÇöÀç ·ê¿¡¼­ ÁÖ¼®ÇصР°ÍÀ» »ìÆ캸ÀÚ.

     
    # iptables -L INPUT -n --line-numbers
    Chain INPUT (policy ACCEPT)
    num  target     prot opt source               destination        
    1    DROP       all  --  123.123.123.120      0.0.0.0/0           /* expire=1308026089 */
    2    DROP       all  --  123.123.123.121      0.0.0.0/0           /* expire=1308026086 */
    ... »ý·« ...
    28   DROP       all  --  123.123.123.123      0.0.0.0/0           /* expire=1308026079 */
     


    ÀÌÁ¦ 30ºÐ µÚ¿¡ »èÁ¦ÇÒ ¸ñ·ÏÀ» È®ÀÎÇغ¸ÀÚ. °¡Àå ÇÙ½ÉÀÌ µÇ´Â ºÎºÐÀÌ´Ù.

     
    # iptables -L INPUT -n --line-numbers  | perl -ne 'next unless /(^\d+).*expire=(\d+)/; if ($2 < time) { print "iptables -D INPUT $1\n"; }'
    iptables -D INPUT 1
    iptables -D INPUT 2
    iptables -D INPUT 28
     


    À§ÀÇ perl ¸í·É ºÎºÐÀº '·ê ¹øÈ£'(Çʵå 1¹ø)¿Í commentÀÇ 'expires= ºÎºÐÀÇ ¼ýÀÚ'(Çʵå 2¹ø)¸¦ »Ì¾Æ ³½´Ù. ±×¸®°í, ÀÌ expiresÀÇ timestamp¸¦ ÇöÀç ½Ã°£°ú ºñ±³Çؼ­ ´õ ÀÛÀºÁö¸¦ ÆÇ´ÜÇÑ´Ù. Áï, expireÇÒ ½Ã°£ÀÌ Áö³ª¼­ Áö¿öµµ µÇ´Â ·êÀÎÁö¸¦ ÆÇ´ÜÇÑ´Ù.

    À§¿¡¼­ print "iptables -D INPUT $1\n" ´ë½Å¿¡ system "iptables -D INPUT $1" ·Î ¹Ù²Ù¸é ·êÀÌ »èÁ¦µÈ´Ù.
    À§ 1ÁÙÀ» ½ºÅ©¸³Æ® ÆÄÀÏ·Î ¸¸µç´Ù. ±×¸®°í cron¿¡ Àû´çÇÑ ½Ã°£°£°Ý(1~10ºÐÁ¤µµ)À¸·Î ½ÇÇàµÇµµ·Ï µî·ÏÇϸé, ¿øÇÏ´Â ½Ã°£ÀÌ Áö³ª¸é ÀÚµ¿À¸·Î ·êÀº expireµÈ´Ù.

    * iptables_expires.sh ³»·Á¹Þ±â
     
    #!/bin/sh
    #
    # rule expire ó¸®
    #
    # - rule »ý¼º ¿¹) iptables -A INPUT -s -m comment --comment "expire=`date -d '+ 30 min' +%s`" -j DROP

    export PATH=$PATH:/sbin:/usr/sbin:/usr/local/bin

    iptables -L INPUT -n --line-numbers  | \
    ¡¡¡¡¡¡perl -ne 'next unless /(^\d+).*expire=(\d+)/; if ($2 < time) { system "iptables -D INPUT $1"; }'
     



    Ä¿ÇǴнº, ½Ã½ºÅÛ ¿£Áö´Ï¾îÀÇ ½°ÅÍ / URL : http://coffeenix.net/board_view.php?bd_code=1722