2006年4月 4日

[linux-users:106429] iptable-web通信に関して(2)

 お世話になっております。川村様、Kusune様、ご返信ありがとう
ございました。

 たびたびおさわがせします。

> >> $IPTABLES -A INPUT -p tcp -m tcp --sport 80 -j ACCEPT
> >> $IPTABLES -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT
> >> $IPTABLES -A INPUT -p tcp -m tcp --sport 443 -j ACCEPT

> >> $IPTABLES -A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT
>
> > 「-m tcp」を除けばいけると思います。
>
> むしろ DNS query を通してるのかが気になりますけど。
>
> UDP/TCP の 53 番へのアクセスはどこかで許可してますか?

 先に引用しました四行を以下に書き換えまして、サーバから
インターネット上のwebページを閲覧でき、書き込みも可能で
あることを確認しました。ありがとうございました。ただ、
####
...
####
で挟みました部分を入れることで、LAN内からのマシンにも
インターネットが使用できると考えたものの、それには
成功しておりません。

# DNS問い合わせを許可
$IPTABLES -A INPUT -p udp --sport 53 -j ACCEPT
$IPTABLES -A OUTPUT -p udp --dport 53 -j ACCEPT

# web接続
## このサーバからのWAN側へのweb接続を許可
$IPTABLES -A INPUT -p tcp --sport 80 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 80 -j ACCEPT
$IPTABLES -A INPUT -p tcp --sport 443 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 443 -j ACCEPT
####
# LANからのパケットをWAN側インターフェースでアドレス変換
$IPTABLES -t nat -A POSTROUTING -t nat -o $WAN_IF -j MASQUERADE

# 応答パケットを許可
$IPTABLES -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
####

*( # 応答パケットを許可 以下は不要であろうと思います。)

 IPマスカレードの設定に問題があることをまず疑って
$IPTABLES -t nat -A POSTROUTING -t nat -o $WAN_IF -j MASQUERADE
とあるところを
$IPTABLES -A FORWARD -p tcp --dport 80 -j ACCEPT
などと、いろいろ書き改めて試しておりましたが、ふと先の作業で
DNSを見落としていたことを教わったことを思い出し、原因はまた
そのあたりにあるのでないかと考えました。/etc/resolv.conf
を見ましたところ、LAN内のマシンがサーバからdhcpでアドレスを
取得するさいに、これが書き換えられてしまうらしく、
/etc/resolv.conf
-----------------------------------------------
nameserver 192.168.120.254
-----------------------------------------------
という内容になっております。192.168.120.254は使用している
LAN内のマシンが接続する、サーバのイーサーデバイスのアドレス
です。

 問題が名前解決にあるとしましたら、iptablesを懸命にあたる
よりも、DNSサーバの設定などを勉強するのが先に思えます。
 自分なりに順序立てて試行錯誤していくつもりであります
けれど、やみくもに的はずれなことをする前にひと呼吸おいて、
慣れたかたから当方の理解不足がどこにありそうか、アドバイスを
お願いする次第です。
 念のためiptables設定のスクリプト全体を本文最後に載せて
おきます。

/usr/local/sbin/rc.ip-masq-test
-----------------------------------------------
#!/bin/sh

IPTABLES="/sbin/iptables"

# (WAN:eth1, LAN:eth0,2,3)
WAN_IF="eth1"
LAN_IF1="eth3"
LAN_IF2="eth2"
LAN_IF3="eth0"
LIST="$LAN_IF1 $LAN_IF2 $LAN_IF3"

# IPフォワードの有効化
echo 1 > /proc/sys/net/ipv4/ip_forward

###################################################
#
# NATとフィルターの設定を初期化
#
###################################################

# すべてのルールを削除
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -X

# パケットカウンタをクリア
$IPTABLES -Z

###################################################
#
# 各チェインのデフォルトポリシーを設定
# 使用チェインの作成
#
##################################################

# 初期化/原則破棄
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT DROP

# 正しいTCPコネクションを許可するための基本チェイン(ACCEPT_CONN)を作成
$IPTABLES -N ACCEPT_CONN
$IPTABLES -A ACCEPT_CONN -p TCP --syn -j ACCEPT
$IPTABLES -A ACCEPT_CONN -p TCP --syn -m state --state ESTABLISHED,RELATED -j
ACCEPT
$IPTABLES -A ACCEPT_CONN -p TCP -j DROP

# 単純なpingを受け付けるチェイン(ICMP_PACKET)の作成
$IPTABLES -N ICMP_PACKET
# Destination Unreachable
$IPTABLES -A ICMP_PACKET -p icmp -s 0/0 --icmp-type 3 -j ACCEPT
# Echo Request
$IPTABLES -A ICMP_PACKET -p icmp -s 0/0 --icmp-type 8 -j ACCEPT
# Time Exceeded
$IPTABLES -A ICMP_PACKET -p icmp -s 0/0 --icmp-type 11 -j ACCEPT

# ファイアウォール内の各NICがpingに反応するための設定
## ICMPの出力に対して
### Echo Reply
$IPTABLES -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT
### Host Unreachable
$IPTABLES -A OUTPUT -p icmp --icmp-type 3 -j ACCEPT
### Source Quench
$IPTABLES -A OUTPUT -p icmp --icmp-type 4 -j ACCEPT
### Redirect
$IPTABLES -A OUTPUT -p icmp --icmp-type 5 -j ACCEPT
### Echo Request
$IPTABLES -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT
### TTL Exceeded
$IPTABLES -A OUTPUT -p icmp --icmp-type 11 -j ACCEPT
### Parameter Problem
$IPTABLES -A OUTPUT -p icmp --icmp-type 12 -j ACCEPT
## ICMPの入力に対して
### Echo Reply
$IPTABLES -A INPUT -p icmp --icmp-type 0 -j ACCEPT
### Host Unreachable
$IPTABLES -A INPUT -p icmp --icmp-type 3 -j ACCEPT
### Source Quench
$IPTABLES -A INPUT -p icmp --icmp-type 4 -j ACCEPT
### Redirect
$IPTABLES -A INPUT -p icmp --icmp-type 5 -j ACCEPT
### Echo Request
$IPTABLES -A INPUT -p icmp --icmp-type 8 -j ACCEPT
### TTL Exceeded
$IPTABLES -A INPUT -p icmp --icmp-type 11 -j ACCEPT
### Parameter Problem
$IPTABLES -A INPUT -p icmp --icmp-type 12 -j ACCEPT

# DNS問い合わせを許可
$IPTABLES -A INPUT -p udp --sport 53 -j ACCEPT
$IPTABLES -A OUTPUT -p udp --dport 53 -j ACCEPT

# web接続
## このサーバからのWAN側へのweb接続を許可
$IPTABLES -A INPUT -p tcp --sport 80 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 80 -j ACCEPT
$IPTABLES -A INPUT -p tcp --sport 443 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 443 -j ACCEPT
####
# LANからのパケットをWAN側インターフェースでアドレス変換
$IPTABLES -t nat -A POSTROUTING -t nat -o $WAN_IF -j MASQUERADE

# 応答パケットを許可
$IPTABLES -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
####

# このサーバへのNFSマウントを受け付けるチェイン(ACCEPT_NFS)の作成
$IPTABLES -N ACCEPT_NFS
## いったんフラグメントをすべて通さないと、NFSが正しく動作しない
$IPTABLES -A ACCEPT_NFS -f -j ACCEPT
## statd....ポート32765,32766にバインド
## mountd....ポート32767にバインド
## lockd....ポート32768にバインド
## nfs...ポート2049, portmapper...ポート111 はそれぞれ固定
$IPTABLES -A ACCEPT_NFS -p udp -m multiport --dport 32765:32768,2049,111 -j AC
CEPT
$IPTABLES -A ACCEPT_NFS -p tcp --dport 111 -j ACCEPT
$IPTABLES -A ACCEPT_NFS -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

###################################################
#
# インターフェースごとにアクセス許可の設定
#
##################################################

# LANからのパケットをWAN側インターフェースでアドレス変換
$IPTABLES -t nat -A POSTROUTING -t nat -o $WAN_IF -j MASQUERADE

# 応答パケットを許可
$IPTABLES -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT

# LANへの転送を許可する
for INTERFACE in $LIST ; do
$IPTABLES -A FORWARD -i $INTERFACE -j ACCEPT
done
$IPTABLES -A FORWARD -m state --state ESTABLISHED -j ACCEPT

# LAN側から入ってきたプロトコルアクセスを許可
for INTERFACE in $LIST ; do
$IPTABLES -A INPUT -p ALL -i $INTERFACE -j ACCEPT
done

# ループバックを許可する
$IPTABLES -A INPUT -p ALL -i lo -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -o lo -j ACCEPT

# 作成済みのICMP_PACKETチェインをWAN側に適用する
#$IPTABLES -A INPUT -p icmp -i $WAN_IF -j ICMP_PACKET
$IPTABLES -A INPUT -i $WAN_IF -j ICMP_PACKET

# このサーバへのNFSマウントを許可する
for INTERFACE in $LIST ; do
#echo $INTERFACE
## いったんフラグメントをすべて通さないと、NFSが正しく動作しない
$IPTABLES -A INPUT -f -i $INTERFACE -j ACCEPT
## statd....ポート32765,32766にバインド
## mountd....ポート32767にバインド
## lockd....ポート32768にバインド
## nfs...ポート2049, portmapper...ポート111は固定
$IPTABLES -A INPUT -i $INTERFACE -p tcp -m multiport --dport 32765:32768,204
9,111 -j ACCEPT
$IPTABLES -A INPUT -i $INTERFACE -p tcp --dport 111 -j ACCEPT
$IPTABLES -A OUTPUT -o $INTERFACE -m state --state ESTABLISHED -j ACCEPT
done

# web接続
## このサーバからのWAN側へのweb接続を許可
#$IPTABLES -A INPUT -i $WAN_IF -p tcp --dport 80 -j ACCEPT
#$IPTABLES -A OUTPUT -o $WAN_IF -p tcp --dport 80 -j ACCEPT
#$IPTABLES -A INPUT -i $WAN_IF -p tcp --dport 443 -j ACCEPT
#$IPTABLES -A OUTPUT -o $WAN_IF -p tcp --dport 443 -j ACCEPT
#$IPTABLES -A INPUT -i $WAN_IF -m state --state ESTABLISHED -j ACCEPT
#$IPTABLES -A INPUT -p udp --sport 53 -j ACCEPT
#$IPTABLES -A OUTPUT -p udp --dport 53 -j ACCEPT
#$IPTABLES -A INPUT -p tcp --sport 80 -j ACCEPT
#$IPTABLES -A OUTPUT -p tcp --dport 80 -j ACCEPT
#$IPTABLES -A INPUT -p tcp --sport 443 -j ACCEPT
#$IPTABLES -A OUTPUT -p tcp --dport 443 -j ACCEPT

## LAN内のマシンからインターネットへの接続を許可
#for INTERFACE in $LIST ; do
#echo $INTERFACE
# $IPTABLES -A INPUT -i $INTERFACE -j ACCEPT
## statd....ポート32765,32766にバインド
## mountd....ポート32767にバインド
## lockd....ポート32768にバインド
## nfs...ポート2049, portmapper...ポート111は固定
# $IPTABLES -A INPUT -i $INTERFACE -p tcp -m multiport --dport 32765:32768,20
49,111 -j ACCEPT
# $IPTABLES -A INPUT -i $INTERFACE -p tcp --dport 111 -j ACCEPT
# $IPTABLES -A OUTPUT -o $INTERFACE -m state --state ESTABLISHED -j ACCEPT
#done
-----------------------------------------------

--
田中 元 byh01337@xxxxx

投稿者 xml-rpc : 2006年4月 4日 02:02
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/34376
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。