某社のネットワークは、DMZを考慮したGWファイアーウォール構造になっている。以下の図でBBルータの役目はPPPOEとDMZゾーンを作るために配置している。図では見えてないが、DMZゾーンには同社Webサーバが設置されている。斜線のファイアーウォールは、WAN/LANのゲートウェイになっていて、カーネルiptablesによるフォワードチェーンフィルタが施されている(iptablesの詳細は、 ここ を参照のこと)。以降、このiptablesの設定について説明する。
■ 以下某社DMZを配置したネットワーク構成図。
1.ファイアーウォール
図1の斜線のファイアーウォールは、
Debian GNU Linux3.1
Sarge Kernel2.6.8NIC二枚差し
でiptablesを使って構成している。ここでのフィルタリングは、BBルータでWAN側からのアクセスは全てブロックされているので、基本的にLAN→WANのアクセスを規制している。串を刺しているため、LAN側からのHTTPアクセスはProxy経由でアクセスすることとしている。そのため、iptablesのチェーンはFORWARDチェーンのみを規定して、後はIPマスカレードを有効にしている。2項にiptablesの設定内容を記載する。
2.iptablesの設定内容
1) iptablesのシェルの内容
iptablesの設定内容は、 set_fw.sh と言う名前でシェル化している。これを、 /usr/local/sbin ディレクトリに置いて起動時に自動実行している。
# more set_fw.sh
#!/bin/sh
# WANとLANのI/Fを定義
WAN=eth1
LAN=eth0
# 各種カーネルモジュールをロードする
modprobe ip_tables
modprobe iptable_nat
modprobe ip_nat_ftp
modprobe ip_nat_irc
modprobe ip_conntrack_ftp
modprobe ip_conntrack_irc
modprobe ipt_state
modprobe ipt_MASQUERADE
# Enable ip forward IPフォワーディングを許可する
echo 1 > /proc/sys/net/ipv4/ip_forward
#flash all disable フィルタ定義とマスカレード定義を初期化する
iptables -F
iptables -t nat -F
iptables -X
iptables -Z
# デフォルトは、フォワードチェーン禁止、インプット・アウトプットチェーンは許可する
iptables -P INPUT ACCEPT
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# IPマスカレードを設定する
iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE
# 応答パケットを許可して、接続状態を確認する
iptables -A FORWARD -m state –state ESTABLISHED,RELATED -j ACCEPT
# ICMP pingパケットの内→外への通過を許可する
iptables -A FORWARD -i $LAN -p icmp -j ACCEPT
# 20~23、25、110、587、995、2401、6660~6667番のTCPパケットの内→外への通過を許可する
iptable -A FORWARD -s 192.168.0.0/16 -p tcp –dport 20 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/16 -p tcp –dport 21 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/16 -p tcp –dport 22 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/16 -p tcp –dport 23 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/16 -p tcp –dport 25 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/16 -p tcp –dport 53 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/16 -p tcp –dport 110 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/16 -p tcp –dport 587 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/16 -p tcp –dport 995 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/16 -p tcp –dport 2401 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/16 -p udp –dport 53 -j ACCEPT
# 固定IPを持つサーバはいかなるパケットも内→外への通過を許可する(192.168.0.1~192.168.0.15迄)
iptables -A FORWARD -s 192.168.0.0/28 -p all -j ACCEPT
iptables -A FORWARD -d 192.168.0.0/28 -p all -j ACCEPT
# print list フィルタ&NATポリシーを確認する
iptables -t nat -L -n
iptables -t filter -L -n
# 必要なルーティングの設定。
route add -net 192.168.1.0 netmask 255.255.255.0 gateway 192.168.0.28 $LAN
route add -net 192.168.3.0 netmask 255.255.255.0 gateway 192.168.0.25 $LAN
route add -net 192.168.5.0 netmask 255.255.255.0 gateway 192.168.0.26 $LAN
route add -net 192.168.7.0 netmask 255.255.255.0 gateway 192.168.0.27 $LAN
route add -net 192.168.10.0 netmask 255.255.255.0 gateway 192.168.0.34 $LAN
# MTU値設定
ifconfig eth1 mtu 1454
2)iptablesのチェーンを表示させてみる
gw3:~# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT 0 — anywhere anywhere
ACCEPT 0 — localnet/24 anywhere
ACCEPT 0 — anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp — anywhere anywhere
ACCEPT tcp — anywhere anywhere tcp dpt:ftp-data
ACCEPT tcp — anywhere anywhere tcp dpt:ftp
ACCEPT tcp — anywhere anywhere tcp dpt:ssh
ACCEPT tcp — anywhere anywhere tcp dpt:telnet
ACCEPT tcp — anywhere anywhere tcp dpt:smtp
ACCEPT tcp — anywhere anywhere tcp dpt:domain
ACCEPT tcp — anywhere anywhere tcp dpt:pop3
ACCEPT tcp — anywhere anywhere tcp dpt:submission
ACCEPT tcp — anywhere anywhere tcp dpt:pop3s
ACCEPT tcp — anywhere anywhere tcp dpt:cvspserver
ACCEPT udp — anywhere anywhere udp dpt:domain
Chain FORWARD (policy DROP)
target prot opt source destination
ACCEPT 0 — anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp — anywhere anywhere
ACCEPT tcp — localnet/16 anywhere tcp dpt:ftp
ACCEPT tcp — localnet/16 anywhere tcp dpt:ssh
ACCEPT tcp — localnet/16 anywhere tcp dpt:telnet
ACCEPT tcp — localnet/16 anywhere tcp dpt:smtp
ACCEPT tcp — localnet/16 anywhere tcp dpt:domain
ACCEPT tcp — localnet/16 anywhere tcp dpt:pop3
ACCEPT tcp — localnet/16 anywhere tcp dpt:submission
ACCEPT tcp — localnet/16 anywhere tcp dpt:pop3s
ACCEPT tcp — localnet/16 anywhere tcp dpt:cvspserver
ACCEPT udp — localnet/16 anywhere udp dpt:domain
ACCEPT 0 — localnet/28 anywhere
ACCEPT 0 — anywhere localnet/28
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
3.自動起動をさせるには(Debianの場合)
/etc/init.d/networkingファイルに追加する。以下参照(赤字の一行を追加する)。
gw3:/etc/init.d# vi networking
#!/bin/sh -e
### BEGIN INIT INFO
# Provides: networking
# Required-Start: mountkernfs ifupdown $local_fs
# Required-Stop: ifupdown $local_fs
# Default-Start: S
# Default-Stop: 0 6
# Short-Description: Raise network interfaces.
### END INIT INFO
PATH=”/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin”
[ -x /sbin/ifup ] || exit 0
. /lib/lsb/init-functions
spoofprotect_rp_filter() {
[ -e /proc/sys/net/ipv4/conf/all/rp_filter ] || return 1
RC=0
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 1 > $f || RC=1
done
return $RC
}
spoofprotect() {
log_action_begin_msg “Setting up IP spoofing protection”
if spoofprotect_rp_filter; then
log_action_end_msg 0 “rp_filter”
else
log_action_end_msg 1
fi
}
ip_forward() {
log_action_begin_msg “Enabling packet forwarding”
if echo 1 > /proc/sys/net/ipv4/ip_forward; then
log_action_end_msg 0
else
log_action_end_msg 1
fi
}
syncookies() {
log_action_begin_msg “Enabling TCP SYN cookies”
if echo 1 > /proc/sys/net/ipv4/tcp_syncookies; then
log_action_end_msg 0
else
log_action_end_msg 1
fi
}
doopt() {
optname=$1
default=$2
opt=`grep “^$optname=” /etc/network/options || true`
if [ -z “$opt” ]; then
opt=”$optname=$default”
fi
optval=${opt#$optname=}
if [ “$optval” = “yes” ]; then
eval $optname
fi
}
process_options() {
[ -e /etc/network/options ] || return 0
log_warning_msg “/etc/network/options is deprecated (see README.Debian of ne
tbase).”
doopt spoofprotect yes
doopt syncookies no
doopt ip_forward no
}
case “$1” in
start)
process_options
log_action_begin_msg “Configuring network interfaces”
if ifup -a; then
log_action_end_msg $?
else
log_action_end_msg $?
fi
/usr/local/sbin/set_fw.sh
;;
stop)
if sed -n ‘s/^[^ ]* \([^ ]*\) \([^ ]*\) .*$/\2/p’ /proc/mounts |
grep -qE ‘^(nfs[1234]?|smbfs|ncp|ncpfs|coda|cifs)$’; then
log_warning_msg “not deconfiguring network interfaces: network share
s still mounted.”
exit 0
fi
log_action_begin_msg “Deconfiguring network interfaces”
if ifdown -a –exclude=lo; then
log_action_end_msg $?
else
log_action_end_msg $?
fi
;;
force-reload|restart)
process_options
log_action_begin_msg “Reconfiguring network interfaces”
ifdown -a –exclude=lo || true
if ifup -a –exclude=lo; then
log_action_end_msg $?
else
log_action_end_msg $?
fi
;;
*)
echo “Usage: /etc/init.d/networking {start|stop|restart|force-reload}”
exit 1
;;
esac
exit 0
4.グローバル側からのポートスキャン結果
グローバル側から、このホストへ向けてポートスキャンを行った結果は以下の通り。
[root@sub2 ~]# nmap gw3.xxxxxxxx.co.jp
Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2007-06-19 09:07 JST
Interesting ports on 210.xxx.xxx.xxx:
Not shown: 1670 filtered ports
PORT STATE SERVICE
20/tcp closed ftp-data
21/tcp closed ftp
22/tcp closed ssh
23/tcp closed telnet
25/tcp closed smtp
53/tcp closed domain
110/tcp closed pop3
587/tcp closed submission
995/tcp closed pop3s
2401/tcp closed cvspserver
Nmap finished: 1 IP address (1 host up) scanned in 70.810 seconds
以上
コメント