FREEDOM. FRIENDS. FEATURES. FIRST.
페도라 한국 사용자 모임

[방화벽] 특정 아이피와 포트의 접속 제한하기

게시판 Tech/Tip [방화벽] 특정 아이피와 포트의 접속 제한하기

  • This topic has 1개 답변, 2명 참여, and was last updated 11 years 전에 by 인베인. This post has been viewed 24 times
  • 만든이
    게시글
  • #12154
    딱털서어
    참가자
    • 게시글87
    • 댓글316
    • 총합403
    • ★★
    @no1linuxer

    * 적용 OS : Fedora 9~12/Centos5.x/RHEL 5.x/SULinux 2.0

    크래킹 목적으로 특정 서비스 포트로 불법적으로 접근하는 아이피 주소를 차단하고자 하는 경우에는 사용자 정의 체인에 새로운 룰을 추가하여 접근을 제한시킬 수 있습니다. 이를 위해서 block-ip 스크립트를 다음과 같이 생성합니다.

    #!/bin/sh

    #

    # Scripted by No1linuxer at no1linux.org

    #


    EXT_IF="eth0"

    chain="RH-Firewall-1-INPUT"                 <- 사용자 정의 체인명으로 변경해 주어야 합니다.

     

    if [ $# -lt 1 ]; then

            echo "Usage: block-ip <TCP port>"

            exit 1

    fi

     

    if [ -f /etc/sysconfig/firewall.blacklist ]; then

            for i in $(< /etc/sysconfig/firewall.blacklist) ; do

            iptables -I $chain -i $EXT_IF -p tcp --dport $1 -s $i -j DROP

            cat /etc/sysconfig/firewall.blacklist >> /etc/sysconfig/fw.blacklisted

            cat /dev/null > /etc/sysconfig/firewall.blacklist

            done

            

            else

            echo "Please create /etc/sysconfig/firewall.blacklist file and then input blocking an IP per a line."

    fi 

    상기 스크립트에서 EXT_IF=는 인터넷이 연결된 이더넷 인터페이스를 의미하며 chain=에 사용자 정의 체인이름을 넣어주어야 합니다. block-ip 스크립트에 실행 가능한 퍼미션을 부여합니다.

     # chmod 750 block-ip

    /etc/sysconfig/firewall.blacklist 파일 안에는 차단할 아이피주소를 한 줄씩 넣어줍니다.

    192.168.0.4

    192.168.0.9

    10.0.0.2

    이 스크립트를 실행하는 방법은 다음과 같습니다.

     ./block-ip 서비스포트

    서비스 포트를 스크립트 뒤에 넣어 실행하면
    /etc/sysconfig/firewall.blacklist 파일에 있는 모든 아이피들은 22번 포트로 접근이 불가능해집니다.
    방화벽에 등록된 블랙리스트 아이피는 /etc/sysconifg/fw.blacklisted 파일에 기록되며,
    /etc/sysconfg/firwall.blacklist 파일은 초기화되어 데이터가 남아 있질 않게 됩니다. 계속해서 블랙리스트
    등록하고자 하는 아이피들은 /etc/sysconfig/firewall.blacklist 파일에 넣어주고, block-ip
    스크립트를 실행해 주면 됩니다.

    반대로 블랙리스트로 등록된 특정 아이피를 방화벽에서 해제해 주려면 다음과 같은 스크립트(unblock-ip)를 만듭니다.

    #!/bin/sh

    #

    # Scripted by No1Linuxer at no1linux.org

    #

    EXT_IF="eth0"

    chain="RH-Firewall-1-INPUT"       <- 사용자 정의 체인 이름으로 변경해 주어야 합니다.

     

    if [ $# -lt 1 ]; then

            echo "Usage: unblock-ip <TCP port>"

       exit 1

    fi

     

    if [ -f /etc/sysconfig/firewall.whitelist ]; then

            for i in $(< /etc/sysconfig/firewall.whitelist) ; do

            iptables -D $chain -i $EXT_IF -p tcp --dport $1 -s $i -j DROP

            cat /etc/sysconfig/fw.blacklisted | sed -e "/$i/d" > /tmp/fw.unblacklisted

            mv -f /tmp/fw.unblacklisted /etc/sysconfig/fw.blacklisted

            cat /dev/null > /etc/sysconfig/firewall.whitelist

            done

            

            else

            echo "Please create /etc/sysconfig/firewall.whitelist file and then input unblocking an IP per a line."

    fi

    /etc/sysconfig/firewall.whitelist 파일에 해제하고자 할 블랙리스트
    아이피를 한 줄로 넣어준 후에 ‘unblock-ip 포트번호’ 실행하면 됩니다. 이 명령이 실행되면 블랙리스트 아이피는
    방화벽에서 해제되며, /etc/sysconfig/fw.blacklisted에는 방화벽에서 블랙리스트로 설정된 아이피만 계속 남아
    있게 됩니다. 

    *참고: 프로그래밍 능력이 전무한 상태라 쉘 스크립트가 좀 허접할 수 있으므로, 이점 양해바라고, 좀더 매끄럽게 스크립트화될 수 있도록 조언해 주시면 감사하겠습니다.

    리눅스를 더 가까이 - No1.Linux

0 답변 글타래를 보이고 있습니다
  • 글쓴이
    답변
    • #12831
      인베인
      참가자
      • 게시글141
      • 댓글379
      • 총합520
      • ★★
      @leemgs

      개발용 리눅스 컴퓨터의  iptables 설정 예입니다.
      예를 들어, 지정돤 IP만 나의 개발 컴퓨터로 접속가능하게 방화벽 설정을 하고자 할때
      아래처럼 하면 됩니다.

      fedora-invain#> vi /etc/sysconfig/iptables [enter]
      # Firewall configuration written by lokkit
      # Manual customization of this file is not recommended.
      # Note: ifup-post will punch the current nameservers through the
      # firewall; such entries will *not* be listed here.
      # @Author: created by 인베인(Lim,GeunSik) for self security by Generator on 2009-03-14 16:21

      *filter
      :INPUT DROP [0:0]
      :FORWARD ACCEPT [0:0]
      :OUTPUT ACCEPT [0:0]
      :icmp_packets - [0:0]
      -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
      -A INPUT -s 127.0.0.1 -j ACCEPT
      -A INPUT -s 192.168.155.0/24 -j ACCEPT
      -A INPUT -p icmp -j ACCEPT
      -A INPUT -p tcp --destination-port 3306  -j ACCEPT

      #########  Accpeted IP Number(* 접속하고자 하는 IP를 여기에 추가하세요)  #######
      -A INPUT -s 75.2.179 -j ACCEPT
      # No.2 (192.168.155.*) - Hostname(홍길순) for LinuxIP
      -A INPUT -s 192.168.155 -j ACCEPT
      #########[ Public ICMP Policy ]####################################
      -A INPUT -p icmp -j icmp_packets
      -A INPUT -j LOG --log-prefix "iptables-IN Default Drop: " --log-level 7
      COMMIT
      # Completed
      #########[ Generated by webmin]#############################################
      *mangle
      :FORWARD ACCEPT [0:0]
      :INPUT ACCEPT [0:0]
      :OUTPUT ACCEPT [0:0]
      :PREROUTING ACCEPT [0:0]
      :POSTROUTING ACCEPT [0:0]
      COMMIT
      # Completed
      *nat
      :OUTPUT ACCEPT [0:0]
      :PREROUTING ACCEPT [0:0]
      :POSTROUTING ACCEPT [0:0]
      COMMIT
      # Completed

      fedora-invain#> /etc/init.d/iptables restart
      fedora-invain#>  iptables -L

      * 오픈소스는 Open Innovationa & 윈윈전략을 도모할 지언정 절대 공짜(무료)임을 뜻하지 않는다.치

0 답변 글타래를 보이고 있습니다
  • 답변은 로그인 후 가능합니다.