2017-02-20 7 views
0

TLS 암호화 통신을 허용하도록 OpenSIPS 서버를 구성하려고합니다.TLS 구성 OpenSIPS

처음에는 OpenSIPS에서 제공하는 빌드 인 인증서를 사용하고 있습니다. 지금까지 내가해온 것은 ENABLE_TCP & ENABLE_TLS가 활성화 된 새로운 주거용 스크립트 (opensips_residential.cfg)를 생성하는 것입니다. 가 지금은 후속 라인을 opensips.cfg, 두 개의 구성 파일이 있습니다

# 
# OpenSIPS residential configuration script 
#  by OpenSIPS Solutions <[email protected]> 
# 
# This script was generated via "make menuconfig", from 
# the "Residential" scenario. 
# You can enable/disable more features/functionalities by 
# re-generating the scenario with different options.# 
# 
# Please refer to the Core CookBook at: 
#  http://www.opensips.org/Resources/DocsCookbooks 
# for a explanation of possible statements, functions and parameters. 
# 


####### Global Parameters ######### 

log_level=3 
log_stderror=no 
log_facility=LOG_LOCAL0 

children=4 

/* uncomment the following lines to enable debugging */ 
#debug_mode=yes 

/* uncomment the next line to enable the auto temporary blacklisting of 
    not available destinations (default disabled) */ 
#disable_dns_blacklist=no 

/* uncomment the next line to enable IPv6 lookup after IPv4 dns 
    lookup failures (default disabled) */ 
#dns_try_ipv6=yes 

/* comment the next line to enable the auto discovery of local aliases 
    based on revers DNS on IPs */ 
auto_aliases=no 


listen=udp:192.168.1.57:5060 # CUSTOMIZE ME 

listen=tcp:192.168.1.57:5060 # CUSTOMIZE ME 
listen=tls:192.168.1.57:5061 # CUSTOMIZE ME 

####### Modules Section ######## 

#set module path 
mpath="/usr/local/lib/opensips/modules/" 

#### SIGNALING module 
loadmodule "signaling.so" 

#### StateLess module 
loadmodule "sl.so" 

#### Transaction Module 
loadmodule "tm.so" 
modparam("tm", "fr_timeout", 5) 
modparam("tm", "fr_inv_timeout", 30) 
modparam("tm", "restart_fr_on_each_reply", 0) 
modparam("tm", "onreply_avp_mode", 1) 

#### Record Route Module 
loadmodule "rr.so" 
/* do not append from tag to the RR (no need for this script) */ 
modparam("rr", "append_fromtag", 0) 

#### MAX ForWarD module 
loadmodule "maxfwd.so" 

#### SIP MSG OPerationS module 
loadmodule "sipmsgops.so" 

#### FIFO Management Interface 
loadmodule "mi_fifo.so" 
modparam("mi_fifo", "fifo_name", "/tmp/opensips_fifo") 
modparam("mi_fifo", "fifo_mode", 0666) 


#### URI module 
loadmodule "uri.so" 
modparam("uri", "use_uri_table", 0) 











#### USeR LOCation module 
loadmodule "usrloc.so" 
modparam("usrloc", "nat_bflag", "NAT") 
modparam("usrloc", "db_mode", 0) 

#### REGISTRAR module 
loadmodule "registrar.so" 
modparam("registrar", "tcp_persistent_flag", "TCP_PERSISTENT") 

/* uncomment the next line not to allow more than 10 contacts per AOR */ 
#modparam("registrar", "max_contacts", 10) 

#### ACCounting module 
loadmodule "acc.so" 
/* what special events should be accounted ? */ 
modparam("acc", "early_media", 0) 
modparam("acc", "report_cancels", 0) 
/* by default we do not adjust the direct of the sequential requests. 
    if you enable this parameter, be sure the enable "append_fromtag" 
    in "rr" module */ 
modparam("acc", "detect_direction", 0) 




















loadmodule "proto_udp.so" 

loadmodule "proto_tcp.so" 
loadmodule "proto_tls.so" 
modparam("proto_tls","verify_cert", "1") 
modparam("proto_tls","require_cert", "0") 
modparam("proto_tls","tls_method", "TLSv1") 
modparam("proto_tls","certificate", "/usr/local/etc/opensips/tls/user/user-cert.pem") 
modparam("proto_tls","private_key", "/usr/local/etc/opensips/tls/user/user-privkey.pem") 
modparam("proto_tls","ca_list", "/usr/local/etc/opensips/tls/user/user-calist.pem") 



####### Routing LogiC######## 

# main request routing logic 

route{ 


    if (!mf_process_maxfwd_header("10")) { 
     sl_send_reply("483","Too Many Hops"); 
     exit; 
    } 

    if (has_totag()) { 
     # sequential request withing a dialog should 
     # take the path determined by record-routing 
     if (loose_route()) { 

      if (is_method("BYE")) { 
       # do accounting even if the transaction fails 
       do_accounting("log","failed"); 
      } else if (is_method("INVITE")) { 
       # even if in most of the cases is useless, do RR for 
       # re-INVITEs alos, as some buggy clients do change route set 
       # during the dialog. 
       record_route(); 
      } 



      # route it out to whatever destination was set by loose_route() 
      # in $du (destination URI). 
      route(relay); 
     } else { 

      if (is_method("ACK")) { 
       if (t_check_trans()) { 
        # non loose-route, but stateful ACK; must be an ACK after 
        # a 487 or e.g. 404 from upstream server 
        t_relay(); 
        exit; 
       } else { 
        # ACK without matching transaction -> 
        # ignore and discard 
        exit; 
       } 
      } 
      sl_send_reply("404","Not here"); 
     } 
     exit; 
    } 

    # CANCEL processing 
    if (is_method("CANCEL")) 
    { 
     if (t_check_trans()) 
      t_relay(); 
     exit; 
    } 

    t_check_trans(); 

    if (!(is_method("REGISTER") )) { 

     if (from_uri==myself) 

     { 

     } else { 
      # if caller is not local, then called number must be local 

      if (!uri==myself) { 
       send_reply("403","Rely forbidden"); 
       exit; 
      } 
     } 

    } 

    # preloaded route checking 
    if (loose_route()) { 
     xlog("L_ERR", 
     "Attempt to route with preloaded Route's [$fu/$tu/$ru/$ci]"); 
     if (!is_method("ACK")) 
      sl_send_reply("403","Preload Route denied"); 
     exit; 
    } 

    # record routing 
    if (!is_method("REGISTER|MESSAGE")) 
     record_route(); 

    # account only INVITEs 
    if (is_method("INVITE")) { 

     do_accounting("log"); 
    } 


    if (!uri==myself) { 
     append_hf("P-hint: outbound\r\n"); 

     # if you have some interdomain connections via TLS 
     ## CUSTOMIZE IF NEEDED 
     ##if ($rd=="tls_domain1.net" 
     ## || $rd=="tls_domain2.net" 
     ##) { 
     ## force_send_socket(tls:127.0.0.1:5061); # CUSTOMIZE 
     ##} 

     route(relay); 
    } 

    # requests for my domain 

    if (is_method("PUBLISH|SUBSCRIBE")) 
    { 
     sl_send_reply("503", "Service Unavailable"); 
     exit; 
    } 

    if (is_method("REGISTER")) 
    { 


     if (proto==TCP || proto==TLS || 0) setflag(TCP_PERSISTENT); 



     if (!save("location")) 
      sl_reply_error(); 

     exit; 
    } 

    if ($rU==NULL) { 
     # request with no Username in RURI 
     sl_send_reply("484","Address Incomplete"); 
     exit; 
    } 







    # do lookup with method filtering 
    if (!lookup("location","m")) { 


     t_newtran(); 
     t_reply("404", "Not Found"); 
     exit; 
    } 



    # when routing via usrloc, log the missed calls also 
    do_accounting("log","missed"); 
    route(relay); 
} 


route[relay] { 
    # for INVITEs enable some additional helper routes 
    if (is_method("INVITE")) { 



     t_on_branch("per_branch_ops"); 
     t_on_reply("handle_nat"); 
     t_on_failure("missed_call"); 
    } 



    if (!t_relay()) { 
     send_reply("500","Internal Error"); 
    }; 
    exit; 
} 




branch_route[per_branch_ops] { 
    xlog("new branch at $ru\n"); 
} 


onreply_route[handle_nat] { 

    xlog("incoming reply\n"); 
} 


failure_route[missed_call] { 
    if (t_was_cancelled()) { 
     exit; 
    } 

    # uncomment the following lines if you want to block client 
    # redirect based on 3xx replies. 
    ##if (t_check_status("3[0-9][0-9]")) { 
    ##t_reply("404","Not found"); 
    ## exit; 
    ##} 


} 

나도 몰라 :

# 
# $Id$ 
# 
# OpenSIPS residential configuration script 
#  by OpenSIPS Solutions <[email protected]> 
# 
# This script was generated via "make menuconfig", from 
# the "Residential" scenario. 
# You can enable/disable more features/functionalities by 
# re-generating the scenario with different options.# 
# 
# Please refer to the Core CookBook at: 
#  http://www.opensips.org/Resources/DocsCookbooks 
# for a explanation of possible statements, functions and parameters. 
# 


####### Global Parameters ######### 

log_level=3 
log_stderror=no 
log_facility=LOG_LOCAL0 

children=4 

/* uncomment the following line to enable debugging */ 
#debug_mode=yes 

/* uncomment the next line to enable the auto temporary blacklisting of 
    not available destinations (default disabled) */ 
#disable_dns_blacklist=no 

/* uncomment the next line to enable IPv6 lookup after IPv4 dns 
    lookup failures (default disabled) */ 
#dns_try_ipv6=yes 

/* comment the next line to enable the auto discovery of local aliases 
    based on revers DNS on IPs */ 
auto_aliases=no 


listen=udp:192.168.1.57:5060 # CUSTOMIZE ME 

####### Modules Section ######## 

#set module path 
mpath="/usr/local//lib64/opensips/modules/" 

#### SIGNALING module 
loadmodule "signaling.so" 

#### StateLess module 
loadmodule "sl.so" 

#### Transaction Module 
loadmodule "tm.so" 
modparam("tm", "fr_timeout", 5) 
modparam("tm", "fr_inv_timeout", 30) 
modparam("tm", "restart_fr_on_each_reply", 0) 
modparam("tm", "onreply_avp_mode", 1) 

#### Record Route Module 
loadmodule "rr.so" 
/* do not append from tag to the RR (no need for this script) */ 
modparam("rr", "append_fromtag", 0) 

#### MAX ForWarD module 
loadmodule "maxfwd.so" 

#### SIP MSG OPerationS module 
loadmodule "sipmsgops.so" 

#### FIFO Management Interface 
loadmodule "mi_fifo.so" 
modparam("mi_fifo", "fifo_name", "/tmp/opensips_fifo") 
modparam("mi_fifo", "fifo_mode", 0666) 


#### URI module 
loadmodule "uri.so" 
modparam("uri", "use_uri_table", 0) 

#### USeR LOCation module 
loadmodule "usrloc.so" 
modparam("usrloc", "nat_bflag", "NAT") 
modparam("usrloc", "db_mode", 0) 

#### REGISTRAR module 
loadmodule "registrar.so" 

/* uncomment the next line not to allow more than 10 contacts per AOR */ 
#modparam("registrar", "max_contacts", 10) 

#### ACCounting module 
loadmodule "acc.so" 
/* what special events should be accounted ? */ 
modparam("acc", "early_media", 0) 
modparam("acc", "report_cancels", 0) 
/* by default we do not adjust the direct of the sequential requests. 
    if you enable this parameter, be sure the enable "append_fromtag" 
    in "rr" module */ 
modparam("acc", "detect_direction", 0) 


#### UDP protocol 
loadmodule "proto_udp.so" 

####### Routing LogiC######## 

# main request routing logic 

route{ 
    if (!mf_process_maxfwd_header("10")) { 
     sl_send_reply("483","Too Many Hops"); 
     exit; 
    } 

    if (has_totag()) { 
     # sequential requests within a dialog should 
     # take the path determined by record-routing 
     if (loose_route()) { 

      if (is_method("BYE")) { 
       # do accunting, even if the transaction fails 
       do_accounting("log","failed"); 
      } else if (is_method("INVITE")) { 
       # even if in most of the cases is useless, do RR for 
       # re-INVITEs alos, as some buggy clients do change route set 
       # during the dialog. 
       record_route(); 
      } 

      # route it out to whatever destination was set by loose_route() 
      # in $du (destination URI). 
      route(relay); 
     } else { 

      if (is_method("ACK")) { 
       if (t_check_trans()) { 
        # non loose-route, but stateful ACK; must be an ACK after 
        # a 487 or e.g. 404 from upstream server 
        t_relay(); 
        exit; 
       } else { 
        # ACK without matching transaction -> 
        # ignore and discard 
        exit; 
       } 
      } 
      sl_send_reply("404","Not here"); 
     } 
     exit; 
    } 

    # CANCEL processing 
    if (is_method("CANCEL")) 
    { 
     if (t_check_trans()) 
      t_relay(); 
     exit; 
    } 

    t_check_trans(); 

    if (!(is_method("REGISTER") )) { 
     if (from_uri==myself) 
     { 
     } else { 
      # if caller is not local, then called number must be local 
      if (!uri==myself) { 
       send_reply("403","Rely forbidden"); 
       exit; 
      } 
     } 
    } 

    # preloaded route checking 
    if (loose_route()) { 
     xlog("L_ERR", 
     "Attempt to route with preloaded Route's [$fu/$tu/$ru/$ci]"); 
     if (!is_method("ACK")) 
      sl_send_reply("403","Preload Route denied"); 
     exit; 
    } 

    # record routing 
    if (!is_method("REGISTER|MESSAGE")) 
     record_route(); 

    # account only INVITEs 
    if (is_method("INVITE")) { 
     do_accounting("log"); 
    } 

    if (!uri==myself) { 
     append_hf("P-hint: outbound\r\n"); 
     route(relay); 
    } 

    # requests for my domain 
    if (is_method("PUBLISH|SUBSCRIBE")) 
    { 
     sl_send_reply("503", "Service Unavailable"); 
     exit; 
    } 

    if (is_method("REGISTER")) 
    { 
     if (!save("location")) 
      sl_reply_error(); 

     exit; 
    } 

    if ($rU==NULL) { 
     # request with no Username in RURI 
     sl_send_reply("484","Address Incomplete"); 
     exit; 
    } 

    # do lookup with method filtering 
    if (!lookup("location","m")) { 
     t_newtran(); 
     t_reply("404", "Not Found"); 
     exit; 
    } 

    # when routing via usrloc, log the missed calls also 
    do_accounting("log","missed"); 
    route(relay); 
} 


route[relay] { 
    # for INVITEs enable some additional helper routes 
    if (is_method("INVITE")) { 
     t_on_branch("per_branch_ops"); 
     t_on_reply("handle_nat"); 
     t_on_failure("missed_call"); 
    } 

    if (!t_relay()) { 
     send_reply("500","Internal Error"); 
    }; 
    exit; 
} 




branch_route[per_branch_ops] { 
    xlog("new branch at $ru\n"); 
} 


onreply_route[handle_nat] { 

    xlog("incoming reply\n"); 
} 


failure_route[missed_call] { 
    if (t_was_cancelled()) { 
     exit; 
    } 

    # uncomment the following lines if you want to block client 
    # redirect based on 3xx replies. 
    ##if (t_check_status("3[0-9][0-9]")) { 
    ##t_reply("404","Not found"); 
    ## exit; 
    ##} 

} 

그리고 다른 구성 파일은 내가 menuconfig를 도구로 생성 된 하나입니다 openips.cfg 파일을 opensips_residential.cfg로 대체해야하는 경우. 나는 그것을 시도하고 명령 'opensipsctl start'로 서버를 시작하려고 할 때 여러 가지 오류가 발생하면 필요한 경우 다른 메시지로 제공 할 수 있습니다.

답변

0

opensipsctl start를 사용하는 경우, /usr/local/opensips/etc/opensipsctlrc에서 # STARTOPTIONS= 변수에 대한보고,로 정의 :

STARTOPTIONS="-f /path/to/opensips_residential.cfg" 

초기화 스크립트의 설정 파일 경로가 /etc/opensips/opensips.cfg이되는 점에 유의하고 편집해야합니다, 패키지의 OpenSIPS를 설치/변경 사항을 적용하려면이 파일을 바꾸십시오.

0

certs 경로가 올바르게 설정되었는지 확인하고 자체 서명 된 인증서를 사용하지 않을 것입니다. letsencrypt로 가서 cert를 얻고 opensips.cfg 파일에 경로를 지정하십시오. 기존 구성을 새로 생성 된 구성으로 바꿉니다.