トップ 一覧 置換 検索 ヘルプ RSS ログイン

iptables で不正アクセスを制御するの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!接続する回数を制限する
http://www.atmarkit.co.jp/ait/articles/1007/14/news102.html

!!!ipt_recent を使う
http://www2s.biglobe.ne.jp/~nuts/labo/inti/ipt_recent.html
各IPアドレスからのアクセスを抑えて、大量のIPアドレスからアクセスされ場合、
この方法ではうまく弾けない。

!!ipt_recent
*指定した条件にマッチしたパケットの source IP アドレスを、リストに記録する
*「パケットの source IP アドレスがリスト中に存在したら」という条件を使えるようにする

!!サンプルスクリプト
  #!/bin/bash
  IPTABLES=/sbin/iptables
  
  $IPTABLES -F
  $IPTABLES -X
  $IPTABLES -P INPUT ACCEPT
  $IPTABLES -P OUTPUT ACCEPT
  $IPTABLES -P FORWARD ACCEPT
  
  $IPTABLES -N Attacker
  $IPTABLES -A Attacker -m recent --set --name attacker -j LOG --log-level warn --log-prefix 'Attaker:'
  $IPTABLES -A Attacker -j DROP
  
  $IPTABLES -A INPUT -p tcp -m state --state NEW -m recent --rcheck --seconds 600 --name attacker -j DROP
  
  $IPTABLES -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name PreAttacker
  $IPTABLES -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 5 --rttl --name PreAttacker -j Attacker
  
  $IPTABLES -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --set --name PreAttacker
  $IPTABLES -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 10 --hitcount 10 --rttl --name PreAttacker -j Attacker

!!解説
+ポート22と80にアクセスが合った場合に「PreAttacker」リストにIPを追加する
+ポート22と80にアクセスが合った場合に「PreAttacker」リストからある条件にマッチするアクセスを行なっているIPアドレスを探す
+もし、条件にマッチするIPアドレスがある場合は、そのIPアドレスを「attacker」リストに追加する
+「attacker」リストにあるIPアドレスからのアクセスは600秒間ドロップする


!!!IPアドレスで制御する
!!特定の国からのアクセスを制御する
!サンプル
  ZONE_FILE_URL="http://www.ipdeny.com/ipblocks/data/countries"
  #for IP in $(wget -O - ${ZONE_FILE_URL}/{cn,tw,kr,ru}.zone | grep -v "^#|^$" )
  for IP in $(wget -O - ${ZONE_FILE_URL}/cn.zone | grep -v "^#|^$" )
  do
    iptables -A INPUT -s $IP -j DROP
  done
  
!!特定の国からのアクセスのみを受け付ける
!サンプル(日本のみ許可)
  #!/bin/sh
   
  IPLIST=cidr.txt
   
  # 初期化をする
  iptables -F                     # Flush
  iptables -X                     # Reset
  #iptables -P INPUT DROP         # 受信はすべて破棄
  iptables -P INPUT DROP         # 受信はすべて破棄
  iptables -P OUTPUT ACCEPT       # 送信はすべて許可
  iptables -P FORWARD DROP        # 通過はすべて破棄
   
  # サーバーから接続を開始した場合の応答を許可する。
  iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
  iptables -A INPUT -s 127.0.0.1 -j ACCEPT
   
  if [ -z "$1" ]; then
    date=`date -d '1 day ago' +%Y%m%d`
  else
    date="$1"
  fi
   
  if [ -e $IPLIST ]; then
      mv $IPLIST "${IPLIST}_${date}"
  fi
   
  # 最新のIPリストを取得する
  wget http://nami.jp/ipv4bycc/$IPLIST.gz
  gunzip -d $IPLIST.gz
   
  # ダウンロードしてきたIPリストで日本のIPだけを許可するようにする
  sed -n 's/^JP\t//p' $IPLIST | while read ipaddress; do
      iptables -A INPUT -s $ipaddress -j ACCEPT
  done
  
  # Amazon EC2のAsia Pacific (Tokyo) に割り振られているIPレンジを許可する
  iptables -A INPUT -s 46.51.224.0/19 -j ACCEPT
  iptables -A INPUT -s 54.248.0.0/15 -j ACCEPT
  iptables -A INPUT -s 103.4.8.0/21 -j ACCEPT
  iptables -A INPUT -s 175.41.192.0/18 -j ACCEPT
  iptables -A INPUT -s 176.34.0.0/18 -j ACCEPT
  iptables -A INPUT -s 176.32.64.0/19 -j ACCEPT
  iptables -A INPUT -s 54.250.0.0/16 -j ACCEPT
  
   
  # iptablesによってDROPされたアクセスのログを取る
  #iptables -A INPUT -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES INPUT DROP] : '
  iptables -P INPUT DROP          # 受信はすべて破棄
   
  #設定を保存する場合はコメントを外す
  #/etc/init.d/iptables save


{{category2 OS,Linux}}
{{category2 ネットワーク}}