設定書き出し

  • showSettings.zip
    #!/bin/bash
     
    FILE=settings.`date +"%Y-%m-%d"`.txt
     
    rm -rf ${FILE}
    echo "* filter" >> ${FILE}
    iptables -L --line-numbers -t filter >> ${FILE}
    echo >> ${FILE}
    echo "* nat" >> ${FILE}
    iptables -L --line-numbers -t nat >> ${FILE}

ポート転送

  • ポート転送を有効にする。
    /etc/sysctl.conf

    net.ipv4.ip_forward = 1
  • ポート転送ルール追加スクリプト addForwarding.zip

    #!/bin/bash
    
    scriptname="${0##*/}"
    
    if [ $# -lt 3 ]; then
      cat << EOL
    説明: iptables にポート転送設定を追加する。
    使用法: ${scriptname} <ForwardingPort> <TargetAddress> <TargetPort>
    EOL
      exit 1
    fi
    
    host=`ifconfig | grep "inet addr" | head -n 1`
    if [[ "${host}" =~ addr:([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+) ]]; then
      host=${BASH_REMATCH[1]}
    else
      echo "ホストのIPアドレスが取得できませんでした。"
      exit 1
    fi
    
    fport="$1"
    taddr="$2"
    tport="$3"
    
    # 転送ルール追加
    iptables -t nat -A PREROUTING -m tcp -p tcp --dst ${host} --dport ${fport} -j DNAT --to-destination ${taddr}:${tport}
    iptables -t nat -A POSTROUTING -m tcp -p tcp --dst ${taddr} --dport ${tport} -j SNAT --to-source ${host}
    iptables -A FORWARD -m tcp -p tcp --dst ${taddr} --dport ${tport} -j ACCEPT
    
    # 戻りパケットを許可(1回追加してあれば、更に追加する必要なし)
    #iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
    
    # MTU が異なるサブネット間で転送する場合用
    #iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
    
    # FORWARD/REJECT をルールの最後に移動
    reject=`iptables -L FORWARD --line-numbers -t filter | grep "REJECT" | head -n 1`
    if [[ "${reject}" =~ ^([0-9]+).*reject-with(.*) ]]; then
      line=${BASH_REMATCH[1]}
      option=${BASH_REMATCH[2]}
      iptables -A FORWARD -j REJECT --reject-with ${option}
      iptables -D FORWARD ${line}
    else
      echo "FORWARD の REJECT を移動できませんでした。"
      exit 1
    fi

リンク

ポート開放

  • INPU チェインの指定位置に接続許可ルールを挿入する。
    # iptables -I INPUT <ルール番号> -m state --state NEW -p tcp --dport <ポート番号> -j ACCEPT

リンク