首先介绍一下我为什么使用open***组建一个局域网。我的公司是给全国各分支机构制作软件的,因为各分支机构都是不能被外界访问到的,所以我们运维人员无法连接到分支机构的服务器进行维护及更新,但是分支机构是可以访问Internet的,所以由于以上原因我就在公司的IDC机房申请了一台服务器,搭建了一台open***让各分支机构通过×××的形势连接到我的××× server。
实验环境:在文章中我的环境都是通过虚拟机完成的,所以列出的所有IP地址都是虚拟机IP,可以按照要求自己修改。下面列出各台机器的IP地址
open*** server : 192.168.137.151
分支机构A : 192.168.137.161 安装了mysql
分支机构B : 192.168.137.171 安装了VNC server
运维人员 : 192.168.137.1 SSH工具、mysql工具、VNC客户端
实验目标:运维可以SSH连接各个分支机构也可以用mysql工具连接分支机构的数据库,最后是能通过VNC连接到分支机构的服务器桌面。但是各个分支机构是不允许互通的。
进入正题之前先说一些废话,看完前面的肯定有人觉得我瞎折腾,既然SSH都通了干嘛还要VNC看桌面呢?想让各个分支机构不互通在open***.conf文件里面写注释掉client-to-client不就好了吗?让分支机构开这么一个VNC的话会不会有什么安全问题?
这些问题我也考虑过开始的时候我也是认为SSH到就好了,mysql工具可以通过SSH隧道连接,没必要看桌面的呀!在open***服务器端如果禁止客户端互访的话我也不能访问分支机构了,必须通过其他方法禁止分支机构之间互访。开VNC的话太不安全了。结果领导告诉我公司的软件需要web访问一下看看页面有没有问题,所以需要vnc,安全的话可以后期再考虑。
证书生成是有时间标签和有效期的所以在安装*** server前先校准时间
yum -y install lzo openssl rpm -ivh epel-release-6-8.noarch.rpm rpm -ivh pkcs11-helper-1.11-3.el6.x86_64.rpm rpm -ivh open***-2.3.10-1.el6.x86_64.rpm rpm -ivh easy-rsa-2.2.2-1.el6.noarch.rpm
yum安装open*** 所需的依赖包,rpm安装的前两个也是依赖包,后面分别是open***主程序和生成证书程序
cp -r /usr/share/easy-rsa /etc/open*** cd /etc/open***/easy-rsa/2.0/ vim ./vars source ./vars ./clean-all
编辑vars文件修改变量生成证书使用(参考下图)。读取变量文件。因为第一次生成证书,所以在生成前清空一下所有证书文件,保证没有其他证书
./build-ca ./build-key-server server ./build-key clientA ./build-dh cd keys/ open*** --genkey --secret ta.key
生成各类证书,clientA是分支机构A的证
mkdir /etc/open***/conf/ cp ca.crt server.crt server.key dh2048.pem ta.key /etc/open***/conf/ touch /etc/open***open***.conf touch /etc/open***/easy-rsa/2.0/keys/crl.pem mkdir ccd mkdir -p /var/log/open*** vim /etc/open***/open***.conf
创建一些配置文件中需要用到的目录并开始编辑配置文件
port 44449 #开放的端口 proto tcp #使用的tcp协议 dev tap0 #使用tap设备(网络上open***的tap和tun设备的区别讲解很多,大家可以自己搜,tap工作在二层 #可以满足我的要求) server 10.123.0.0 255.255.255.0 #地址池是10.123.0.0/24 push "route 10.123.0.0 255.255.255.0" push "route 10.123.1.0 255.255.255.0" #给客户端推送两条路由让这两个网段来*** server这里 ca /etc/open***/conf/ca.crt cert /etc/open***/conf/server.crt key /etc/open***/conf/server.key dh /etc/open***/conf/dh2048.pem #证书位置,验证使用 #crl-verify /etc/open***/easy-rsa/2.0/keys/crl.pem #吊销证书的文件,因为没有被吊销的所以先注释掉 ifconfig-pool-persist ipp.txt #IP分配列表文件,文件内会说明哪个证书被分配了哪个IP route 10.123.0.0 255.255.255.0 route 10.123.1.0 255.255.255.0 #让*** server自己知道tap设备后面有这两个IP段 push "dhcp-option DNS 10.123.0.1" #推送一条DNS client-config-dir ccd #客户端单独配置文件,文件名必须和证书名相同(Common Name) client-to-client #客户端到客户端相通,为了运维和分支机构能互访 #client-cert-not-required #加用户名和密码验证用的,我没给证书设置密码所以注释了 socket-flags TCP_NODELAY #不知道干嘛的 tls-auth /etc/open***/conf/ta.key 0 # ta证书的位置 persist-key #通过keepalive检测超时后,重新启动×××,不重新读取keys,保留第一次使用的keys comp-lzo #压缩方式,保证server和client一致 user open*** group open*** #定义运行open***的用户 status /var/log/open***/open***-stat.log log /var/log/open***/open***.log log-append /var/log/open***/open***-app.log #定义日志位置 verb 3 #debug等级
完成以上工作就可以给日志文件内写好的各个文件分配权限,以便open***用户可以写入和调用
chmod 777 -R /var/log/open*** chmod 777 /etc/open***/easy-rsa/2.0/keys/crl.pem chmod 777 /etc/open***/ipp.txt chmod 777 -R /etc/open***/ccd/
以上是需要增加权限的文件,其实不需要给777权限,只要修改文件夹归属给open***用户就好了
将/etc/sysctl.conf文件内的net.ipv4.ip_forward = 0改为net.ipv4.ip_forward = 1,这是开启转发功能
iptables -I INPUT 1 -p tcp -m state --state NEW -m tcp --dport 44449 -j ACCEPT iptables -I INPUT 2 -i tap0 -j ACCEPT iptables -I FORWARD 1 -i tap0 -o eth1 -j ACCEPT iptables -I FORWARD 2 -i eth1 -o tap0 -j ACCEPT iptables -I FORWARD 3 -i tap0 -o tap0 -j ACCEPT
开启44449端口允许***拨入,放行tap设备流量进入,转发各端口数据,最后一句的意思是为了让拨入的分支机构和管理员能互通
service iptables save service iptables restart chkconfig open*** on service open*** restart
保存itpables设置,重启iptables,重启open***
route add -net 10.123.1.0/24 dev tap0
我在/etc/rc.local这个文件里面添加了如上语句,为了是让本机知道1段的网络也走向tap设备。这样完成以上设置以后0段和1段的网络就可以互通了。
PS:网上很多方法说永久添加路由的方式是编辑/etc/sysconfig/static-routes 这个文件,在里面添加any net 10.123.1.0/24 dev tap0这个语句就可以实现永久路由了~但是我尝试以后重启后还是没有,只能重启一次网卡才能出现,比较麻烦,后期在研究吧!
yum -y install lzo openssl rpm -ivh epel-release-6-8.noarch.rpm rpm -ivh pkcs11-helper-1.11-3.el6.x86_64.rpm rpm -ivh open***-2.3.10-1.el6.x86_64.rpm
没别的还是上面一套依赖的安装
vim /etc/open***/clientA.o***
编辑客户端的***配置文件,文件名我就按照证书名定的
client #表明客户端 proto tcp #使用tcp协议 dev tap #启用tap设备 remote 192.168.137.151 44449 #服务器IP和开启的端口 ca /etc/open***/ca.crt cert /etc/open***/clientA.crt key /etc/open***/clientA.key tls-auth /etc/open***/ta.key 1 以上是证书位置,写绝对路径 nobind #不绑定 persist-key #保留第一次使用的keys resolv-retry infinite #始终重新解析Server的IP地址 comp-lzo #压缩方式,保证server和client一致 ns-cert-type server #一个扩展选项,防欺骗的 verb 3 #debug等级
将服务端的证书文件放到客户端的/etc/open***/目录下就可以了,四个证书文件分别是clientA.crt clientA.key ca.crt ta.key
open*** /etc/open***/clientA.o***
好啦完成以上操作***就应该已经拨通了,看看打印出的日志是不是已经获得了10.123.0.0/24的某一个IP。下面还需要对服务端和客户端做一些安全管理方面的规划:
这样设置以后分支机构和管理员都在一个网段里面不好管理完全没有体现1网段的作用
在ccd文件夹里面创建和客户端证书名相同的文件,在里面添加固定的IP即可,操作如下
vim /etc/open***/ccd/clientA ifconfig-push 10.123.1.11 10.123.1.11
这样设置以后clientA这个分支机构就会只获得10.123.1.11这个IP地址了,分支机构都是1网段的而且是固定IP方便管理,管理员是0网段的方便区分。
分支机构在一个网段还是可以互通的,随便SSH到其他分支机构还是不安全
我们可以通过iptables禁止所有的10.123.1.0/24这个网段的流量进入,因为管理员和***网关都是0网段的,而且也可以写hosts.deny文件配置1网段不能连接
vnc方面的解决方法如下
分支机构当vnc的服务端,在分支机构的服务器上面配置iptables只允许0网段访问vnc的连接端口,不允许其他IP访问vnc的端口
PS:我的水平就像名字,第一次写博文,有错误希望指出,我会及时修改。
转载于:https://blog.51cto.com/ls40905250/1768587