创建单IP的***网络
一、架構(gòu)
1.1現(xiàn)有網(wǎng)絡(luò)
現(xiàn)有網(wǎng)絡(luò)架構(gòu)如圖一所示,其中服務(wù)器網(wǎng)段為192.168.0.x使用專(zhuān)門(mén)線路接入internet,192.168.88.x為網(wǎng)絡(luò)設(shè)備網(wǎng)段,其它都是辦公網(wǎng)段使用另外的線路接入internet。
圖一、現(xiàn)有網(wǎng)絡(luò)結(jié)構(gòu)圖
1.2 ***架構(gòu)
在圖一所示的網(wǎng)絡(luò)架構(gòu)中搭建一臺(tái)***服務(wù)器(192.168.0.x網(wǎng)段),在專(zhuān)門(mén)的安全設(shè)備上映射該服務(wù)器的內(nèi)網(wǎng)地址(外部***撥入輸入外網(wǎng)地址)。遠(yuǎn)程用戶成功撥入后,辦公網(wǎng)絡(luò)的用戶可以正常訪問(wèn)已撥入的***客戶端。如圖二所示。
***服務(wù)器配置如下:
1、單網(wǎng)卡:192.168.0.47
2、***客戶段:172.16.0.0
3、Office辦公網(wǎng)段:192.168.10.x-192.168.17.x
圖二、***網(wǎng)絡(luò)結(jié)構(gòu)圖
1.3 ***方案
通過(guò)使用CentOS6.3(64bit) +Open***(***服務(wù)器)+OpenSSL(CA證書(shū))+MySQL(驗(yàn)證)的方式組建***方案。
二、安裝配置linux系統(tǒng)
2.1安裝CentOS系統(tǒng)
通過(guò)正常方式安裝CentOS6.3的64位版本。可以不安裝圖形界面,字符界面的組件中建議選上基本的開(kāi)發(fā)工具。可通過(guò)以下指令查看系統(tǒng)版本,如圖三所示。
cat/etc/issue cat /proc/version圖三、linux系統(tǒng)版本
2.2配置系統(tǒng)yum源
完成安裝后配置系統(tǒng)的yum源有助于后續(xù)軟件的安裝配置,結(jié)合國(guó)內(nèi)實(shí)際情況采用163.com的更新源,速度和效率上都有保證。163的開(kāi)源服務(wù)器地址為http://mirrors.163.com,各版本的linux在這里都有收集。
wgethttp://mirrors.163.com/.help/CentOS6-Base-163.repo mv CentOS6-Base-163.repo/etc/yum.repos.d/ mv/etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.orig mv/etc/yum.repos.d/CentOS6-Base-163.repo /etc/yum.reops.d/CentOS-Base.repo wgethttp://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm rpm -ivh epel-release-6-7.noarch.rpm圖四、yum源設(shè)置
2.3配置系統(tǒng)時(shí)間
系統(tǒng)的時(shí)區(qū)和時(shí)間設(shè)置不準(zhǔn)確會(huì)導(dǎo)致SQL查詢和流量控制腳本運(yùn)行不正常,因些在安裝系統(tǒng)后需正確設(shè)定系統(tǒng)的時(shí)區(qū)和時(shí)間。輸入以下指令設(shè)置正確的系統(tǒng)時(shí)間。
hwclock --set--date="07/07/06 10:19" hwclock --hctosys其中第一條語(yǔ)句是設(shè)定硬件時(shí)鐘,第二條語(yǔ)句是設(shè)定系統(tǒng)時(shí)鐘和硬件時(shí)鐘同步。同時(shí),時(shí)區(qū)的設(shè)定也很重要,如果系統(tǒng)及硬件時(shí)鐘正確而時(shí)區(qū)設(shè)定不正確的話會(huì)導(dǎo)致時(shí)間相差幾個(gè)小時(shí),因些調(diào)整好時(shí)區(qū)也是一個(gè)重要的步驟。
tzselect
圖五、時(shí)區(qū)設(shè)置
查找系統(tǒng)文件etc/sysconfig/clock并修改為:
ZONE="Asia/Shanghai" UTC=true ARC=false圖六、時(shí)區(qū)設(shè)置
找到系統(tǒng)文件/usr/share/zoneinfo/Asia/Shanghai用這個(gè)文件替換當(dāng)前的/etc/localtime文件
cp/usr/share/zoneinfo/Asia/Shanghai /etc/localtime
圖七、時(shí)區(qū)設(shè)置
2.4禁用selinux
selinux 確實(shí)提高了系統(tǒng)的安全性,但另一方面也給應(yīng)用程序增加了很多的不確定性。我在安裝配置完zabbix后曾出現(xiàn)過(guò)始終無(wú)法打開(kāi)瀏覽頁(yè)面無(wú)法進(jìn)入web安裝界 面的情況,后來(lái)禁用selinux后問(wèn)題解決。對(duì)于selinux的啟用與否個(gè)人見(jiàn)仁見(jiàn)智可以根據(jù)自已的需求決定是否開(kāi)啟。
vi /etc/selinux/config SELINUX=disabled SELINUXTYPE=targeted圖八、selinux設(shè)置
三、安裝相關(guān)組件
3.1安裝系統(tǒng)依賴組件
yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibcglibc-devel glib2 glib2-devel bzip2bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel opensslopenssl-devel
圖九、相關(guān)依賴組件安裝
3.2安裝open***組件
yum install open*** pam_krb5 pam_mysql pam pam-devel
圖十、open***組件安裝
3.3安裝MySQL組件
yum install mysql mysql-devel libgcrypt-devel lzo-mini lzo lzolzo-devel mysql-server mysql-libs
圖十一、MySQL組件安裝
四、配置證書(shū)
Open***可以使用PKI證書(shū)體系進(jìn)行雙向的認(rèn)證操作,也就是在建立***連接的同時(shí),除了服務(wù)器端要驗(yàn)證客戶端的證書(shū)外,客戶端也要確認(rèn)服務(wù)器端的證書(shū)。
當(dāng)服務(wù)器端及客戶端在相互認(rèn)證時(shí),會(huì)利用根證書(shū)(RootCA)公鑰進(jìn)行對(duì)方證書(shū)的驗(yàn)證,然后會(huì)再進(jìn)行一些其它信息的測(cè)試,例如,驗(yàn)證對(duì)方證書(shū)上的common name或是其它類(lèi)別。
這樣的機(jī)制有以下好處:
1、服務(wù)端只需要知道它自已的憑證及私鑰,無(wú)需知道個(gè)別可能會(huì)連進(jìn)來(lái)的客戶端的證書(shū)及私鑰。
2、服務(wù)端只接受由同一個(gè)根證書(shū)(Root CA)所簽發(fā)的客戶端證書(shū)。服務(wù)端不需要根證書(shū)的私鑰即可進(jìn)行驗(yàn)證。所以根證書(shū)(RootCA)的私鑰,可以安全保存到其它的機(jī)器上。
3、如果客戶端的私鑰有問(wèn)題的話,可以把它加入失效列表,這樣可以在連接時(shí),拒絕***連接。
4.1復(fù)制證書(shū)模板
圖十二、證書(shū)配置
4.2生成根證書(shū)(Root CA)
先修改證書(shū)生成變量文件,保存退出,然后開(kāi)始清理。
vi/etc/open***/easy-rsa/2.0/vars export KEY_COUNTRY="CN"#國(guó)家 export KEY_PROVINCE="GD"#省 export KEY_CITY="DongGuan" #城市 export KEY_ORG="myj"#組織 export KEY_EMAIL="waring_id@126.com" export KEY_EMAIL=waring_id@126.com export KEY_CN=changeme export KEY_NAME=changeme export KEY_OU=changeme export PKCS11_MODULE_PATH=changeme export PKCS11_PIN=1234 /etc/open***/easy-rsa/2.0/clean-all#清理 /etc/open***/easy-rsa/2.0/build-ca#生成根證書(shū)4.3生成服務(wù)端(server)客戶端(client)證書(shū)及DH交換參數(shù)
DH密鑰交換參數(shù)(Diffie Hellman parameters)主要用于加密通道未建立前,在不安全的通道下建立一個(gè)密鑰,可以用這個(gè)密鑰在第一次證書(shū)交換時(shí)加密使用。這個(gè)密鑰只使用一次,下次要用時(shí)會(huì)重新生成。
/etc/open***/easy-rsa/2.0/build-key-serverserver#生成服務(wù)器證書(shū) /etc/open***/easy-rsa/2.0/build-keyclient1#生成客戶端證書(shū) /etc/open***/easy-rsa/2.0/build-dh#生成DH交換參數(shù)證書(shū)生成完畢后會(huì)在“/etc/open***/easy-rsa/2.0/keys/”下生成以下文件,如表一所示。
Filename Needed By Purpose Secret ca.crt server + all clients Root CA certificate NO ca.key key signing machine only Root CA key YES Dh1024.pem server only Diffie Hellman parameters NO server.crt server only Server Certificate NO server.key server only Server Key YES client1.crt client1 only Client1 Certificate NO client1.key client1 only Client1 Key YESFilename | Needed By | Purpose | Secret |
ca.crt | server + all clients | Root CA certificate | NO |
ca.key | key signing machine only | Root CA key | YES |
Dh1024.pem | server only | Diffie Hellman parameters | NO |
server.crt | server only | Server Certificate | NO |
server.key | server only | Server Key | YES |
client1.crt | client1 only | Client1 Certificate | NO |
client1.key | client1 only | Client1 Key | YES |
表一、證書(shū)列表
五、配置數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)使用MySQL,主要用于存儲(chǔ)***客戶端撥入的用戶名和密碼,在***撥入時(shí)進(jìn)行驗(yàn)證操作,MySQL的詳細(xì)設(shè)定可以參考相關(guān)文檔,這里僅列出必須的指令。
5.1配置啟動(dòng)數(shù)據(jù)庫(kù)
service mysqld start#啟動(dòng)數(shù)據(jù)庫(kù) mysql_secure_installation#數(shù)據(jù)庫(kù)密碼重設(shè)5.2新建數(shù)據(jù)庫(kù)
mysql -uroot -p CREATE DATABASE open***; GRANT ALL ON open***.* TO'open***'@'localhost' IDENTIFIED BY 'password';5.3創(chuàng)建用戶數(shù)據(jù)表
CREATE TABLE IF NOT EXISTS`user` ( `username` char(32) COLLATEutf8_unicode_ci NOT NULL, `password` char(128) COLLATEutf8_unicode_ci DEFAULT NULL, `active` int(10) NOT NULLDEFAULT '1', `creation` timestamp NOT NULLDEFAULT CURRENT_TIMESTAMP, `name` varchar(32) COLLATEutf8_unicode_ci NOT NULL, `email` char(128) COLLATEutf8_unicode_ci DEFAULT NULL, `note` text COLLATEutf8_unicode_ci, `quota_cycle` int(10) NOT NULLDEFAULT '30', `quota_bytes` bigint(20) NOTNULL DEFAULT '10737418240', `enabled` int(10) NOT NULLDEFAULT '1', PRIMARY KEY (`username`), KEY `idx_active` (`active`), KEY `idx_enabled` (`enabled`) ) DEFAULT CHARSET=utf8COLLATE=utf8_unicode_ci;5.4創(chuàng)建日志數(shù)據(jù)表
CREATE TABLE IF NOT EXISTS`log` ( `username` varchar(32) COLLATEutf8_unicode_ci NOT NULL, `start_time` timestamp NOTNULL DEFAULT CURRENT_TIMESTAMP, `end_time` timestamp NOT NULLDEFAULT '0000-00-00 00:00:00', `trusted_ip` varchar(64)COLLATE utf8_unicode_ci DEFAULT NULL, `trusted_port` int(10) DEFAULTNULL, `protocol` varchar(16) COLLATEutf8_unicode_ci DEFAULT NULL, `remote_ip` varchar(64)COLLATE utf8_unicode_ci DEFAULT NULL, `remote_netmask` varchar(64)COLLATE utf8_unicode_ci DEFAULT NULL, `bytes_received` bigint(20)DEFAULT '0', `bytes_sent` bigint(20)DEFAULT '0', `status` int(10) NOT NULLDEFAULT '1', KEY `idx_username`(`username`), KEY `idx_start_time`(`start_time`), KEY `idx_end_time`(`end_time`) ) DEFAULT CHARSET=utf8COLLATE=utf8_unicode_ci; exit;#退出數(shù)據(jù)庫(kù)六、配置pam支持MySQL驗(yàn)證
用戶的驗(yàn)證信息(用戶名、密碼)保存在MySQL數(shù)據(jù)庫(kù)中,驗(yàn)證模塊則是利用pam功能的新增pam_mysql.so插件來(lái)實(shí)現(xiàn)。需要注意的是32位和64位操作系統(tǒng)所引用的地址是有區(qū)別的。
6.1安裝pam.so組件
cd /usr/src wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz tar zxvf pam_mysql-0.7RC1.tar.gz cd pam_mysql-0.7RC1 vi patch.in --- Makefile.in.chold2008-07-14 10:25:53.000000000 +0200 +++ Makefile.in 2008-07-1410:26:06.000000000 +0200 @@ -110,7 +110,7 @@ CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ -pam_mysql_la_LIBADD = +pam_mysql_la_LIBADD = -lpam pam_mysql_la_OBJECTS=pam_mysql.lo CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES)$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) patch -p0 < patch.in ./configure make make install cp /usr/lib64/open***/plugin/lib/open***-auth-pam.so/etc/open***/6.2修改open***讓其支持MySQL驗(yàn)證
crypt 表示密碼在數(shù)據(jù)庫(kù)中加密存儲(chǔ)的方式,含義如下:
?0 (or “plain”):不加密,明文存儲(chǔ)。不推薦使用。
?1 (or “Y”):使用crypt(3)函數(shù),相當(dāng)于MySQL 中的ENCRYPT()函數(shù)。
?2 (or “mysql”):使用MySQL 的PASSWORD()函數(shù)。PAM可能與MySQL 的函數(shù)不同,不推薦使用。
?3 (or “md5″):使用MD5。
?4 (or “sha1″):使用SHA1。
vi /etc/pam.d/open*** auth sufficient /lib64/security/pam_mysql.so user=open***passwd=www.myj123.com host=localhostdb=open*** table=user usercolumn=usernamepasswdcolumn=password where=active=1 sqllog=1 crypt=1 account required /lib64/security/pam_mysql.so user=open***passwd=www.myj123.com host=localhostdb=open*** table=user usercolumn=usernamepasswdcolumn=password where=active=1 sqllog=1 crypt=16.3啟動(dòng)saslauthd
servicesaslauthd start6.4添加測(cè)試用戶
6.5測(cè)試MySQL驗(yàn)證
testsaslauthd -u test -p test-s open***如果提“0: OK "Success."表示成功。
七、配置open***
7.1配置open***服務(wù)端
開(kāi)始建立Open***的配置文件,Open*** 服務(wù)啟動(dòng)時(shí),會(huì)掃描/etc/open*** 目錄中的.conf 文件,對(duì)于每個(gè)文件,啟動(dòng)一個(gè)daemon。本系統(tǒng)要實(shí)現(xiàn)UDP、TCP 登錄的同時(shí)支持,可以寫(xiě)兩份配置文件,如tcp.conf,udp.conf,即啟動(dòng)兩個(gè)daemon,分別負(fù)責(zé)TCP和UDP協(xié)議。以下以u(píng)dp為例。
vi /etc/open***/server.conf port 1194#使用1194端口 proto udp#使用UDP協(xié)議 devtun#使用tunn方式 ca /etc/open***/easy-rsa/2.0/keys/ca.crt#根證書(shū) cert /etc/open***/easy-rsa/2.0/keys/server.crt#服務(wù)端證書(shū) key /etc/open***/easy-rsa/2.0/keys/server.key#服務(wù)端key dh /etc/open***/easy-rsa/2.0/keys/dh1024.pem#DH交換密鑰 server 172.16.0.0 255.255.255.0#***撥入后分配的地址 ifconfig-pool-persist ipp.txt#***撥入后IP信息 push "route 172.16.0.0 255.255.255.0" push "route 192.168.0.0 255.255.255.0" push "route 192.168.16.0 255.255.255.0" push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 202.96.128.166" push "dhcp-option DNS 202.96.128.86" push "dhcp-option DNS 172.16.0.1" keepalive 20 120#連接時(shí)間 plugin /etc/open***/open***-auth-pam.so open***#mysql驗(yàn)證方式 username-as-common-name#用戶名驗(yàn)證 comp-lzo#壓縮傳輸 max-clients 30 user nobody group nobody persist-key persist-tun status/var/log/open***/open***-status.log log-append /var/log/open***/open***.log verb 3 mute 5 script-security 2 client-connect ./connect.sh#連接時(shí)啟用的腳本 client-disconnect ./disconnect.sh#斷開(kāi)連接時(shí)的腳本7.2配置open***流量控制
open***流量控制的主要作用是在用戶連接時(shí),在數(shù)據(jù)庫(kù)log 表中新建一條記錄,記錄用戶的IP 地址、端口號(hào)、連接時(shí)間等信息。在用戶斷開(kāi)連接時(shí),更新剛才添加的記錄,記下用戶的斷開(kāi)連接時(shí)間、發(fā)送數(shù)據(jù)量、接收數(shù)據(jù)量等。然后,對(duì)用戶的流量進(jìn)行判斷,若超過(guò)配額,則將用戶鎖定(active=0)。
user 表中的quota_cycle 是用戶的流量計(jì)算周期,quota_bytes 是用戶每個(gè)周期內(nèi)最多允許的流量。connect.sh 和disconnect.sh 腳本文件中調(diào)用了Open*** 的環(huán)境變量。Open*** 在執(zhí)行腳本時(shí),自動(dòng)各種設(shè)置了環(huán)境變量,供腳本使用。
vi /etc/open***/connect.sh#連接腳本 #!/bin/bash DB='open***' DBADMIN='open***' DBPASSWD='password' mysql -u$DBADMIN -p$DBPASSWD -e "INSERT INTOlog(username,start_time,trusted_ip,trusted_port,protocol,remote_ip,remote_netmask,status) VALUES('$common_name',now(),'$trusted_ip',$trusted_port,'$proto_1','$ifconfig_pool_remote_ip','$route_netmask_1',1)"$DB vi /etc/open***/disconnect.sh#斷開(kāi)連接時(shí)腳本 #!/bin/bash DB='open***' DBADMIN='open***' DBPASSWD='password' mysql -u$DBADMIN -p$DBPASSWD -e "UPDATE log SETend_time=now(),bytes_received=$bytes_received,bytes_sent=$bytes_sent,status=0WHERE trusted_ip='$trusted_ip' AND trusted_port=$trusted_port ANDremote_ip='$ifconfig_pool_remote_ip' AND username='$common_name' ANDstatus=1" $DB mysql -u$DBADMIN -p$DBPASSWD -e "UPDATE user SETactive=0 WHERE user.username IN (SELECT username FROM (SELECT log.username ASusername, quota_bytes FROM user, log WHERE log.username='$common_name' ANDlog.username=user.username AND log.status=0 ANDTO_DAYS(NOW())-TO_DAYS(start_time)< =quota_cycle GROUP BY log.usernameHAVING SUM(bytes_received)+SUM(bytes_sent)>=quota_bytes) AS u);" $DB chmod +x /etc/open***/connect.sh chmod +x/etc/open***/disconnect.sh使用cron 每天對(duì)用戶進(jìn)行檢查以上操作在用戶超過(guò)流量時(shí)自動(dòng)將用戶鎖定。每天還應(yīng)該執(zhí)行一次檢查,把已經(jīng)恢復(fù)流量的用戶解鎖。可以通過(guò)cron實(shí)現(xiàn)此功能。
vi /etc/cron.daily/open***#每天定時(shí)執(zhí)行腳本 #!/bin/bash DB='open***' DBADMIN='open***' DBPASSWD='password' mysql -u$DBADMIN -p$DBPASSWD -e "UPDATE user SETactive=1" $DB mysql -u$DBADMIN -p$DBPASSWD -e "UPDATE user SETactive=0 WHERE user.username IN (SELECT username FROM (SELECT log.username ASusername, quota_bytes FROM user, log WHERE log.username=user.username ANDlog.status=0 AND TO_DAYS(NOW())-TO_DAYS(start_time)< =quota_cycle GROUP BYlog.username HAVING SUM(bytes_received)+SUM(bytes_sent)>=quota_bytes) ASu);" $DB mysql -u$DBADMIN -p$DBPASSWD -e "UPDATE user SETactive=0 WHERE enabled=0" $DB chmod +x /etc/cron.daily/open***7.3配置open***客戶端(windows)
需要先安裝windows下的客戶端,客戶端分為32位版本和64位兩種,下載后正常安裝。安裝完成后在“C:\Program Files\Open***\config\”下將client1.key、client1.crt和ca.crt放入該文件夾,同時(shí)建立以下客戶端配置文件如myopen***.o***,詳情如下所示。
client devtun protoudp remote 遠(yuǎn)程IP 1194 resolv-retry infinite nobind persist-key persist-tun --ca ca.crt --cert client1.crt --key client1.key auth-user-pass ns-cert-type server keepalive 20 60 comp-lzo verb 3 mute 20 route-method exe route-delay 2客戶端啟動(dòng)open***后選擇連接(connect)后輸入用戶驗(yàn)證的用戶名和密碼,撥入成功后如圖十二、十三、十四所示。
圖十二、open***客戶端
圖十三、open***客戶端
圖十四、open***客戶端
7.4配置open***客戶端(ubuntu)
八、啟動(dòng)并測(cè)試open***
8.1啟動(dòng)open***
在服務(wù)器端啟動(dòng)open***服務(wù)。運(yùn)行以下指令后open***服務(wù)器端會(huì)啟動(dòng)相應(yīng)服務(wù),服務(wù)啟動(dòng)后可查看配置文件中設(shè)定的日志定位存在的問(wèn)題,啟動(dòng)成功后會(huì)在系統(tǒng)中生成一塊tun0網(wǎng)卡,如圖十五所示。
serviceopen*** start圖十五、MySQL組件安裝
8.2啟用系統(tǒng)路由轉(zhuǎn)發(fā)
8.3配置防火墻
總結(jié)
以上是生活随笔為你收集整理的创建单IP的***网络的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: AndroidManifest.xml文
- 下一篇: 服务器最小化安装后的优化脚本