3.パケットフィルタリング
さて、kernelの再構築も無事終了し、FreeS/WAN・PoPToPのインストールも済んだので、順番から行くと次はそれぞれの設定の方法ということになるのでしょうが、今回はその前に抑えておかなければならない点があります。
それが、パケットフィルタリングの設定です。
ここでもう一度今回構築するVPNのモデルを御覧ください。

この図に示した@〜Gの機器においてVPNを構築するにおいて関連する機能等を以下に示します。
| ホスト |
使用OS |
VPN |
パケットフィルタリング関連 |
その他 |
| @PC1 |
Windows 2000 |
|
|
|
| ALinux Server |
Linux |
FreeS/WAN (IPsec) |
iptables |
PPPoEでISPに接続 |
| BADSL MODEM |
- |
|
全てのパケットを通過させる |
|
| CISDN Router |
- |
|
全てのパケットを通過させる |
ダイヤルアップでISPに接続 |
| DLinux Server |
Linux |
|
iptables |
|
| ELinux Server |
Linux |
FreeS/WAM (IPsec) |
iptables |
SAMBA |
| PoPToP (pptpd) |
| FPC2 |
Windos 98 |
|
|
|
| GMobile PC |
Windows XP |
仮想プライベートネットワーク |
|
|
ネットワークモデルの図の中で3台のLinux Server を使用していますが、いずれのホストにも iptables を利用してパケットフィルタリングを行っています。
なお、ADSL MODEM と ISDN Router に関しては、全てのパケットを無条件に通過させるようにします。
(それぞれフィルタリングやマスカレード、最新の機器においてはVPNの機能までも有しているかと思いますが、それらの機能は一切使わないことにします。)
さて、パケットフィルタリングには、対象となるパケットのプロトコル番号やポート番号が必要です。
今回構築する PPTP と IPsec のプロトコルとポートを以下にまとめてみました。
詳しい内容は別のページで解説します(予定です(^^ゞ)ので、とりあえず各々の番号を覚えておいてください。
各表の後ろにある3つの項目のA・D・Eは、上図のLinux Serverの番号に対応しており、「○」がついているプロトコルやポートをフィルタリングします。
@プロトコル (/etc/protocols)
| VPN |
プロトコル |
番号 |
使用目的 |
A |
D |
E |
| PPTP |
GRE
(Gereric Routing Encapsulating) |
47 |
データ通信で使用。 |
- |
○ |
○ |
| IPsec |
ipv6-crypt
(Encryption Header for IPv6) |
50 |
ESP(Encapsulating Security Payload)で使用。 |
○ |
○ |
○ |
ipv6-auth
(Authentication Header for IPv6) |
51 |
AH(Authentication Header)で使用。(注1) |
- |
- |
- |
(注1)Linux FreeS/WANではAH(Authentication Header)は使いません。
Aポート (/etc/services ・・・但し、PPTPの1723番は未定義)
| VPN |
番号 |
TCP/UDP |
使用目的 |
A |
D |
E |
| PPTP |
1723 |
TCP |
トンネル制御や管理に使用する。 |
- |
○ |
○ |
| IPsec |
500 |
UDP |
ISAKMP(注2)における鍵交換で使用する。 |
○ |
○ |
○ |
(注2) ISAKMP : Internet Security Association and Key Management
Protocol
(「アイサキャンプ」と読みます。)
それでは、具体的な設定内容を順に示します。
まずはAのLinux Serverにおける /etc/sysconfig/iptables の設定内容です。
(実際にはもう少しいろいろ設定していますが、雰囲気がわかる程度に簡素化しています。)
ここでは、EのLinux Serverから送られてくるIPsecのパケットを受信するように設定します。
なお、「ppp0」がWAN側、「eth1」がLAN側です。
・AのLinux Serverにおける /etc/sysconfig/iptables
# Generated by iptables-save v1.2.4 on Thu May 16 20:53:27 2002
*mangle
:PREROUTING ACCEPT [6915949:1610315735]
:OUTPUT ACCEPT [7938146:3569086622]
COMMIT
# Completed on Thu May 16 20:53:27 2002
# Generated by iptables-save v1.2.4 on Thu May 16 20:53:27 2002
*nat
:PREROUTING ACCEPT [811202:92872869]
:POSTROUTING ACCEPT [212725:16675974]
:OUTPUT ACCEPT [581987:43535752]
# squidで透過型プロキシを有効にしています。
[0:0] -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports
3128
#
[0:0] -A POSTROUTING -o ppp0 -d ! 192.168.2.0/255.255.255.0 -j MASQUERADE
COMMIT
# Completed on Thu May 16 20:53:27 2002
# Generated by iptables-save v1.2.4 on Thu May 16 20:53:27 2002
*filter
:INPUT ACCEPT [1155163:405843334]
:FORWARD ACCEPT [260610:74644471]
:OUTPUT ACCEPT [8668741:4074507072]
[0:0] -A INPUT -s 10.0.0.0/255.0.0.0 -i eth0 -j DROP
[0:0] -A INPUT -s 172.16.0.0/255.240.0.0 -i eth0 -j DROP
[0:0] -A INPUT -s 192.168.0.0/255.255.0.0 -i ppp0 -j DROP
# IPsec用
[0:0] -A INPUT -i ppp0 -p 50 -j ACCEPT
[0:0] -A INPUT -i ppp0 -p udp -m udp --dport 500 -j ACCEPT
[0:0] -A INPUT -s 192.168.0.0/255.255.0.0 -i eth1 -j ACCEPT
[0:0] -A INPUT -i ppp0 -m state --state RELATED,ESTABLISHED -j ACCEPT
[0:0] -A INPUT -i ppp0 -p tcp -m tcp --dport 25 -j ACCEPT
[0:0] -A INPUT -i ppp0 -p tcp -m tcp --dport 53 -j ACCEPT
[0:0] -A INPUT -i ppp0 -p udp -m udp --dport 53 -j ACCEPT
[0:0] -A INPUT -i ppp0 -p tcp -m tcp --dport 80 -j ACCEPT
[0:0] -A INPUT -i ppp0 -p tcp -m tcp --dport 110 -j ACCEPT
[0:0] -A INPUT -i ppp0 -p tcp -m tcp --dport 113 -j ACCEPT
[0:0] -A INPUT -i ppp0 -p udp -m udp --dport 123 -j ACCEPT
[0:0] -A INPUT -i ppp0 -j DROP
[0:0] -A OUTPUT -o ppp0 -p tcp -m tcp --sport 137:139 -j DROP
[0:0] -A OUTPUT -o ppp0 -p udp -m udp --sport 137:139 -j DROP
[0:0] -A OUTPUT -o ppp0 -p icmp -m state --state INVALID -j DROP
COMMIT
# Completed on Thu May 16 20:53:27 2002
|
続いて、DのLinux Serverにおける /etc/sysconfig/iptables の設定内容です。
ここでは、IPsecとPPTPのVPNに関するパケットを無条件にEのLinux Seerverに送り込んでいます。
「eth0」がWAN側、「eth1」がLAN側です。
・DのLinux Serverにおける /etc/sysconfig/iptables
# Generated by iptables-save v1.2.4 on Fri May 17 18:37:40 2002
*nat
:PREROUTING ACCEPT [714:38307]
:POSTROUTING ACCEPT [1258:85312]
:OUTPUT ACCEPT [1258:85312]
# PPTPのパケットをEのLinux Serverにおくります。
[0:0] -A PREROUTING -i eth0 -p 47 -j DNAT --to-destination 192.168.1.12
[0:0] -A PREROUTING -i eth0 -p tcp -m tcp --dport 1723 -j DNAT --to-destination
192.168.1.12
# IPsecのパケットをEのLinux Serverに送ります。
[0:0] -A PREROUTING -i eth0 -p 50 -j DNAT --to-destination 192.168.1.12
[0:0] -A PREROUTING -i eth0 -p udp -m udp --dport 500 -j DNAT --to-destination
192.168.1.12
[0:0] -A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
# Completed on Fri May 17 18:37:40 2002
# Generated by iptables-save v1.2.4 on Fri May 17 18:37:40 2002
*mangle
:PREROUTING ACCEPT [14986:2113626]
:OUTPUT ACCEPT [15985:2315611]
COMMIT
# Completed on Fri May 17 18:37:40 2002
# Generated by iptables-save v1.2.4 on Fri May 17 18:37:40 2002
*filter
:INPUT ACCEPT [436:45229]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [15986:2315682]
[0:0] -A INPUT -s 10.0.0.0/255.0.0.0 -i eth0 -j DROP
[0:0] -A INPUT -s 172.16.0.0/255.240.0.0 -i eth0 -j DROP
[0:0] -A INPUT -s 192.168.0.0/255.255.0.0 -i eth0 -j DROP
[0:0] -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
[0:0] -A INPUT -i eth0 -p tcp -m tcp --dport 25 -j ACCEPT
[0:0] -A INPUT -i eth0 -p tcp -m tcp --dport 53 -j ACCEPT
[0:0] -A INPUT -i eth0 -p udp -m udp --dport 53 -j ACCEPT
[0:0] -A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT
[0:0] -A INPUT -i eth0 -p tcp -m tcp --dport 110 -j ACCEPT
[0:0] -A INPUT -i eth0 -p tcp -m tcp --dport 113 -j ACCEPT
[0:0] -A INPUT -i eth0 -p udp -m udp --dport 123 -j ACCEPT
[0:0] -A INPUT -s 192.168.1.12 -i eth1 -j ACCEPT
[0:0] -A INPUT -i eth0 -j DROP
[0:0] -A OUTPUT -o eth0 -p tcp -m tcp --sport 137:139 -j DROP
[0:0] -A OUTPUT -o eth0 -p udp -m udp --sport 137:139 -j DROP
[0:0] -A OUTPUT -o eth0 -p icmp -m state --state INVALID -j DROP
COMMIT
# Completed on Fri May 17 18:37:40 2002
|
最後にEのLinux Serverにおける /etc/sysconfig/iptables の内容です。
・EのLinux Serverにおける /etc/sysconfig/iptables
# Generated by iptables-save v1.2.1a on Fri Nov 2 09:14:24 2001
*mangle
:PREROUTING ACCEPT [28268:5277756]
:OUTPUT ACCEPT [22931:7260660]
COMMIT
# Completed on Fri Nov 2 09:14:24 2001
# Generated by iptables-save v1.2.1a on Fri Nov 2 09:14:24 2001
*nat
:PREROUTING ACCEPT [651:84048]
:POSTROUTING ACCEPT [176:35970]
:OUTPUT ACCEPT [2465:293509]
[0:0] -A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
# Completed on Fri Nov 2 09:14:24 2001
# Generated by iptables-save v1.2.1a on Fri Nov 2 09:14:24 2001
*filter
:INPUT ACCEPT [21739:3089791]
:FORWARD ACCEPT [3918:1986587]
:OUTPUT ACCEPT [22914:7259200]
# PPTPのパケットを受信します。 [0:0] -A INPUT -i eth0 -p 47 -j ACCEPT
[0:0] -A INPUT -i eth0 -p tcp -m tcp --dport 1723 -j ACCEPT
# IPsecのパケットを受信します。 [0:0] -A INPUT -i eth0 -p 50 -j ACCEPT [0:0] -A INPUT -i eth0 -p udp -m udp --dport 500 -j ACCEPT
COMMIT
# Completed on Fri Nov 2 09:14:24 2001
|
以上でパケットフィルタリングの設定は終わりです。
いよいよVPNサーバーの設定です。
まずは、PPTPから解説します。
|