基於freebsd,openbsd,linux的ipsec-vpn和pptpd三個實例
基於freebsd,openbsd,linux的ipsec-vpn和pptpd三個實例
經常有人問來問去的,煩的很,本人沒多少時間去一一解答
現在全部貼出來,實在想不明白的再來問我或留言,有點tcp/ip知識的做個vpn是
很簡單的事情
有些是摘抄的
Freebsd下基於ipsec的vpn和撥號伺服器mpd的實現
一 net----net的vpn
192.168.1.0/24—office網關機-------------------home網關機---10.5.21.0/24
office的內ip : 192.168.1.1
office的外ip: 131.107.3.1
home的內ip: 131.107.3.2
home的外ip: 10.5.21.3
1. 編譯內核mykernel
options IPSEC
options IPSEC_ESP
options IPSEC_DEBUG
#/usr/sbin/config mykernel
#cd ../compile/mykernel
#make depend all install
2修改rc.conf
對office機如下
gif_interfaces="gif0"
gifconfig_gif0="131.107.3.1 131.107.3.2"
ifconfig_gif0="gif0 192.168.1.1 10.5.21.3 netmask 255.255.255.0"
gateway_enable="YES"
ipsec_enable="YES"
defaultrouter="131.107.3.9" #為電信網關
對home主機如下
gif_interfaces="gif0"
gifconfig_gif0="131.107.3.2 131.107.3.1"
ifconfig_gif0="gif0 10.5.21.3 192.168.1.1 netmask 255.255.255.0"
defaultrouter="131.107.3.9" #為電信網關
gateway_enable="YES"
2 安裝racoon
#cd /usr/ports/security/raccoon
#make install clean
#cd /usr/local/etc/raccoon
我們採用IKE預共享模式
編輯psk.txt
對office機如下
131.107.3.2 my_shared_secret
對home機如下
131.107.3.1 my_shared_secret
編輯racoon.conf
cp raccoon.conf.dist racoon.conf
對office機做如下修改
將此三行註釋
#path certificate "/usr/local/etc/cert"
#my_identifier user_fqdn "
[email protected]";
#peers_identifier
打開此行的註釋
my_identifier address;
將listen {}中的isakmp這行修改為
isakmp 131.107.3.1 ;
對home機如下
將此三行註釋
#path certificate "/usr/local/etc/cert"
#my_identifier user_fqdn "
[email protected]";
#peers_identifier
打開此行的註釋
my_identifier address;
將listen {}中的isakmp這行修改為
isakmp 131.107.3.2 ;
2 編輯/etc/ipsec.conf
flush;
spdflush;
spdadd 192.168.1.0/24 10.5.21.0/24 any -P out ipsec esp/tunnel/131.107.3.1-131.107.3.2/require;
spdadd 10.5.21.0/24 192.168.1.0/24 any -P in ipsec esp/tunnel/131.107.3.2-131.107.3.1/require;
編寫啟動腳本
home機:
/usr/local/etc/rc.d/ipsec.sh如下
#!/bin/sh
setkey -F -FP
setkey -f /etc/ipsec.conf
/usr/local/etc/rc.d/raccoon.sh
raccoon.sh為racoon自動生成
office機與此相同
添加vpn的路由
對home機
rc.local 加入
route add -net 192.168.1.0/24 192.168.1.1
對office機
rc.local 加入
route add -net 10.5.21.0/24 10.5.21.3
二 做撥號伺服器
重編內核mpd作pptp server 配置第一步
測試 實驗的第一步就是看這個 mpd 究竟能發揮多大的做用
上一次 在 freebsd 5.1 上 裝vpn 遇到很多哭笑不得的問題 花了 四五天的時間也搞成
這次 剛安裝好 freebsd 4.10 後 就安裝mpd 隻花幾個步揍就完成了 初步的目標
首先在內配置文件中加入
# for mpd pptp server
options NETGRAPH #netgraph(4) system
options NETGRAPH_ASYNC
options NETGRAPH_BPF
options NETGRAPH_ECHO
options NETGRAPH_ETHER
options NETGRAPH_HOLE
options NETGRAPH_IFACE
options NETGRAPH_KSOCKET
options NETGRAPH_LMI
# MPPC compression requires proprietary files (not included)
#options NETGRAPH_MPPC_COMPRESSION
options NETGRAPH_MPPC_ENCRYPTION
options NETGRAPH_PPP
options NETGRAPH_PPTPGRE
options NETGRAPH_RFC1490
options NETGRAPH_SOCKET
options NETGRAPH_UI
#end
這幾句 完整復制過去 保存
然後
cd /usr/etc
make kernel KERNCONF=內核名稱
編譯內核
第二步要ports 安裝mpd
ports/net/mpd
下面
make install
到 /usr/local/etc/mpd下面
裡面的配置文件不要管它
vi mpd.conf
把下面的話復制在裡面
default:
load client1
load client2
load client3
load client4
load client5
client1:
new -i ng0 pptp1 pptp1
set ipcp ranges 192.168.1.20/32 192.168.1.100/32
load client_standard
#
client2:
new -i ng1 pptp2 pptp2
set ipcp ranges 192.168.1.20/32 192.168.1.100/32
load client_standard
#
client3:
new -i ng2 pptp3 pptp3
set ipcp ranges 192.168.1.20/32 192.168.1.100/32
load client_standard
#
client4:
new -i ng3 pptp4 pptp4
set ipcp ranges 192.168.1.20/32 192.168.1.100/32
load client_standard
#
client5:
new -i ng4 pptp5 pptp5
set ipcp ranges 192.168.1.20/32 192.168.1.100/32
load client_standard
#
client_standard:
set iface disable on-demand
#set iface enable proxy-arp
#set iface idle 1800
set bundle enable multilink
set link yes acfcomp protocomp
set link no pap chap
set link enable chap
#set link mtu 1460
set link mtu 1260
set link keep-alive 10 60
set ipcp yes vjcomp
set ipcp dns 61.145.117.164
# set ipcp nbns 172.16.120.4
set bundle enable compression
set ccp yes mppc
set ccp yes mpp-e40
set ccp yes mpp-e128
set ccp yes mpp-stateless
#end of mpd.conf
保存
vi mpd.links
把下面一段復制在裡面
#bengin of mpd.links
pptp1:
set link type pptp
set pptp self 0.0.0.0
set pptp enable incoming
set pptp disable originate
#
pptp2:
set link type pptp
set pptp self 192.168.0.20
set pptp enable incoming
set pptp disable originate
#
pptp3:
set link type pptp
set pptp self 192.168.0.20
set pptp enable incoming
set pptp disable originate
#
pptp4:
set link type pptp
set pptp self 192.168.0.20
set pptp enable incoming
set pptp disable originate
#
pptp5:
set link type pptp
set pptp self 192.168.0.20
set pptp enable incoming
set pptp disable originate
#
#end of mpd.links
保存
vi mpd.secret
在裡面添加幾個五個用戶
當然我們還要修改一下mpd.secret文件
這個文件定義了撥入用戶的用戶名和密碼
用戶名寫在前面,密碼寫在後面用引號引起來,就像下面這樣
fred "fred-pw"
當然還可以指定這個用戶必須從那個地址或者網段來撥入,就像下面的例子:
joe "foobar" 192.168.1.1
bob "\x34\"foo\n" 192.168.1.10/24
重新啟動系統
後 mpd -b
一共可以接受五個並發連接的 vpn server 就建成
看一下結果
lp0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST>; mtu 1500
ppp0: flags=8010<POINTOPOINT,MULTICAST>; mtu 1500
sl0: flags=c010<POINTOPOINT,LINK2,MULTICAST>; mtu 552
faith0: flags=8002<BROADCAST,MULTICAST>; mtu 1500
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST>; mtu 16384
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x8
inet 127.0.0.1 netmask 0xff000000
ng0: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST>; mtu 1500
ng1: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST>; mtu 1500
ng2: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST>; mtu 1500
ng3: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST>; mtu 1500
ng4: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST>; mtu 1500
成功了
當然做了 這些並不能在實際中應用 因為本來還可以連上 Internet 的系統 撥上這個vpn server厚反而不能 上網了
還有一個問題就是 控制 遠程撥號用戶 對網路裡面資源共享 的實現和 訪問控制
還有一個問題 就是要裝一個防火牆 :(
《解決方案》
基於freebsd,openbsd,linux的ipsec-vpn和pptpd三個實例
openbsd的ipsec vpn配置實例及pptpd撥號伺服器(手動密鑰和自動密鑰兩種)
拓撲圖如下
clientA---gate_west--------- ---------internet-------------- gate_east-----clientB
clientA為gate_west內部lan 192.168.1.0/24中的一台機
clientB為gate_east內部lan 10.5.21.0/24中的一台機
gate_west的內ip為192.168.1.1
gate_west的外ip為131.107.3.1
gate_east的內ip為10.5.21.2
gate_east的外ip為131.107.3.2
gate_west的/etc/mygate為131.107.3.9 #即為外部網關
gate_east的/etc/mygate為131.107.3.9 #即為外部網關
假如你要手動密要模式的
一 手動密鑰
1.在gate_west和gate_east做
在/etc/rc.local下加入以下三行
sysctl -w net.inet.esp.enable=1
sysctl -w net.inet.ah.enable=1
sysctl -w net.inet.ip.forwarding=1
2. 生成密鑰
在gate_west上做:
#cd /etc
# openssl rand 24 | hexdump -e '24/1 "%02x"' >; enc_key
# openssl rand 20 | hexdump -e '20/1 "%02x"' >; auth_key
cp到gate_east機上
scp /etc/enc_key gate_east:/etc
scp /etc/auth_key gate_east:/etc
3. 編寫ipsec.sh腳本
在gate_west上
#cd /etc
#vi /etc/ipsec.sh
我的如下:
#!/bin/sh
/sbin/ipsecadm new esp -src 131.107.3.1 -dst 131.107.3.2 -forcetunnel -spi 1000 -enc 3des -auth sha1 -keyfile enc_key -authkeyfile auth_key
/sbin/ipsecadm new esp -src 131.107.3.2 -dst 131.107.3.1 -forcetunnel -spi 1001 -enc 3des -auth sha1 -keyfile enc_key -authkeyfile auth_key
/sbin/ipsecadm flow -out -require -proto esp -src 131.107.3.1 -dst 131.107.3.2 -addr 192.168.1.0/24 10.5.21.0/24
/sbin/ipsecadm flow -in -require -proto esp -src 131.107.3.1 -dst 131.107.3.2 -addr 10.5.21.0/24 192.168.1.0/24
chmod 755 /etc/ipsec.sh
在gate_east上
#cd /etc
#vi /etc/ipsec.sh
我的如下:
#!/bin/sh
/sbin/ipsecadm new esp -src 131.107.3.1 -dst 131.107.3.2 -forcetunnel -spi 1000 -enc 3des -auth sha1 -keyfile enc_key -authkeyfile auth_key
/sbin/ipsecadm new esp -src 131.107.3.2 -dst 131.107.3.1 -forcetunnel -spi 1001 -enc 3des -auth sha1 -keyfile enc_key -authkeyfile auth_key
/sbin/ipsecadm flow -out –require -proto esp -src 131.107.3.2 -dst 131.107.3.1 -addr 10.5.21.0/24 192.168.1.0/24
/sbin/ipsecadm flow -in -require -proto esp -src 131.107.3.2 -dst 131.107.3.1 -addr 192.168.1.0/24 10.5.21.0/24
chmod 755 /etc/ipsec.sh
4. 將ipsec.sh加入到/etc/rc.local中
假如你要自動密鑰模式的
二 自動密鑰(預共享)
1.在gate_west和gate_east做
在/etc/rc.local下加入以下三行
sysctl -w net.inet.esp.enable=1
sysctl -w net.inet.ah.enable=1
sysctl -w net.inet.ip.forwarding=1
2生成/etc/isakmpd/isakmpd.conf和/etc/isakmpd/isakmpd.policy
在gate_west上做:
#cp /usr/share/ipsec/isakmpd/VPN-west.conf /etc/isakmpd/isakmpd.conf
#cp /usr/share/ipsec/isakmpd/policy /etc/isakmpd/isakmpd.policy
對/etc/isakmpd/isakmpd.conf作修改, 我的如下
131.107.3.2= ISAKMP-peer-east
Connections= IPsec-west-east
Phase= 1
Transport= udp
Address= 131.107.3.2
Configuration= Default-main-mode
Authentication= mekmitasdigoat # yoursharedsecret
Phase= 2
ISAKMP-peer= ISAKMP-peer-east
Configuration= Default-quick-mode
Local-ID= Net-west
Remote-ID= Net-east
ID-type= IPV4_ADDR_SUBNET
Network= 192.168.1.0
Netmask= 255.255.255.0
ID-type= IPV4_ADDR_SUBNET
Network= 10.5.21.0
Netmask= 255.255.255.0
DOI= IPSEC
EXCHANGE_TYPE= ID_PROT
Transforms= 3DES-SHA,BLF-SHA
DOI= IPSEC
EXCHANGE_TYPE= QUICK_MODE
Suites= QM-ESP-3DES-SHA-SUITE
對/etc/isakmpd/isakmpd.policy作修改, 我的如下
KeyNote-Version: 2
Authorizer: "POLICY"
Conditions: app_domain == "IPsec policy" &&
esp_present == "yes" &&
esp_enc_alg != "null" ->; "true";
在gate_east上做:
#cp /usr/share/ipsec/isakmpd/VPN-west.conf /etc/isakmpd/isakmpd.conf
#cp /usr/share/ipsec/isakmpd/policy /etc/isakmpd/isakmpd.policy
對/etc/isakmpd/isakmpd.conf作修改, 我的如下
131.107.3.1= ISAKMP-peer-west
Connections= IPsec-east-west
Phase= 1
Transport= udp
Address= 131.107.3.1
Configuration= Default-main-mode
Authentication= mekmitasdigoat # yoursharedsecret
Phase= 2
ISAKMP-peer= ISAKMP-peer-west
Configuration= Default-quick-mode
Local-ID= Net-east
Remote-ID= Net-west
ID-type= IPV4_ADDR_SUBNET
Network= 192.168.1.0
Netmask= 255.255.255.0
ID-type= IPV4_ADDR_SUBNET
Network= 10.5.21.0
Netmask= 255.255.255.0
DOI= IPSEC
EXCHANGE_TYPE= ID_PROT
Transforms= 3DES-SHA,BLF-SHA
DOI= IPSEC
EXCHANGE_TYPE= QUICK_MODE
Suites= QM-ESP-3DES-SHA-SUITE
對/etc/isakmpd/isakmpd.policy作修改, 我的如下
KeyNote-Version: 2
Authorizer: "POLICY"
Conditions: app_domain == "IPsec policy" &&
esp_present == "yes" &&
esp_enc_alg != "null" ->; "true";
3 修改isakmpd.conf和isakmpd.policy的屬性
chmod 400 /etc/isakmpd/isakmpd.conf
chmod 400 /etc/isakmpd/isakmpd.policy
4 啟動isakmpd
#/sbin/isakmpd –d
如要顯示出更多的調試信息
#/sbin/isakmpd –d –DA=99
openbsd3.4下的pptpd撥號伺服器的建立
#cd /usr/ports/net/poptop
#make install clean
#cd /usr/ports/distfiles/poptop-1.1.4/samples
#cp pptpd.conf /etc/
#cp options.pptpd /etc/ppp/
#cp options /etc/ppp/
#cp chap-secrets /etc/ppp/
/etc/pptpd.conf文件如下:
option /etc/ppp/options.pptpd
localip 192.168.0.1
remoteip 192.168.0.234-238,192.168.0.245
在/etc/ppp/ppp.conf追加以下幾行:
pptp:
set escape 0xff
set timeout 0
enable proxy
accept dns
enable MSChapV2
enable mppe
disable pap
disable chap
disable mschap
set mppe * stateless
set dns 192.168.0.254
set ifaddr 192.168.0.254 192.168.0.250-192.168.0.253 255.255.255.255
/etc/ppp/options.pptpd文件如下:
lock
name pptpd
proxyarp
bsdcomp 0
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
auth
在/etc/ppp/ppp.secret文件里添加用戶
test 123456
yyy qwertyuiop
wwww 67890
在/etc/sysctl.conf里添加以下幾行:
net.inet.gre.allow=1
net.inet.gre.wccp=1
net.inet.mobileip.allow=1
《解決方案》
基於freebsd,openbsd,linux的ipsec-vpn和pptpd三個實例
Fedora3的vpn-ipsec-x509及pptpd撥號伺服器的建立
vpn-ipsec-x509
網路拓撲圖
clientA---gate2------internet------gate1---clientB
clientA:192.168.1.12
gate2內ip:192.168.1.1
gate2外ip:131.107.3.1
gate2網關:131.107.3.9 #為外部網關
clientB:10.5.21.12
gate1內ip:10.5.21.131
gate1外ip:131.107.3.2
gate1網關:131.107.3.9 #為外部網關
一: 申請證書及簽署證書請求
在gate1上申請證書
#openssl req -new -nodes –newkey rsa:1024 –sha1 –keyform PEM -keyout gate1.private -outform PEM –out request.pem
根據自己的情況填寫
我們現在自己簽署這個請求
#openssl x509 –req –in request.pem –signkey gate1.private –out gate1.public
現在request這個文件已經沒有用了,可以刪除
在你需要證書的每台機器上都重複上述過程.你現在就可以放心地發布你的」*.public」文件了,但是一定要保證*.private是保密的
gate1和gate2交換*.public文件
用openssl的digest命令校驗*.public,以保證*.public沒被其他人修改過
#openssl dgst gate1.public
二 : 配置racoon.con
我的gate1的racoon.conf如下:
# Racoon IKE daemon configuration file.
# See 'man racoon.conf' for a description of the format and entries.
path include "/etc/racoon";
#path pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/racoon/certs";
listen { isakmp 131.107.3.2 ; }
remote 131.107.3.1
{
exchange_mode aggressive,main;
my_identifier asn1dn;
peers_identifier asn1dn;
certificate_type x509 "gate1.public" "gate1.private";
peers_certfile "gate2.public";
lifetime time 24 hour;
proposal {
encryption_algorithm 3des;
hash_algorithm sha1;
authentication_method rsasig;
dh_group 2;
}
}
sainfo anonymous
{
pfs_group 2;
lifetime time 1 hour ;
encryption_algorithm 3des ;
authentication_algorithm hmac_md5 ;
compression_algorithm deflate ;
}
我的gate2的racoon.conf如下:
# Racoon IKE daemon configuration file.
# See 'man racoon.conf' for a description of the format and entries.
path include "/etc/racoon";
#path pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/racoon/certs";
listen { isakmp 131.107.3.1 ; }
remote 131.107.3.2
{
exchange_mode aggressive,main;
my_identifier asn1dn;
peers_identifier asn1dn;
certificate_type x509 "gate2.public" "gate2.private";
peers_certfile "gate1.public";
lifetime time 24 hour;
proposal {
encryption_algorithm 3des;
hash_algorithm sha1;
authentication_method rsasig;
dh_group 2;
}
}
sainfo anonymous
{
pfs_group 2;
lifetime time 1 hour ;
encryption_algorithm 3des ;
authentication_algorithm hmac_md5 ;
compression_algorithm deflate ;
}
三: 編寫SA policy
gate1的ipsec.sh如下
#!/sbin/setkey -f
#
# Flush SAD and SPD
flush;
spdflush;
# Create policies for racoon
spdadd 10.5.21.0/24 192.168.1.0/24 any -P out ipsec
esp/tunnel/131.107.3.2-131.107.3.1/require;
spdadd 192.168.1.0/24 10.5.21.0/24 any -P in ipsec
esp/tunnel/131.107.3.1-131.107.3.2/require;
gate2的ipsec.sh如下
#!/sbin/setkey -f
#
# Flush SAD and SPD
flush;
spdflush;
# Create policies for racoon
spdadd 192.168.1.0/24 10.5.21.0/24 any -P out ipsec
esp/tunnel/131.107.3.1-131.107.3.2/require;
spdadd 10.5.21.0/24 192.168.1.0/24 any -P in ipsec
esp/tunnel/131.107.3.2-131.107.3.1/require;
四: 開啟轉發和修改racoon屬性
net.ipv4.ip_forward = 1
在/etc/racoon下
#chmod 0600 certs
#chmod 600 racoon.conf
五 若要打開NAT,參考以下腳本
#iptables -t nat -A POSTROUTING -s 10.5.21.0/24 -o eth0 -j MASQUERADE
iptables -I INPUT -p udp --sport 500 --dport 500 -j ACCEPT
iptables -I OUTPUT -p udp --sport 500 --dport 500 -j ACCEPT
iptables -I INPUT -p 50 -j ACCEPT
iptables -I OUTPUT -p 50 -j ACCEPT
#iptables -t nat -A POSTROUTING -o eth0 -d \! 10.5.21.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.5.21.0/24 -o eth0 -j MASQUERADE
pptpd撥號伺服器的建立
如果是fedora2則下載:
dkms-1.12-2.noarch.rpm
kernel_ppp_mppe-0.0.4-2dkms.noarch.rpm
pptpd-1.1.4-b4.i386.rpm
如果是fedora3則下載:
dkms-2.0.2-1.noarch.rpm
kernel_ppp_mppe-0.0.4-3dkms.noarch.rpm
pptpd-1.1.4-b4.i386.rpm
以feora3為例
1 . 先安裝
dkms-2.0.2-1.noarch.rpm
kernel_ppp_mppe-0.0.4-3dkms.noarch.rpm
pptpd-1.1.4-b4.i386.rpm
2. pptpd.conf的配置
option /etc/ppp/options.pptpd
bcrelay eth1
localip 192.168.0.1
remoteip 192.168.0.234-238,192.168.0.245
3. /etc/ppp/options.pptpd的配置
lock
name pptpd
proxyarp
bsdcomp 0
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
4. 添加用戶
/usr/bin/vpnuser add test 123456
在win2000 cleint上測試
《解決方案》
基於freebsd,openbsd,linux的ipsec-vpn和pptpd三個實例
謝謝分享。。。
《解決方案》
基於freebsd,openbsd,linux的ipsec-vpn和pptpd三個實例
ddddddddddddddddd
《解決方案》
不知IPSec 中是否有 C|A 的後門
http://marc.info/?l=openbsd-tech&m=129236621626462&w=2
IPSec 風險
http://solidot.org/articles/10/12/15/0723228.shtml
FBI被指在OpenBSD的IPSEC協議棧中放置後門
OpenBSD創始人Theo de Raadt公開了Gregory Perry的一封來信。Gregory Perry在10年前參與了OpenBSD加密框架開發。在信函中,他聲稱FBI付費給開發商,以在OpenBSD的IPSEC協議棧中植入後門。現在他將這段機密公諸於眾,是因為他與FBI簽署的保密協議已到期。10年前加入的後門代碼如今已經面目全非,de Raadt表示不清楚代碼造成的真正影響有多大,由於OpenBSD是第一個開發出供免費使用的IPSEC協議棧,因此隨後許多項目和產品都是直接拿現成的代碼。
《解決方案》
FBI好邪惡啊。
《解決方案》
:emn10: 不錯