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/…

相关文章
相关标签/搜索