VPN的連線目前普遍使用的是PPTP的方式,這次來介紹另一種連線的協定,利用L2TP協定來建立VPN連線,在安全性上也比PPTP的連線方式來的高。


STEP 1:更新來源套件

# sudo yum install epel-release

  • CentOS and Red Hat Enterprise Linux 6.x

# wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm sudo rpm -Uvh epel-release-6*.rpm

  • CentOS and Red Hat Enterprise Linux 7.x

# wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm sudo rpm -Uvh epel-release-latest-7*.rpm

 

STEP 2:進行套件更新安裝

# yum install strongswan xl2tpd

亞索數位筆記

 

STEP 3:啟動防火牆轉發功能

# vi /etc/sysctl.conf

亞索數位筆記

# sysctl -p

亞索數位筆記

 

STEP 4:設定PSK公鑰認證

# vi /etc/strongswan/ipsec.secrets

亞索數位筆記

 

STEP 5:設定l2tp.conf

# vi /etc/xl2tpd/xl2tpd.conf

[global]
listen-addr = VPN主機IP

[lns default]
ip range = VPN分配起始IP-VPN分配結束IP
local ip = VPN使用出口閘道
require chap = yes
refuse pap = yes
require authentication = yes
name = l2tpd
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes

 

STEP 6:如果上面使用了pam驗證,要設定此項

# vi /etc/sysctl.conf

#%PAM-1.0
auth    required        pam_nologin.so
auth    required        pam_unix.so
account required        pam_unix.so
session required        pam_unix.so

STEP 7:設定ppp連線設定

# vi /etc/ppp/options.xl2tpd

ipcp-accept-local
ipcp-accept-remote
ms-dns 1.1.1.1
ms-dns 8.8.8.8
noccp
auth
idle 1800
mtu 1410
mru 1410
nodefaultroute
debug
proxyarp
connect-delay 5000
login

STEP 8:設定連線帳號密碼

# vi /etc/ppp/chap-secrets

亞索數位筆記

xl2tpd.conf的name參數在此即會用到

連線帳號 l2tpd “連線密碼” 可以連線的來源

 

STEP 9:設定開機自動啟動

# systemctl strongswan.service start

# systemctl enable strongswan.service

# systemctl xl2tpd.service start

# systemctl enable xl2tpd.service

 

STEP 10:加入防火牆規則(iptables)

# iptables -A INPUT -p esp -j ACCEPT # ESP
# iptables -A INPUT -p ah -j ACCEPT # AH
# iptables -A INPUT -p udp –dport 500 -j ACCEPT # IKE
# iptables -A INPUT -p udp –dport 4500 -j ACCEPT # NAT-T
# iptables -A INPUT -p udp -m policy –dir in –pol ipsec -m udp –dport 1701 -j ACCEPT # 強制 l2tp透過i1701 Port存取
# iptables -t nat -A POSTROUTING -s VPN使用網段/24 -o eth0 -j MASQUERADE # 轉送 VPN流量,防火牆需啟用NAT
# /etc/init.d/iptables save
如有啟用NAT,防火牆需在下方加入以下條件,封包才會進行轉發
# vi /etc/sysconfig/iptables

:FORWARD ACCEPT [0:0]
-A FORWARD -i ppp+ -p tcp -m tcp –tcp-flags FIN,SYN,RST,ACK SYN -j TCPMSS –set-mss 1356
# — 開放DNS.WEB
#-A FORWARD -i ppp+ -s VPN使用網段/24 -j ACCEPT
-A FORWARD -i ppp+ -s VPN使用網段 -p tcp –dport 53 -j ACCEPT
-A FORWARD -i ppp+ -s VPN使用網段 -p udp –dport 53 -j ACCEPT
-A FORWARD -i ppp+ -s VPN使用網段 -p tcp –dport 80 -j ACCEPT
-A FORWARD -i ppp+ -s VPN使用網段 -p tcp –dport 443 -j ACCEPT
# — 阻擋特定IP特定PORT不可連線
#-A FORWARD -i ppp+ -s VPN使用網段 -d VPN網段要連的IP -p tcp –dport 443 -j DROP
#-A FORWARD -i ppp+ -s VPN使用網段 -p tcp –dport 443 -j ACCEPT
#-A FORWARD -i ppp+ -s VPN使用網段 -d VPN網段要連的IP -p tcp –dport 3389 -j DROP
# –放行儘可以連線至特定位置(讓VPN網段可以與內網互通)
-A FORWARD -i ppp+ -s VPN使用網段 -d VPN主機使用網段 -j logaccept
# — 除上述規則,丟棄所有VPN連線
# — DROP與REJECT差別在於,DROP連防火牆都不給進,直接丟棄封包
#-A FORWARD -i ppp+ -s VPN使用網段 -j logdrop
#-A FORWARD -j REJECT –reject-with icmp-host-prohibited
COMMIT

# — 啟用NAT機制,如使用橋接轉送方式(與路由器閘道使用相同的網段),下方可以不設定
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s VPN使用網段/255.255.255.0 -j SNAT –to-source VPN主機IP
-A POSTROUTING -s VPN使用網段/24 -o eth0 -j MASQUERADE
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -o eth0 -j MASQUERADE
-A POSTROUTING -o ppp+ -j MASQUERADE
COMMIT