Ubuntu DDNS服務器搭建

一直以來都是在印象筆記等記錄、總結,很早以前就想寫分享文章,但本身拖延太嚴重,明日復明日,已經9102年了,決定先從之前部分筆記搬家開始,先邁出第一步😂。

本文主要介紹經過Apache+cgi實現ubuntu環境下搭建DDNS服務器,主要包含3個部分:環境搭建、系統設計以及具體實現。html

1、環境搭建

以下圖所示,服務器環境主要分如下4步完成:mysql

1.1 第一步:安裝apachelinux

執行命令行
sudo apt-get install apache2複製代碼

1.2 第二步:配置apache支持cgi程序
ios

配置apache運行cgi程序可分爲兩種狀況:正則表達式

  1. ScriptAlias目錄的CGI,用ScriptAlias指令使Apache容許執行特定目錄中的CGI程序。
  2. ScriptAlias之外目錄的CGI。則能夠用Options顯式地容許CGI的執行

操做以下:算法

執行命令,打開apache下default配置
sudo gedit /etc/apache2/sites-available/default修改前代碼塊:ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/<Directory "/usr/lib/cgi-bin">AllowOverride NoneOptions ExecCGI -MultiViews +SymLinksIfOwnerMatchOrder allow,denyAllow from all</Directory>要使/var/www/cgi-bin/這個目錄下能夠運行CGI, 則修改後爲:
## 用 ScriptAlias 指令設置 ##
ScriptAlias /cgi-bin/ /var/www/cgi-bin/## 用 Options 顯示設置 ##
<Directory "/var/www/cgi-bin/">AllowOverride NoneOptions +ExecCGI -MultiViews +SymLinksIfOwnerMatchOrder allow,denyAllow from all</Directory> 設置執行命令,重啓Apache服務sudo /etc/init.d/apache2 restart    複製代碼

1.3 第三步:安裝mysql數據庫

執行命令
    sudo apt-get install mysql-server mysql-client複製代碼

友情提示: apt-get程序會自動下載安裝最新的mysql版本。在安裝的最後,它會要求裏輸入root的密碼,注意,這裏的root密碼是指你要給MySQL設定的root密碼。
sql

1.4 第四步:設置Ubuntu文件執行讀寫權限數據庫

LAMP組建安裝好以後,PHP網絡服務器根目錄默認設置是在:/var/www。因爲Linux系統的安全性原則,改目錄下的文件讀寫權限是隻容許root用戶操做的,因此咱們不能在www文件夾中新建修改和刪除文件,必需要先修改/var/www目錄的讀寫權限。在界面管理器中經過右鍵屬性不能修改文件權限,得執行root終端命令。
apache

執行命令
    sudo chmod 777 /var/www複製代碼

至此,服務器環境搭建完成。ubuntu

2、系統設計

2.1 DDNS系統設計


2.2 服務器流程設計


如圖所示,服務器在接收到請求後,須要進行用戶認證,認證經過後才能跳轉至cgi程序進行數據庫操做,信息獲取等。

2.3 數據庫設計

核心表格:

1.device記錄設備對應的域名,ip地址,設備信息等

2.user記錄用戶信息,用戶ddns權限等


3、詳細實現

3.1 Makefile編譯C cgi程序

LDFLAGS := -L/usr/lib/mysql-workbench -lmysqlclient -L/usr/lib/i386-linux-gnu/ -lcrypto
INCLUDE := -I. -I/usr/include/mysql 
RECO_TARGET_DIR := /var/www/cgi-bin
#全部的源文件
ALL_SRC_FILES   := $(wildcard *.c)
#全部的目標文件
ALL_TARGET_OBJS := $(patsubst %.c,$(RECO_TARGET_DIR)/%.o,$(ALL_SRC_FILES))
#依賴文件
#RECO_TARGET_DIR := $(RECO_TARGET_DIR)/ddnscgi
RECO_DEPEND_FILE:= $(RECO_TARGET_DIR)/MAKEFILE.DEPEND
RECO_TARGET_NAME:=ddnstest
#避免RECO_TARGET_NAME爲空時,致使誤刪除
ifeq ($(RECO_TARGET_NAME),)
RECO_TARGET_NAME:=oooxxxx
endif

#肯定編譯目標類型

RECO_MK_EXE		:= $(RECO_TARGET_DIR)/$(RECO_TARGET_NAME)
RECO_MK_TARGET  := $(RECO_MK_EXE)
RECO_MK_TARGET  :  $(RECO_MK_TARGET)

#包含依賴文件
ifneq ($(MAKECMDGOALS), clean)
include $(RECO_DEPEND_FILE)
endif

#exe生成規則
$(RECO_MK_EXE): $(ALL_TARGET_OBJS)
	$(CC) -o $@ $^ $(LDFLAGS)
	
#.o文件生成規則
$(RECO_TARGET_DIR)/%.o:%.c
	$(CC) $(INCLUDE) -o $@ -c $<
#生成依賴文件
$(RECO_DEPEND_FILE):
	@set -e; \
	#echo "Making $@ ..."; \
	$(CC) $(INCLUDE) -E -MM $(ALL_SRC_FILES) | sed 's,\(.*\)\.o[ :]*,$(RECO_TARGET_DIR)/\1.o $@:,g'>$(RECO_DEPEND_FILE); 

#執行clean操做
clean:
	-rm -rf $(RECO_TARGET_DIR)/$(RECO_TARGET_NAME)
	-rm -rf $(RECO_TARGET_DIR)/*.o
	-rm -rf $(RECO_DEPEND_FILE)複製代碼

3.2 Apache重定向實現頁面跳轉

首先,啓用apache重寫模塊,並重啓apache服務

方式一:
    sudo a2enmod rewrite

方式二:
    sudo ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load

方式三:
    修改配置文件:/usr/local/apache/conf/httpd.conf    打開LoadModule rewrite_module modules/mod_rewrite.so複製代碼

其次,完成如下配置

  1. 修改Apache下httpd.conf或/etc/apache2/sites-available/default文件: 將全部的AllowOverride None 改成 AllowOverride All 。
  2. 在須要作頁面跳轉的目錄下新建.htaccess文件。
  3. 在.htaccess中設置重寫規則。

.htaccess內容語法格式以下:
      RewriteEngine On # 將 RewriteEngine 模式打開 
      RewriteCond String 正則表達式   //當知足是才執行rewriteRule
      RewriteRule 正則表達式 目標地址
      當請求地址知足正則表達式時,跳轉至目標地址。複製代碼

3.3 Apache Basic和digest認證的實現

在實際應用中,常要求某些頁面、數據、功能只容許特定的人訪問,爲了實現這個目標,那麼就要應用認證功能。HTTP 提供一個用於權限控制和認證的通用框架。最經常使用的是Basic認證和Digest認證。

Basic認證(基本認證):基本認證是一種用來容許Web瀏覽器或其餘客戶端程序在請求時提供用戶名和口令形式的身份憑證的一種登陸驗證方式。把 "用戶名+冒號+密碼"用BASE64算法加密後的字符串放在http request 中的header Authorization中發送給服務端,包含密碼的明文傳遞。

Digest認證(摘要認證):摘要認證能夠看作是基本認證的加強版本,不包含密碼的明文傳遞。引入了qop、nonce、cnonce等一系列安全加強的選項,並使用 MD5 加密達成"不可逆的"。

一個典型的客戶端與服務器間進行http身份認證過程:


在apache服務器實現basic認證:

  1. 採用htpasswd方式生成密碼文件
  2. 在httpd.conf或default文件中進行認證配置

採用htpasswd方式生成密碼文件:
    htpasswd -c /root/.htpasswd admin

在httpd.conf或default文件中進行認證配置:
    <Directory "/var/www/">         
        AuthType basic         
        AuthName "Authorization " 
        AuthUserFile /root/.htpasswd
        Require user cnsecer 
   </Directory>
其中「/var/www/」表明被須要認證的目錄,/root/.htpasswd則指第一步生成的密碼文件
複製代碼

Apache實現digest認證:

  1. 啓用digest認證模塊。
  2. 使用htdigest命令建立密碼文件。
  3. 在httpd.conf或default文件中進行認證配置。

1.啓用digest認證模塊: 
    a2enmod auth_digest

2.使用htdigest命令建立密碼文件:
    htdigest -c /usr/local/nagios/etc/nagios.users "Nagios Access" nagiosadmin
    其中"Nagios Access"需與下方3.配置的AuthName 一致。

3.在httpd.conf或default文件中進行認證配置:
    <Location /nagios/>
        AuthType              Digest
        AuthName            "Nagios Access"
        AuthDigestDomain   /nagios/ http://192.168.0.205/nagios/
        AuthDigestProvider  file
        AuthUserFile        /usr/local/nagios/etc/nagios.users密碼文件路徑
        Require             valid-user
    </Location>複製代碼

至此,Ubutun下DDNS服務器搭建完成。

最後

此項目完成時間2016,有點久遠,存在不足之處,歡迎小夥伴們一塊兒交流。另外,想了解更多,能夠訪問如下連接:

Makefile規則:

blog.csdn.net/liang136647…

Apache Rewrite規則:

blog.csdn.net/yxwb1253587…

www.cnblogs.com/CheeseZH/p/…

相關文章
相關標籤/搜索