部署open***和控制訪問權限

部署open***和控制訪問權限vim


說明:
windows

    客戶端採用密鑰登錄***服務端
安全


安裝部署:
bash

    軟件下載地址:https://swupdate.open***.org/community/releases/ 服務器

    一、安裝依賴包:app

yum install -y openssl openssl-devel lzo lzo-devel pam pam-devel automake pkgconfig

    二、安裝open***ide

cd /usr/local/src/
tar -zxf open***-2.3.8.tar.gz
cd open***-2.3.8
./configure --prefix=/opt/open***
make && make install

cp -a sample/sample-config-files/server.conf /opt/open***/         #最好放在/opt/open***/下
cp -a distro/rpm/open***.init.d.rhel /etc/init.d/open***           #建立啓動腳本
ln -s /opt/open***/sbin/open*** /usr/sbin/open***                  #啓動腳本中會用到,也能夠不執行此命令,直接在啓動腳本中修改

vi /etc/init.d/open***                        
#在85行,修改成:work=/opt/open***

cd /opt/open***/ && mv server.conf server.conf.bak
vi server.conf                                #修改配置文件; ';'爲註釋
port 1194
proto udp
dev tun
ca keys/ca.crt
cert keys/server.crt
key keys/server.key
dh keys/dh2048.pem
tls-auth keys/ta.key 0
server 10.8.0.0 255.255.255.0            #默認就好
ifconfig-pool-persist ipp.txt            #正在鏈接的用戶會被寫到這個文件裏
push "route 10.10.0.0 255.255.0.0"       #推送路由
push "dhcp-option DNS 8.8.8.8"
keepalive 10 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status      logs/open***-status.log
log         logs/open***.log
log-append  logs/open***.log
verb 3
mkdir logs                          #建立日誌目錄
mkdir keys                          #建立key目錄

    三、安裝easy-rsa,用來生成證書和密鑰:ui

cd /usr/local/src/
tar -zxf easy-rsa-2.2.0_master.tar.gz
cp -a easy-rsa-2.2.0_master/easy-rsa /opt/open***/
	
cd /opt/open***/easy-rsa/2.0/
mv vars vars.bak
vi vars                             #修改配置文件
export EASY_RSA="`pwd`"
export OPENSSL="openssl"
export PKCS11TOOL="pkcs11-tool"
export GREP="grep"
export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`
export KEY_DIR="$EASY_RSA/keys"
echo NOTE: If you run ./clean-all, I will be doing a rm -rf on $KEY_DIR
export PKCS11_MODULE_PATH="dummy"
export PKCS11_PIN="dummy"
export KEY_SIZE=2048                    #修改成2048
export CA_EXPIRE=3650
export KEY_EXPIRE=3650
export KEY_COUNTRY="CN"                 #如下根據本身狀況修改
export KEY_PROVINCE="ShangHai"
export KEY_CITY="ShangHai"
export KEY_ORG="jinzhuan"
export KEY_EMAIL="shencj@jinzhuanch.com"
export KEY_CN=jinzhuan
export KEY_NAME=jinzhuan
export KEY_OU=jinzhuan
ln -s openssl-1.0.0.cnf openssl.cnf
source  vars                        #全局變量
##生成證書,如下命令所有一直回車
./clean-all                         #清空全部證書(keys目錄下)
./build-ca                          #生成服務器ca證書
./build-key-server server           #生成服務端證書
./build-dh                          #生成DH驗證文件(dh2048.pem)
open*** --genkey --secret ta.key    #下降DDoS風險
./build-key client                  #生成客戶端證書(隨便命名)

    四、啓動服務this

cd /opt/open***/easy-rsa/2.0/keys/
cp -a ca.crt ta.key server.crt dh2048.pem server.key /opt/open***/keys                 #拷貝證書到/opt/open***/keys目錄下
	
/etc/init.d/open*** start
chkconfig open*** on

    五、設置外網訪問:spa

vim /etc/sysctl.conf               #將net.ipv4.ip_forward = 0 改成 1
sysctl -p
	
配置nat表將***網段IP轉發到server內網:(很重要)
    iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE              #注意接口(eth0)是內網的接口,其它選項不要修改
		
iptables -A INPUT -p TCP --dport 1194 -j ACCEPT              #開啓防火牆1194端口
service iptables restart                  #POSTROUTING須要保存並重啓服務才能生效
chkconfig iptables on

    六、windows客戶端配置:

下載:open***-2.2.2-install.exe
下載地址:http://vdisk.weibo.com/s/z5vWLo13rACAe
點擊安裝,一直next,默認目錄安裝便可
通常會安裝到 C:/Program Files/Open×××/ 目錄下
建立client.o***文件:
client
dev tun
proto udp
remote 192.168.1.106 1194       #***服務端ip
ca ca.crt
cert client.crt
key client.key
tls-auth ta.key 1
comp-lzo
persist-key
persist-tun
status open***-status.log
將client.o***文件放到C:/Program Files/Open×××/config目錄下
	
從***服務端下載ca.crt,client.crt,client.key,ta.key證書
將ca.crt,client.crt,client.key,ta.key證書放到C:/Program Files/Open×××/config目錄下
	
點擊桌面open***圖標便可

    七、吊銷客戶端證書:

cd /opt/open***/easy-rsa/2.0/
source vars                 #全局變量
./revoke-full client        #會在keys目錄下生成一個crl.pem文件
	
cp keys/crl.pem /opt/open***/keys/        #每次吊銷一個客戶端證書,都要從新拷貝覆蓋crl.pem文件
vim /opt/open***/server.conf              #在最後添加:crl-verify keys/crl.pem
/etc/init.d/open***  restart




    八、控制訪問權限:

        說明:有多個客戶端用戶,client用戶能夠訪問全部的內網服務器,client1用戶只能訪問10.10.1.0網段的服務器

        參考:http://backreference.org/2010/06/18/open***s-built-in-packet-filter/

        方案:採用minimal_pf.so模塊和包過濾

        

        編譯minimal_pf.so模塊:

cd /usr/local/src/open***-2.3.8
vi minimal_pf.c            #建立minimal_pf.c文件
/* minimal_pf.c 
 * ultra-minimal Open××× plugin to enable internal packet filter */
#include <stdio.h>
#include <stdlib.h>

#include "include/open***-plugin.h"

/* dummy context, as we need no state */
struct plugin_context {
  int dummy;
};

/* Initialization function */
OPEN×××_EXPORT open***_plugin_handle_t open***_plugin_open_v1 (unsigned int *type_mask, const char *argv[], const char *envp[]) {
  struct plugin_context *context;
  /* Allocate our context */
  context = (struct plugin_context *) calloc (1, sizeof (struct plugin_context));

  /* Which callbacks to intercept. */
  *type_mask = OPEN×××_PLUGIN_MASK (OPEN×××_PLUGIN_ENABLE_PF);

  return (open***_plugin_handle_t) context;
}

/* Worker function */
OPEN×××_EXPORT int open***_plugin_func_v2 (open***_plugin_handle_t handle,
            const int type,
            const char *argv[],
            const char *envp[],
            void *per_client_context,
            struct open***_plugin_string_list **return_list) {
  
  if (type == OPEN×××_PLUGIN_ENABLE_PF) {
    return OPEN×××_PLUGIN_FUNC_SUCCESS;
  } else {
    /* should not happen! */
    return OPEN×××_PLUGIN_FUNC_ERROR;
  }
}

/* Cleanup function */
OPEN×××_EXPORT void open***_plugin_close_v1 (open***_plugin_handle_t handle) {
  struct plugin_context *context = (struct plugin_context *) handle;
  free (context);
}

        編譯步驟:

INCLUDE="-I/usr/local/src/open***-2.3.8/"
CC_FLAGS="-O2 -Wall -g"
NAME=minimal_pf
gcc $CC_FLAGS -fPIC -c $INCLUDE $NAME.c && gcc $CC_FLAGS -fPIC -shared -Wl,-soname,$NAME.so -o $NAME.so $NAME.o -lc
cp -a minimal_pf.so  /opt/open***/lib/open***/plugins/

        建立包過濾文件:

mkdir /opt/open***/ccd
cd /opt/open***/ccd

vi client1.pf             #客戶client1,只對10.10.1.0網段有權限
[CLIENTS ACCEPT]
[SUBNETS DROP]
+10.10.1.0/24
[END]

vi client.pf              #客戶client,對全部內網服務器都有權限
[CLIENTS ACCEPT]
[SUBNETS ACCEPT]
[END]

            包過濾文件補充:

包過濾文件格式:
[CLIENTS DROP|ACCEPT]
{+|-}common_name1
{+|-}common_name2
 . . .
[SUBNETS DROP|ACCEPT]
{+|-}subnet1
{+|-}subnet2
 . . .
[END]

過濾文件語法:
CLIENTS部分用於定義common name;
SUBNETS部分用於定義IP地址、IP網段;
DROP|ACCEPT用於設置默認規則,就是沒有明確指明的common name,那麼他們將會使用;
{+|-}用於設置是否容許,若是是「+」,那麼表示容許,若是是「-」則表示不容許;
[END]表示策略文件的結束

cat client10.pf
[CLIENTS ACCEPT]
[SUBNETS ACCEPT]
-192.168.9.7
+192.168.9.0/24
[END]

        建立客戶端鏈接腳本:

cd /opt/open***

vi client-connect.sh
#!/bin/sh

# /etc/open***/client-connect.sh: sample client-connect script using pf rule files

# rules template file
template="/opt/open***/ccd/${common_name}.pf"

# create the file Open××× wants with the rules for this client
if [ -f "$template" ] && [ ! -z "$pf_file" ]; then
  cp -- "$template" "$pf_file"
else
  # if anything is not as expected, fail
  exit 1
fi

chmod +x client-connect.sh                #加執行權限

        修改***配置文件:

vim /opt/open***/server.conf 
port 1194
proto udp
dev tun
ca keys/ca.crt
cert keys/server.crt
key keys/server.key
dh keys/dh2048.pem
tls-auth keys/ta.key 0
plugin /opt/open***/lib/open***/plugins/minimal_pf.so                     #添加
client-connect /opt/open***/client-connect.sh                             #添加
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 10.10.0.0 255.255.0.0"
push "dhcp-option DNS 8.8.8.8"
client-config-dir /opt/open***/ccd                                        #添加
client-to-client                                                          #添加
keepalive 10 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status      logs/open***-status.log
log         logs/open***.log
log-append  logs/open***.log
verb 3
script-security 3                                                        #添加,腳本安全級別2及以上


##補充:
[root@localhost ~]# open***  --help  | grep -A 5 script-security
--script-security level: Where level can be:
                  0 -- strictly no calling of external programs
                  1 -- (default) only call built-ins such as ifconfig
                  2 -- allow calling of built-ins and scripts
                  3 -- allow password to be passed to scripts via env
--shaper n      : Restrict output to peer to n bytes per second.

        重啓服務:

/etc/init.d/open*** restart

    九、添加***客戶端帳號:

cd /opt/open***/easy-rsa/2.0/
source vars
./build-key client2
	
cd /opt/open***/ccd/
vim client2.pf
	
/etc/init.d/open***  restart                  #必須重啓服務
相關文章
相關標籤/搜索