etc: set ctl "binrpc" to new /var/run/kamailio default value
[sip-router] / etc / kamailio-basic.cfg
1 #!KAMAILIO
2 #
3 # Kamailio (OpenSER) SIP Server v4.3 - default configuration script
4 #     - web: http://www.kamailio.org
5 #     - git: http://sip-router.org
6 #
7 # Direct your questions about this file to: <sr-users@lists.sip-router.org>
8 #
9 # Refer to the Core CookBook at http://www.kamailio.org/wiki/
10 # for an explanation of possible statements, functions and parameters.
11 #
12 # Several features can be enabled using '#!define WITH_FEATURE' directives:
13 #
14 # *** To run in debug mode: 
15 #     - define WITH_DEBUG
16 #
17 # *** To enable mysql: 
18 #     - define WITH_MYSQL
19 #
20 # *** To enable authentication execute:
21 #     - enable mysql
22 #     - define WITH_AUTH
23 #     - add users using 'kamctl'
24 #
25 # *** To enable IP authentication execute:
26 #     - enable mysql
27 #     - enable authentication
28 #     - define WITH_IPAUTH
29 #     - add IP addresses with group id '1' to 'address' table
30 #
31 # *** To enable persistent user location execute:
32 #     - enable mysql
33 #     - define WITH_USRLOCDB
34 #
35 # *** To enable nat traversal execute:
36 #     - define WITH_NAT
37 #     - install RTPProxy: http://www.rtpproxy.org
38 #     - start RTPProxy:
39 #        rtpproxy -l _your_public_ip_ -s udp:localhost:7722
40 #     - option for NAT SIP OPTIONS keepalives: WITH_NATSIPPING
41 #
42 # *** To enable TLS support execute:
43 #     - adjust CFGDIR/tls.cfg as needed
44 #     - define WITH_TLS
45 #
46 # *** To enhance accounting execute:
47 #     - enable mysql
48 #     - define WITH_ACCDB
49 #     - add following columns to database
50 #!ifdef ACCDB_COMMENT
51   ALTER TABLE acc ADD COLUMN src_user VARCHAR(64) NOT NULL DEFAULT '';
52   ALTER TABLE acc ADD COLUMN src_domain VARCHAR(128) NOT NULL DEFAULT '';
53   ALTER TABLE acc ADD COLUMN src_ip varchar(64) NOT NULL default '';
54   ALTER TABLE acc ADD COLUMN dst_ouser VARCHAR(64) NOT NULL DEFAULT '';
55   ALTER TABLE acc ADD COLUMN dst_user VARCHAR(64) NOT NULL DEFAULT '';
56   ALTER TABLE acc ADD COLUMN dst_domain VARCHAR(128) NOT NULL DEFAULT '';
57   ALTER TABLE missed_calls ADD COLUMN src_user VARCHAR(64) NOT NULL DEFAULT '';
58   ALTER TABLE missed_calls ADD COLUMN src_domain VARCHAR(128) NOT NULL DEFAULT '';
59   ALTER TABLE missed_calls ADD COLUMN src_ip varchar(64) NOT NULL default '';
60   ALTER TABLE missed_calls ADD COLUMN dst_ouser VARCHAR(64) NOT NULL DEFAULT '';
61   ALTER TABLE missed_calls ADD COLUMN dst_user VARCHAR(64) NOT NULL DEFAULT '';
62   ALTER TABLE missed_calls ADD COLUMN dst_domain VARCHAR(128) NOT NULL DEFAULT '';
63 #!endif
64
65 ####### Include Local Config If Exists #########
66 import_file "kamailio-local.cfg"
67
68 ####### Defined Values #########
69
70 # *** Value defines - IDs used later in config
71 #!ifdef WITH_MYSQL
72 # - database URL - used to connect to database server by modules such
73 #       as: auth_db, acc, usrloc, a.s.o.
74 #!ifndef DBURL
75 #!define DBURL "mysql://kamailio:kamailiorw@localhost/kamailio"
76 #!endif
77 #!endif
78 #!define MULTIDOMAIN 0
79
80 # - flags
81 #   FLT_ - per transaction (message) flags
82 #       FLB_ - per branch flags
83 #!define FLT_ACC 1
84 #!define FLT_ACCMISSED 2
85 #!define FLT_ACCFAILED 3
86 #!define FLT_NATS 5
87
88 #!define FLB_NATB 6
89 #!define FLB_NATSIPPING 7
90
91 ####### Global Parameters #########
92
93 ### LOG Levels: 3=DBG, 2=INFO, 1=NOTICE, 0=WARN, -1=ERR
94 #!ifdef WITH_DEBUG
95 debug=4
96 log_stderror=yes
97 #!else
98 debug=2
99 log_stderror=no
100 #!endif
101
102 memdbg=5
103 memlog=5
104
105 log_facility=LOG_LOCAL0
106
107 fork=yes
108 children=4
109
110 /* uncomment the next line to disable TCP (default on) */
111 #disable_tcp=yes
112
113 /* uncomment the next line to disable the auto discovery of local aliases
114    based on reverse DNS on IPs (default on) */
115 #auto_aliases=no
116
117 /* add local domain aliases */
118 #alias="sip.mydomain.com"
119
120 /* uncomment and configure the following line if you want Kamailio to 
121    bind on a specific interface/port/proto (default bind on all available) */
122 #listen=udp:10.0.0.10:5060
123
124 /* port to listen to
125  * - can be specified more than once if needed to listen on many ports */
126 port=5060
127
128 #!ifdef WITH_TLS
129 enable_tls=yes
130 #!endif
131
132 # life time of TCP connection when there is no traffic
133 # - a bit higher than registration expires to cope with UA behind NAT
134 tcp_connection_lifetime=3605
135
136 ####### Modules Section ########
137
138 # set paths to location of modules (to sources or installation folders)
139 #!ifdef WITH_SRCPATH
140 mpath="modules"
141 #!else
142 mpath="/usr/local/lib/kamailio/modules/"
143 #!endif
144
145 #!ifdef WITH_MYSQL
146 loadmodule "db_mysql.so"
147 #!endif
148
149 loadmodule "mi_fifo.so"
150 loadmodule "kex.so"
151 loadmodule "corex.so"
152 loadmodule "tm.so"
153 loadmodule "tmx.so"
154 loadmodule "sl.so"
155 loadmodule "rr.so"
156 loadmodule "pv.so"
157 loadmodule "maxfwd.so"
158 loadmodule "usrloc.so"
159 loadmodule "registrar.so"
160 loadmodule "textops.so"
161 loadmodule "siputils.so"
162 loadmodule "xlog.so"
163 loadmodule "sanity.so"
164 loadmodule "ctl.so"
165 loadmodule "cfg_rpc.so"
166 loadmodule "mi_rpc.so"
167 loadmodule "acc.so"
168
169 #!ifdef WITH_AUTH
170 loadmodule "auth.so"
171 loadmodule "auth_db.so"
172 #!ifdef WITH_IPAUTH
173 loadmodule "permissions.so"
174 #!endif
175 #!endif
176
177 #!ifdef WITH_NAT
178 loadmodule "nathelper.so"
179 loadmodule "rtpproxy.so"
180 #!endif
181
182 #!ifdef WITH_TLS
183 loadmodule "tls.so"
184 #!endif
185
186 #!ifdef WITH_DEBUG
187 loadmodule "debugger.so"
188 #!endif
189
190 # ----------------- setting module-specific parameters ---------------
191
192
193 # ----- mi_fifo params -----
194 modparam("mi_fifo", "fifo_name", "/tmp/kamailio_fifo")
195
196 # ----- ctl params -----
197 modparam("ctl", "binrpc", "unix:/var/run/kamailio/kamailio_ctl")
198
199 # ----- tm params -----
200 # auto-discard branches from previous serial forking leg
201 modparam("tm", "failure_reply_mode", 3)
202 # default retransmission timeout: 30sec
203 modparam("tm", "fr_timer", 30000)
204 # default invite retransmission timeout after 1xx: 120sec
205 modparam("tm", "fr_inv_timer", 120000)
206
207
208 # ----- rr params -----
209 # add value to ;lr param to cope with most of the UAs
210 modparam("rr", "enable_full_lr", 1)
211 # do not append from tag to the RR (no need for this script)
212 modparam("rr", "append_fromtag", 0)
213
214
215 # ----- registrar params -----
216 modparam("registrar", "method_filtering", 1)
217 /* uncomment the next line to disable parallel forking via location */
218 # modparam("registrar", "append_branches", 0)
219 /* uncomment the next line not to allow more than 10 contacts per AOR */
220 #modparam("registrar", "max_contacts", 10)
221 # max value for expires of registrations
222 modparam("registrar", "max_expires", 3600)
223 # set it to 1 to enable GRUU
224 modparam("registrar", "gruu_enabled", 0)
225
226
227 # ----- acc params -----
228 /* what special events should be accounted ? */
229 modparam("acc", "early_media", 0)
230 modparam("acc", "report_ack", 0)
231 modparam("acc", "report_cancels", 0)
232 /* by default ww do not adjust the direct of the sequential requests.
233    if you enable this parameter, be sure the enable "append_fromtag"
234    in "rr" module */
235 modparam("acc", "detect_direction", 0)
236 /* account triggers (flags) */
237 modparam("acc", "log_flag", FLT_ACC)
238 modparam("acc", "log_missed_flag", FLT_ACCMISSED)
239 modparam("acc", "log_extra", 
240         "src_user=$fU;src_domain=$fd;src_ip=$si;"
241         "dst_ouser=$tU;dst_user=$rU;dst_domain=$rd")
242 modparam("acc", "failed_transaction_flag", FLT_ACCFAILED)
243 /* enhanced DB accounting */
244 #!ifdef WITH_ACCDB
245 modparam("acc", "db_flag", FLT_ACC)
246 modparam("acc", "db_missed_flag", FLT_ACCMISSED)
247 modparam("acc", "db_url", DBURL)
248 modparam("acc", "db_extra",
249         "src_user=$fU;src_domain=$fd;src_ip=$si;"
250         "dst_ouser=$tU;dst_user=$rU;dst_domain=$rd")
251 #!endif
252
253
254 # ----- usrloc params -----
255 /* enable DB persistency for location entries */
256 #!ifdef WITH_USRLOCDB
257 modparam("usrloc", "db_url", DBURL)
258 modparam("usrloc", "db_mode", 2)
259 modparam("usrloc", "use_domain", MULTIDOMAIN)
260 #!endif
261
262
263 # ----- auth_db params -----
264 #!ifdef WITH_AUTH
265 modparam("auth_db", "db_url", DBURL)
266 modparam("auth_db", "calculate_ha1", yes)
267 modparam("auth_db", "password_column", "password")
268 modparam("auth_db", "load_credentials", "")
269 modparam("auth_db", "use_domain", MULTIDOMAIN)
270
271 # ----- permissions params -----
272 #!ifdef WITH_IPAUTH
273 modparam("permissions", "db_url", DBURL)
274 modparam("permissions", "db_mode", 1)
275 #!endif
276
277 #!endif
278
279
280 #!ifdef WITH_NAT
281 # ----- rtpproxy params -----
282 modparam("rtpproxy", "rtpproxy_sock", "udp:127.0.0.1:7722")
283
284 # ----- nathelper params -----
285 modparam("nathelper", "natping_interval", 30)
286 modparam("nathelper", "ping_nated_only", 1)
287 modparam("nathelper", "sipping_bflag", FLB_NATSIPPING)
288 modparam("nathelper", "sipping_from", "sip:pinger@kamailio.org")
289
290 # params needed for NAT traversal in other modules
291 modparam("nathelper|registrar", "received_avp", "$avp(RECEIVED)")
292 modparam("usrloc", "nat_bflag", FLB_NATB)
293 #!endif
294
295
296 #!ifdef WITH_TLS
297 # ----- tls params -----
298 modparam("tls", "config", "/usr/local/etc/kamailio/tls.cfg")
299 #!endif
300
301 #!ifdef WITH_DEBUG
302 # ----- debugger params -----
303 modparam("debugger", "cfgtrace", 1)
304 #!endif
305
306 ####### Routing Logic ########
307
308
309 # Main SIP request routing logic
310 # - processing of any incoming SIP request starts with this route
311 # - note: this is the same as route { ... }
312 request_route {
313
314         # per request initial checks
315         route(REQINIT);
316
317         # NAT detection
318         route(NATDETECT);
319
320         # CANCEL processing
321         if (is_method("CANCEL")) {
322                 if (t_check_trans()) {
323                         route(RELAY);
324                 }
325                 exit;
326         }
327
328         # handle requests within SIP dialogs
329         route(WITHINDLG);
330
331         ### only initial requests (no To tag)
332
333         # handle retransmissions
334         if(t_precheck_trans()) {
335                 t_check_trans();
336                 exit;
337         }
338         t_check_trans();
339
340         # authentication
341         route(AUTH);
342
343         # record routing for dialog forming requests (in case they are routed)
344         # - remove preloaded route headers
345         remove_hf("Route");
346         if (is_method("INVITE|SUBSCRIBE"))
347                 record_route();
348
349         # account only INVITEs
350         if (is_method("INVITE")) {
351                 setflag(FLT_ACC); # do accounting
352         }
353
354         # dispatch requests to foreign domains
355         route(SIPOUT);
356
357         ### requests for my local domains
358
359         # handle registrations
360         route(REGISTRAR);
361
362         if ($rU==$null) {
363                 # request with no Username in RURI
364                 sl_send_reply("484","Address Incomplete");
365                 exit;
366         }
367
368         # user location service
369         route(LOCATION);
370 }
371
372
373 route[RELAY] {
374         # enable additional event routes for forwarded requests
375         # - serial forking, RTP relaying handling, a.s.o.
376         if (is_method("INVITE|BYE|SUBSCRIBE|UPDATE")) {
377                 if(!t_is_set("branch_route")) t_on_branch("MANAGE_BRANCH");
378         }
379         if (is_method("INVITE|SUBSCRIBE|UPDATE")) {
380                 if(!t_is_set("onreply_route")) t_on_reply("MANAGE_REPLY");
381         }
382         if (is_method("INVITE")) {
383                 if(!t_is_set("failure_route")) t_on_failure("MANAGE_FAILURE");
384         }
385
386         if (!t_relay()) {
387                 sl_reply_error();
388         }
389         exit;
390 }
391
392 # Per SIP request initial checks
393 route[REQINIT] {
394 #!ifdef WITH_ANTIFLOOD
395         # flood dection from same IP and traffic ban for a while
396         # be sure you exclude checking trusted peers, such as pstn gateways
397         # - local host excluded (e.g., loop to self)
398         if(src_ip!=myself) {
399                 if($sht(ipban=>$si)!=$null) {
400                         # ip is already blocked
401                         xdbg("request from blocked IP - $rm from $fu (IP:$si:$sp)\n");
402                         exit;
403                 }
404                 if (!pike_check_req()) {
405                         xlog("L_ALERT","ALERT: pike blocking $rm from $fu (IP:$si:$sp)\n");
406                         $sht(ipban=>$si) = 1;
407                         exit;
408                 }
409         }
410         if($ua =~ "friendly-scanner") {
411                 sl_send_reply("200", "OK");
412                 exit;
413         }
414 #!endif
415
416         if (!mf_process_maxfwd_header("10")) {
417                 sl_send_reply("483","Too Many Hops");
418                 exit;
419         }
420
421         if(is_method("OPTIONS") && uri==myself && $rU==$null) {
422                 sl_send_reply("200","Keepalive");
423                 exit;
424         }
425
426         if(!sanity_check("1511", "7")) {
427                 xlog("Malformed SIP message from $si:$sp\n");
428                 exit;
429         }
430 }
431
432 # Handle requests within SIP dialogs
433 route[WITHINDLG] {
434         if (!has_totag()) return;
435
436         # sequential request withing a dialog should
437         # take the path determined by record-routing
438         if (loose_route()) {
439                 route(DLGURI);
440                 if (is_method("BYE")) {
441                         setflag(FLT_ACC); # do accounting ...
442                         setflag(FLT_ACCFAILED); # ... even if the transaction fails
443                 }
444                 else if ( is_method("ACK") ) {
445                         # ACK is forwarded statelessy
446                         route(NATMANAGE);
447                 }
448                 else if ( is_method("NOTIFY") ) {
449                         # Add Record-Route for in-dialog NOTIFY as per RFC 6665.
450                         record_route();
451                 }
452                 route(RELAY);
453                 exit;
454         }
455         if ( is_method("ACK") ) {
456                 if ( t_check_trans() ) {
457                         # no loose-route, but stateful ACK;
458                         # must be an ACK after a 487
459                         # or e.g. 404 from upstream server
460                         route(RELAY);
461                         exit;
462                 } else {
463                         # ACK without matching transaction ... ignore and discard
464                         exit;
465                 }
466         }
467         sl_send_reply("404", "Not here");
468         exit;
469 }
470
471 # Handle SIP registrations
472 route[REGISTRAR] {
473         if (!is_method("REGISTER")) return;
474         if(isflagset(FLT_NATS)) {
475                 setbflag(FLB_NATB);
476 #!ifdef WITH_NATSIPPING
477                 # do SIP NAT pinging
478                 setbflag(FLB_NATSIPPING);
479 #!endif
480         }
481         if (!save("location"))
482                 sl_reply_error();
483
484         exit;
485 }
486
487 # User location service
488 route[LOCATION] {
489         if (!lookup("location")) {
490                 $var(rc) = $rc;
491                 t_newtran();
492                 switch ($var(rc)) {
493                         case -1:
494                         case -3:
495                                 send_reply("404", "Not Found");
496                                 exit;
497                         case -2:
498                                 send_reply("405", "Method Not Allowed");
499                                 exit;
500                 }
501         }
502
503         # when routing via usrloc, log the missed calls also
504         if (is_method("INVITE")) {
505                 setflag(FLT_ACCMISSED);
506         }
507
508         route(RELAY);
509         exit;
510 }
511
512
513 # IP authorization and user uthentication
514 route[AUTH] {
515 #!ifdef WITH_AUTH
516
517 #!ifdef WITH_IPAUTH
518         if((!is_method("REGISTER")) && allow_source_address()) {
519                 # source IP allowed
520                 return;
521         }
522 #!endif
523
524         if (is_method("REGISTER") || from_uri==myself) {
525                 # authenticate requests
526                 if (!auth_check("$fd", "subscriber", "1")) {
527                         auth_challenge("$fd", "0");
528                         exit;
529                 }
530                 # user authenticated - remove auth header
531                 if(!is_method("REGISTER|PUBLISH"))
532                         consume_credentials();
533         }
534         # if caller is not local subscriber, then check if it calls
535         # a local destination, otherwise deny, not an open relay here
536         if (from_uri!=myself && uri!=myself) {
537                 sl_send_reply("403","Not relaying");
538                 exit;
539         }
540
541 #!endif
542         return;
543 }
544
545 # Caller NAT detection
546 route[NATDETECT] {
547 #!ifdef WITH_NAT
548         force_rport();
549         if (nat_uac_test("19")) {
550                 if (is_method("REGISTER")) {
551                         fix_nated_register();
552                 } else {
553                         if(is_first_hop())
554                                 set_contact_alias();
555                 }
556                 setflag(FLT_NATS);
557         }
558 #!endif
559         return;
560 }
561
562 # RTPProxy control
563 route[NATMANAGE] {
564 #!ifdef WITH_NAT
565         if (is_request()) {
566                 if(has_totag()) {
567                         if(check_route_param("nat=yes")) {
568                                 setbflag(FLB_NATB);
569                         }
570                 }
571         }
572         if (!(isflagset(FLT_NATS) || isbflagset(FLB_NATB)))
573                 return;
574
575         rtpproxy_manage("co");
576
577         if (is_request()) {
578                 if (!has_totag()) {
579                         if(t_is_branch_route()) {
580                                 add_rr_param(";nat=yes");
581                         }
582                 }
583         }
584         if (is_reply()) {
585                 if(isbflagset(FLB_NATB)) {
586                         set_contact_alias();
587                 }
588         }
589 #!endif
590         return;
591 }
592
593 # URI update for dialog requests
594 route[DLGURI] {
595 #!ifdef WITH_NAT
596         if(!isdsturiset()) {
597                 handle_ruri_alias();
598         }
599 #!endif
600         return;
601 }
602
603 # Routing to foreign domains
604 route[SIPOUT] {
605         if (uri==myself) return;
606
607         append_hf("P-hint: outbound\r\n");
608         route(RELAY);
609         exit;
610 }
611
612 # Manage outgoing branches
613 branch_route[MANAGE_BRANCH] {
614         xdbg("new branch [$T_branch_idx] to $ru\n");
615         route(NATMANAGE);
616 }
617
618 # Manage incoming replies
619 onreply_route[MANAGE_REPLY] {
620         xdbg("incoming reply\n");
621         if(status=~"[12][0-9][0-9]")
622                 route(NATMANAGE);
623 }
624
625 # Manage failure routing cases
626 failure_route[MANAGE_FAILURE] {
627         route(NATMANAGE);
628
629         if (t_is_canceled()) {
630                 exit;
631         }
632 }