介绍
内部网是由组织来缓解通信和数据传输建立专用网络。 通过连接世界各地的多个网络以创建新的虚拟网络来构建内联网。 连接到内部网的用户可以访问某些内部网站或访问内部网上的其他网络服务和内容。 例如,如果站外员工想要访问位于他们的雇主的主网络上的敏感信息,则该员工将连接到位于办公室的主网络上的VPN服务器。 此VPN连接将在员工和办公室之间创建安全的隧道。 在网络上,员工的连接将显示为本地连接到主网络,而不是使用非现场连接。
在本教程中,您将配置仅供连接到VPN的客户端使用的服务,包括文件共享和网站,您将学习如何管理对这些资源的访问。 完成后,您将拥有一个基本的内部网络,您可以轻松扩展以满足您的需求。
先决条件
要完成本教程,您需要以下内容:
- 一个新的Ubuntu 16.04服务器。
- 以标准用户帐户
sudo
权限。 您可以通过以下的的第2步和3设置了一个标准帐户与Ubuntu 16.04初始服务器设置教程。 - OpenVPN在您的服务器上安装和配置。 完成如何设置在Ubuntu 16.04的OpenVPN服务器的教程然后再继续。 我们假定VPN服务器位于IP地址
10.8.0.1
上的VPN,这是在OpenVPN的教程中使用的地址,你可以从本地机器连接到VPN。 - 注册的域名和添加DNS条目的访问权限。 我们将使用
example.com
在本教程中,我们将使用DigitalOcean的DNS服务。 当您域中使用DigitalOcean的DNS服务,按照第1步和2我们如何建立一个主机名与DigitalOcean教程在DigitalOcean的域名服务器来指向您的域名。 - Apache安装有为您的域配置的两个虚拟主机。 按照教程如何设置Apache虚拟主机在Ubuntu 16.04设立两个虚拟主机名为
example.com
和intranet. example.com
,每一个默认的HTML页面。
第1步 - 安装和配置Samba文件服务器
让我们开始设置Samba,这样我们Intranet上的人们可以共享文件。 Samba不同于其他文件共享应用程序,如Dropbox,因为它没有Web界面或任何存储限制。 相反,Samba在服务器本身上共享目录和文件,因此您不必将数据上传到任何不受控制的外部服务器。
我们将创建两个共享目录。 第一个目录将由我们的专用网络上的所有用户访问。 第二个目录只能由我们指定的用户访问。 我们将其命名这些股份Allusers
和Restricted
分别。
首先,使用以下命令安装Samba及其先决条件:
sudo apt-get install samba samba-common python-glade2 system-config-samba
接下来,备份Samba配置文件,以防万一我们稍后修改它时出错。
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup
Samba还需要通过防火墙访问,因此请为Samba流量添加规则:
sudo ufw allow samba
现在创建我们将共享的目录。 首先,创建allusers
目录:
sudo mkdir -p /samba/allusers
然后创建restricted
目录:
sudo mkdir -p /samba/restricted
现在,让我们编辑Samba配置文件以设置服务并定义共享。 打开Samba配置文件:
sudo nano /etc/samba/smb.conf
然后删除所有的内容我们将从头开始一块一块地编写我们自己的配置。
首先,我们为Samba服务器指定一些全局设置。 将以下行添加到配置文件:
[global]
workgroup = WORKGROUP
server string = Samba Server %v
netbios name = ubuntu
security = user
map to guest = bad user
dns proxy = no
interfaces = 10.8.0.1/8
bind interfaces only = yes
让我们分解每个设置:
该workgroup
设置指定的服务器时会出现客户端查询的工作组。 默认的组是WORKGROUP
适用于Windows,但你可以改变它,如果你已经有您使用的是工作组名称。
该server string
和netbios
线路分别指定Samba服务器和平台的名称。
的security
设置指定,这将是与自己的用户帐户的独立文件服务器。 该map to guest
设置将所有登录名来宾用户一个无效的用户名或密码,以及dns proxy
设置告诉Samba不要尝试,因为我们没有运行我们自己的DNS这个内部网解析域名。
随着interfaces
的设置,我们指定我们只监听使用VPN服务器的IP,而不是一个公开访问的IP连接。 该bind interface
告诉Samba只听取我们的VPN发起请求。
接下来,我们需要指定Samba的日志记录设置。 这个配置块添加到该文件,在[global]
部分:
[global]
...
## Logging
log level = 2
log file = /var/log/samba.log.%m
max log size = 50
debug timestamp = yes
该log level
设置确定你的日志文件你想要的详细程度。 这些级别范围从1到10,但我们将坚持使用级别2,因为它是一个相对较轻的调试级别。 该log file
设置指定的日志文件的文件路径和名称,与max log size
限制日志文件的大小。 在debug timestamp
设置包括在日志中的时间戳。
这将照顾我们服务器的全局设置。 现在让我们创建实际的共享定义。 这些设置指定了我们要共享的文件,以及允许谁访问这些文件。
我们想要两股; 一个叫Allusers
,和另一个叫Restricted
。 让我们来定义Allusers
首先共享。 对于此共享,用户可以浏览,编写,并在读取文件/samba/allusers
目录。 将此配置添加到文件中:
#============ Share Defenitions ==================
[Allusers]
path = /samba/allusers
browsable = yes
writable = yes
guest ok = yes
read only = no
force user = nobody
在[Allusers]
块指示下面的设置仅适用于Allusers
份额。 它还定义了用户将看到的共享的名称。 该path
设置指定我们要对我们的内联网共享的文件夹的文件目录。 设置browsable
并writable
来yes
为用户提供了该文件夹中浏览,以及读取和写入文件的权限。
我们希望所有用户都能访问此共享,即使他们在服务器上没有用户帐户。 请记住,在global
部分,我们指定的map to guest
的设置,这意味着没有一个帐户或有效的登录凭据仍然可以访问文件的用户作为嘉宾分享。 我们允许那些客人通过设置访问此共享guest ok
为yes
,然后我们强制用户承担的身份, nobody
用force user = nobody
。
在nobody
的用户群是任何Linux系统的一个已知的默认用户组。 我们可以在设置所需的权限/samba/allusers
文件夹到nobody
的用户。 然后,使用Samba,我们允许多个客人使用该身份。 这样我们可以轻松地管理访客用户访问我们的系统。
有关更多信息nobody
的用户,请访问Ubuntu的维基 ,并在StackExchange这个答案 。
现在,让我们创建Restricted
文件共享,应该只由成员访问smbrestricted
组:
[Restricted]
path = /samba/restricted
valid users = @smbrestricted
guest ok = no
writable = yes
browsable = yes
我们再次通过指定我们要共享并授予浏览和写权限的目录,就像我们在开始allusers
份额。 然后,我们设置valid users = @smbrestricted
,它告诉Samba只允许该组的成员smbrestricted
访问共享。 我们很快就会创建此群组。
那请问它的smb.conf
文件。 您的文件应类似于以下示例:
[global]
workgroup = WORKGROUP
server string = Samba Server %v
netbios name = ubuntu
security = user
map to guest = bad user
dns proxy = no
interfaces = 10.8.0.1/8
bind interfaces only = yes
## Logging
log level = 2
log file = /var/log/samba.log.%m
max log size = 50
debug timestamp = yes
#============ Share Defenitions ==================
[Allusers]
path = /samba/allusers
browsable = yes
writable = yes
guest ok = yes
read only = no
force user = nobody
[Restricted]
path = /samba/restricted
valid users = @smbrestricted
guest ok = no
writable = yes
browsable = yes
有了Samba的配置,我们可以创建smbrestricted
组,创造我们的第一个用户。
第2步 - 配置对Samba共享的访问
要允许访问我们的共享,我们必须创建一个用户帐户,并对我们计划共享的文件夹应用相应的权限。
首先,创建smbrestricted
用下面的命令组:
sudo addgroup smbrestriced
现在,在服务器上创建一个用户帐户,并将其添加到smbrestricted
组。 我们将创建一个帐户client1
,它匹配的前提教程中创建VPN连接的名称:
sudo useradd client1 -G smbrestricted
最后,我们需要分配一个Samba密码client1
。 通过我们设置的配置,Samba使用自己的凭据验证系统,它与普通Linux系统的验证系统分离。 这是很好的,因为我们可以创建用户可以访问文件共享与Samba,而不给他们访问登录到机器本身。
创建的Samba密码client1
使用以下命令的用户:
sudo smbpasswd -a client1
注意 :如果您的系统上的用户,你希望也能够访问Samba共享,你需要为这些用户在Samba密码为好,因为在登录系统是单独使用此配置。
接下来,我们设置了我们想要共享的目录的权限。 首先,我们设置了权限allusers
目录:
sudo chmod -R 766 /samba/allusers
sudo chown -R nobody:nogroup /samba/allusers
这将授予该目录全部权限的所有者和只读赠款和写入权限组和其他人一样,我们然后更改共享目录的所有者和组nobody:nogroup
与chown
命令。
然而,有一个小问题,改变了所有者和组nobody:nogroup
。 在chmod -R 766
命令只授予读取和写入权限当前和新的文件/文件中的目录/samba/allusers
目录,不管是谁创造了这些文件或目录。 这意味着,只要你尝试创建位于中的一个文件夹内的新文件/samba/allusers
目录,你会得到一个权限不足错误。 请记住,当你在工作中Allusers
分享你正在承担的身份nobody
,而且nobody
有非常有限的权限。
为了克服这个问题,我们利用访问控制列表 ,或访问控制列表。 ACL规则允许我们自动将用户和/或组的权限分配给新创建的文件和目录。
设置了相应的规则/samba/allusers
使用以下命令文件夹:
sudo setfacl -dm g:nogroup:rw /samba/allusers/
sudo setfacl -dm u:nobody:rw /samba/allusers/
命令setfacl -dm
表明我们正在定义新的权限规则,目录或文件,而且在未来的这些权限应该应用到新创建的对象也是如此。 g:nogroup:rw
和u:nobody:rw
是新ACL规则授予读取和写入权限nobody
组的用户和成员nogroup
。
您可以了解更多关于的ACL Ubuntu的维基 。
这将照顾客人共享。 现在,我们可以设置权限restricted
目录:
sudo chmod -R 770 /samba/restricted
sudo chown root:smbrestricted /samba/restricted
这一次,我们完全阻止访问这个目录除了业主和成员smbrestricted
组chmod 770
。因为我们使用的身份验证的用户帐户,我们并不需要设置ACL规则,因为权限此共享文件夹中的正常工作。
现在我们已经配置了共享,请重新启动Samba服务器,以便它使用新的配置文件:
sudo service smbd restart
我们现在可以连接到Samba服务器以上传或下载文件。
第3步 - 从客户端连接到Samba服务器
我们的内部网的目标是在安全的环境中访问和共享文件,就像我们连接到主网络。 当客户端连接到Samba时,它会在该客户端的文件资源管理器中安装共享目录。 让我们来测试一下。
从Windows连接
要从Windows进行连接,请打开Windows资源管理器。 在导航栏中,键入Samba服务器地址\\10.8.0.1
,然后按Enter
键。
Windows可能需要一段时间才能连接。 当连接成功时,您将看到内部网上托管的共享文件夹:
请注意,一个新的网络安装点的快速访问工具栏上的网络选项卡下创建。 挂载点的名称是10.8.0.1
,同样作为VPN的IP。
您访问Allusers
分享,就像任何其他的文件夹,因为不需要凭证。 只需双击文件夹即可查看其内容:
要访问Restricted
股,命名的文件夹双击Restricted
。 Windows安全弹出窗口中会出现该网络凭据才能访问。
键入您创建的用户的用户名和密码,并且可以选中复选框以记住您的凭据。 然后单击确定以连接。
连接后,您可以创建新的文件或文件夹,甚至将文件夹拖到您的服务器上传。
从Ubuntu连接
从Ubuntu的连接,打开文件浏览器,然后选择连接到左侧边栏服务器选项。 这将打开一个新的屏幕,我们可以输入服务器地址。
进入smb://10.8.0.1/
并点击右下角的连接按钮。 根据您的连接速度,电脑可能需要几秒钟才能连接到服务器。 连接后,将显示一个显示服务器上所有共享目录的屏幕:
要访问Allusers
共享,只需双击该文件夹。 将出现一个登录屏幕,要求输入用户名和密码。 该Allusers
份额不需要任何用户名和密码,所以你应该为连接为选项选择匿名 。 点击连接 ,它就会打开共享目录为您服务。
请注意,在访问这些共享目录之后,这些共享目录是如何装载到文件系统中的。 该Allusers
份额被安装为网络驱动器旁边的其他本地驱动器。
驱动器将保持安装,直到系统重新启动或驱动器被卸载。
要访问Restricted
的份额,您需要登录一个有效的用户名和密码。 在双击Restricted
股
并且登录屏幕将再次出现。 在Connect As选项中选择注册用户 ,并在用户名和密码填写
在相应的字段,留下域的选择,因为它是。 然后点击连接 ,你将能够访问共享文件。
从Mac进行连接
为了从您的Mac,打开Finder连接,选择Go菜单,然后选择连接到服务器...然后使用smb://10.8.0.1/
的服务器地址 :
其余的连接过程与从Linux或Windows连接的过程完全相同。 系统将提示您输入用户名和密码,并可以查看并连接到可用的共享。
这照顾我们的文件服务器。 现在让我们看看如何配置Apache以在同一台服务器上内部和外部托管网站。
第4步 - 配置对Apache虚拟主机的访问
在本教程之前,您创建了两个虚拟主机,我们将配置它们以在我们的服务器上使用。 第一个主机, example.com
,将是广大公众开放。 这可能是您的域的主要公共网站。 第二主机, intranet. example.com
,将只由连接到内联网客户端访问。
要限制访问intranet. example.com
,我们将编辑该虚拟主机的配置文件。 打开文件/etc/apache2/sites-available/intranet. example.com .conf
sudo nano /etc/apache2/sites-available/intranet.example.com.conf
然后,更改VirtualHost
从这个声明:
<VirtualHost *:80>
对此:
<VirtualHost 10.8.0.1:80>
本次变动前,Apache将服务于请求internal. example.com
所有网络接口。 此更改后,它仅在我们的Intranet接口上提供请求。 这与我们用于Samba的配置类似。
保存文件并重新启动Apache服务:
sudo systemctl restart apache2
我们还需要允许通过UFW的连接,以使Apache能够正常工作。 如果您尚未执行此操作,请执行此命令以允许通过防火墙的流量通过Apache:
sudo ufw allow http
如果您计划允许HTTPS流量,请立即允许,或稍后再配置:
sudo ufw allow https
现在让我们配置域名,这样我们就可以更轻松地访问我们的资源。
第5步 - 配置域名
在此步骤中,我们将配置我们的域名以重定向Intranet的流量,同时还为可公开访问的网站提供服务。 在开始本文之前,您应该已经将您的域名指向DigitalOcean的Nameservers。
注意 :如果你有自己的域名服务器,您需要在您的DNS提供商的控制面板来进行这些设置来代替。
登录到您的DigitalOcean帐户,单击顶部栏上的网络选项卡上。 然后,您将看到如下所示的屏幕:
到域在第一个框中添加到您的帐户DigitalOcean,输入你的域名添加域标题下。 在您的Intranet服务器的公网IP的第二个框类型,然后单击创建录制按钮。
然后,您的新域名将域副标题下出现在第二张照片。 现在点击更多靠近您要使用,然后选择查看域的域。
这将打开该特定域的设置页面。
我们需要为此域添加三条记录。 一个用于Intranet,另外两个用于确保正确解析我们的公共网站的请求。
首先,为内部网创建记录。
- 点击橙色的“A”下选择记录类型框。
- 进入
intranet
到输入名称字段。 - 对于IP地址,输入专用IP地址为您的服务器,这应该是
10.8.0.1
。
接下来,我们需要一个记录,将非Intranet流量引导到正确的位置。 创建另一个'A'的记录,名称设置为@
,并设置IP您的服务器的公网IP。
最后,创建了CNAME记录www
。 在右上角点击CNAME选项卡上,名称设置为www
,并输入你的域名( example.com
的主机名:
完成后,您的域记录应如下图所示:
在intranet
A记录的请求定向到intranet. example.com
只有当它从VPN服务器发起。 这意味着,只有连接到VPN客户端将能够访问托管于Web内容intranet. example.com
。 第二个“A”记录和CNAME将无法访问内部网的流量记录到公开的网站。
注意 :这可能需要长达72个小时,这些DNS更改传播。
转到您的浏览器,访问http://intranet. example.com
无需连接到VPN。 您应该会看到浏览器尝试加载网页只返回一个错误。 现在, 连接到VPN和重新加载网页。 您现在可以访问该网页,因为DNS条目将解析。
现在我们已经彻底配置和测试了我们的内部网,让我们看看我们如何管理对这个新创建的网络的访问。
第6步 - 管理对Intranet的访问
本教程的最后一步将介绍如何管理对内部网及其共享文件的访问。 首先,我们将讨论如何撤销VPN访问的客户端证书。 然后我们将看看如何从smbrestricted组中删除用户。 最后,我们将审查添加其他用户并获得他们需要的访问权限。
撤消VPN接入
要撤消对VPN的访问,我们将撤销客户端的证书。 这允许我们拒绝访问我们的Intranet,而不为任何其他客户端或服务器生成新证书。
首先,我们需要在VPN服务器的配置文件中添加一行,使我们能够撤销任何客户端证书,而不更改原始的CA证书或服务器证书。 这使得访问控制
更容易,因为您现在可以轻松地撤消单个证书,而不中断任何其他客户端连接。
打开VPN配置文件:
sudo nano /etc/openvpn/server.conf
在文件末尾添加以下代码行:
crl-verify crl.pem
这告诉VPN服务器查找文件crl.pem
,这是一个证书撤销列表。 它将包含不再允许访问我们的VPN的所有证书的列表。
保存并关闭配置文件,但不要重新启动服务器; 我们需要创建crl.pem
文件我们的配置所期待的。
要创建这个文件,切换到~/openvpn-ca/
服务器上的目录:
cd ~/openvpn-ca/
让我们假设我们需要撤销CLIENT1的证书,因为他们不再为我们的组织工作。 为此,请运行以下命令:
source vars
./revoke-full client1
您将看到以下输出:
OutputUsing configuration from /home/intranetexapmle/openvpn-ca/openssl-1.0.0.cnf
Revoking Certificate 02.
Data Base Updated
Using configuration from /home/intranetexample/openvpn-ca/openssl-1.0.0.cnf
client1.crt: C = US, ST = NY, L = New-York City,
error 23 at 0 depth lookup:certificate revoked
输出的最后一行应始终指示误差23,该错误仅确认了证书已被撤消。
这也创造crl.pem
在~/openvpn-ca/keys/
目录下。 要确认证书被吊销,打开keys/index.txt
文件,任何文本编辑器,或显示其内容与cat
:
cat keys/index.txt
在我们撤销其证书的客户端旁边会有一个“R”:
OutputV 260904153313Z 01 unknown /C=US/ST=NY/L=New York/O=DigitalOcean/OU=Community/CN=server/name=server/emailAddress=me@example.com
R 260904172539Z 160915150543Z 02 unknown /C=US/ST=NY/L=New York/O=DigitalOcean/OU=Community/CN=client1/name=server/emailAddress=me@example.com
现在,复制crl.pem
文件到/etc/openvpn/
目录,这就是我们告诉OpenVPN服务器来查找文件:
sudo cp keys/crl.pem /etc/openvpn/
然后重新启动OpenVPN服务器以使证书撤销选项生效。
sudo systemctl restart openvpn@server
OpenVPN服务器会查询crl.pem
文件每一个新的连接到服务器的时间。 每次吊销客户端的证书时,你替换旧crl.pem
用新的文件。 您不需要重新启动服务器。
重要的是要注意,一旦VPN证书被撤销,它不能在将来被重新使用。 如果我们希望客户端的VPN证书已被撤销,则需要新的证书才能重新连接到网络。
阻止用户访问受限共享。
我们创建了一个共享目录只有在smbrestricted组中的用户访问。 要拒绝已在该组中的用户的访问权限,我们会从该组中删除该用户。 例如,删除客户端1,请使用以下命令:
sudo deluser client1 -G smbrestricted
您将看到以下输出:
OutputRemoving user `client1' from group `smbrestricted' ...
Done.
如果你不能确定用户是否已经包含在该组中,还是要仔细检查用户是否已被删除,您可以使用members
命令:
sudo apt-get install members
members smbrestricted
组中的任何用户都将显示在屏幕上。
将新用户添加到Intranet
内网的每一个新用户都需要自己的VPN证书,所以你遵循的步骤如何设置在Ubuntu 16.04的OpenVPN服务器的先决条件为每个用户教程。 例如,要创建一个用户调用client2
,你会做以下几点:
首先,构建密钥:
cd ~/openvpn-ca
./build-key client2
然后生成客户端配置:
cd ~/client-configs
./make_config.sh client2
然后,在本地机器上,下载客户端配置:
sftp sammy@openvpn_server_ip:client-configs/files/client2.ovpn ~/
授予的限制性文件的新用户访问,跟着你用于本教程的Samba部分客户端1相同的步骤:
- 创建用户和它们添加到
smbrestricted
基。 - 创建与用户Samba密码
smbpassword
。 - 测试连接。
然后对每个需要添加的用户重复此过程。
结论
您已经使用OpenVPN,Samba和Apache成功创建并保护了您自己的私有内部网。 您有一个内部网站和两个文件共享。
你去哪里取决于你将使用你的内联网。 由于大多数服务器应用程序使用网页来显示信息,因此可以使用虚拟主机配置来限制对该页面的访问,就像我们在本教程中所做的那样。 您可以通过托管来自内部社交网络,Wiki或电子邮件服务的多种服务来扩展您的网络,仅举几例。 而且,即使共享文件更有效地管理,你可以下载并安装Samba的Web管理工具 。 使用您在此处学到的内容,您应该能够配置任何数量的服务以与新的Intranet一起使用。