設定書き出し
-
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.confnet.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
リンク
- iptablesで特定のポートを別のホストへ転送する方法 - Kerosoft : Modus Operandi
- CentOS iptablesによるパケットフィルタ
- iptables のテーブル表示 と アクセス許可/natの例 - ihirokyの日記
ポート開放
- INPU チェインの指定位置に接続許可ルールを挿入する。
# iptables -I INPUT <ルール番号> -m state --state NEW -p tcp --dport <ポート番号> -j ACCEPT