外界直結の Windows Server 2003 ネットワーク制限設定

ルータをはさんで DMZ に WindowsServer を置くのが基本的な戦略ではあるのだが、今回レンタルサーバを利用するにあたって外界直結の Windows Server を利用することになった。ただしバックエンド側のネットワークインターフェースも存在していてサーバ間の通信はそちらを利用できる状況。

以下の説明においては「ローカル エリア接続」が外界側のネットワークインターフェース。

まずは、NetBIOS over TCP/IP 関係のバインドとインターフェースに対するWINS設定を切っておく。

インターネット常時接続時の基本セキュリティ設定を参考に netsh を利用して Routing and RemoteAccess サービス向けのフィルタールールを追加する。

次のファイルを保存し netsh -f [ファイル名] で設定できる。設定ファイルの中身のうち、DNSサーバからの返答を受ける部分のみ環境依存なので、自分が利用しているDNSサーバのIPアドレス(またはアドレス帯域)を指定する。以下のファイルでは 164.46.1.0/255.255.255.248 で指定している部分。UDPに対するkeep alive 通過ルールが書けないのでここのところはしょうがない。

# netsh -f [このファイル] で流し込む
# pingの送受信 ICMP echoreq(8), echorep(0), unreach(3), squench(4), timex(11)
routing ip add filter name="ローカル エリア接続" filtertype=input srcaddr=0.0.0.0 srcmask=0.0.0.0 dstaddr=0.0.0.0 dstmask=0.0.0.0 proto=icmp type=8 code=0
routing ip add filter name="ローカル エリア接続" filtertype=input srcaddr=0.0.0.0 srcmask=0.0.0.0 dstaddr=0.0.0.0 dstmask=0.0.0.0 proto=icmp type=0 code=0
routing ip add filter name="ローカル エリア接続" filtertype=input srcaddr=0.0.0.0 srcmask=0.0.0.0 dstaddr=0.0.0.0 dstmask=0.0.0.0 proto=icmp type=3 code=0
routing ip add filter name="ローカル エリア接続" filtertype=input srcaddr=0.0.0.0 srcmask=0.0.0.0 dstaddr=0.0.0.0 dstmask=0.0.0.0 proto=icmp type=4 code=0
routing ip add filter name="ローカル エリア接続" filtertype=input srcaddr=0.0.0.0 srcmask=0.0.0.0 dstaddr=0.0.0.0 dstmask=0.0.0.0 proto=icmp type=11 code=0

# セッション確立済みのTCP通信の許可
routing ip add filter name="ローカル エリア接続" filtertype=input srcaddr=0.0.0.0 srcmask=0.0.0.0 dstaddr=0.0.0.0 dstmask=0.0.0.0 proto=tcp-est srcport=0 dstport=0

# DNS関連
# DNSサーバとして 164.46.1.6, 164.46.1.7 を利用している。164.46.1.0/29 をサーバ領域として指定
routing ip add filter name="ローカル エリア接続" filtertype=input srcaddr=164.46.1.0 srcmask=255.255.255.248 dstaddr=0.0.0.0 dstmask=0.0.0.0 proto=udp srcport=53 dstport=0
routing ip add filter name="ローカル エリア接続" filtertype=input srcaddr=0.0.0.0 srcmask=0.0.0.0 dstaddr=0.0.0.0 dstmask=0.0.0.0 proto=udp srcport=0 dstport=53
routing ip add filter name="ローカル エリア接続" filtertype=input srcaddr=0.0.0.0 srcmask=0.0.0.0 dstaddr=0.0.0.0 dstmask=0.0.0.0 proto=tcp srcport=0 dstport=53

# RDP,ssh,smtp,http,https
routing ip add filter name="ローカル エリア接続" filtertype=input srcaddr=0.0.0.0 srcmask=0.0.0.0 dstaddr=0.0.0.0 dstmask=0.0.0.0 proto=tcp srcport=0 dstport=3389
routing ip add filter name="ローカル エリア接続" filtertype=input srcaddr=0.0.0.0 srcmask=0.0.0.0 dstaddr=0.0.0.0 dstmask=0.0.0.0 proto=tcp srcport=0 dstport=22
routing ip add filter name="ローカル エリア接続" filtertype=input srcaddr=0.0.0.0 srcmask=0.0.0.0 dstaddr=0.0.0.0 dstmask=0.0.0.0 proto=tcp srcport=0 dstport=25
routing ip add filter name="ローカル エリア接続" filtertype=input srcaddr=0.0.0.0 srcmask=0.0.0.0 dstaddr=0.0.0.0 dstmask=0.0.0.0 proto=tcp srcport=0 dstport=80
routing ip add filter name="ローカル エリア接続" filtertype=input srcaddr=0.0.0.0 srcmask=0.0.0.0 dstaddr=0.0.0.0 dstmask=0.0.0.0 proto=tcp srcport=0 dstport=443

# 既定では接続オフ
routing ip set filter "ローカル エリア接続" input drop

#外向きフィルタの設定(デフォルトはすべて通過)
routing ip set filter "ローカル エリア接続" filtertype=output forward
#プライベートIPアドレスを持つパケットをブロック
routing ip add filter "ローカル エリア接続" filtertype=output srcaddr=0.0.0.0 srcmask=0.0.0.0 dstaddr=192.168.0.0 dstmask=255.255.0.0 proto=any
routing ip add filter "ローカル エリア接続" filtertype=output srcaddr=0.0.0.0 srcmask=0.0.0.0 dstaddr=172.16.0.0 dstmask=255.240.0.0 proto=any
routing ip add filter "ローカル エリア接続" filtertype=output srcaddr=0.0.0.0 srcmask=0.0.0.0 dstaddr=10.0.0.0 dstmask=255.0.0.0 proto=any
routing ip add filter "ローカル エリア接続" filtertype=output srcaddr=192.168.0.0 srcmask=255.255.0.0 dstaddr=0.0.0.0 dstmask=0.0.0.0 proto=any
routing ip add filter "ローカル エリア接続" filtertype=output srcaddr=172.16.0.0 srcmask=255.240.0.0 dstaddr=0.0.0.0 dstmask=0.0.0.0 proto=any
routing ip add filter "ローカル エリア接続" filtertype=output srcaddr=10.0.0.0 srcmask=255.0.0.0 dstaddr=0.0.0.0 dstmask=0.0.0.0 proto=any
# NetBIOS関連のポートでの出力を制限
routing ip add filter "ローカル エリア接続" filtertype=output srcaddr=0.0.0.0 srcmask=0.0.0.0 dstaddr=0.0.0.0 dstmask=0.0.0.0 proto=tcp srcport=0 dstport=135
routing ip add filter "ローカル エリア接続" filtertype=output srcaddr=0.0.0.0 srcmask=0.0.0.0 dstaddr=0.0.0.0 dstmask=0.0.0.0 proto=udp srcport=0 dstport=137
routing ip add filter "ローカル エリア接続" filtertype=output srcaddr=0.0.0.0 srcmask=0.0.0.0 dstaddr=0.0.0.0 dstmask=0.0.0.0 proto=udp srcport=0 dstport=138
routing ip add filter "ローカル エリア接続" filtertype=output srcaddr=0.0.0.0 srcmask=0.0.0.0 dstaddr=0.0.0.0 dstmask=0.0.0.0 proto=tcp srcport=0 dstport=139
routing ip add filter "ローカル エリア接続" filtertype=output srcaddr=0.0.0.0 srcmask=0.0.0.0 dstaddr=0.0.0.0 dstmask=0.0.0.0 proto=tcp srcport=0 dstport=445

最後に、Routing and RemoteAccess サービスを自動起動にし、サービスを起動すれば設定完了。以下のようにコマンドラインから行った。

  1. sc query RemoteAccess
  2. sc config RemoteAccess start= auto (start= の後ろにスペースが必要なので注意!)
  3. sc start RemoteAccess
  4. sc query RemoteAccess

 

ところで、設定ファイルのうち、ICMPプロトコルで通しているのは 0,3,4,8,11 の5種類。これは以前からファイアウォールで行っており、ICMP対策 を参考にしたものである。

Vista/Windows Server 2008 以降はこのパケットフィルタリング設定は Windows Firewall に統合されたようであるため設定方法は異なる。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。