etc: removed mi modules from config files
[sip-router] / etc / kamailio-basic.cfg
1 #!KAMAILIO
2 #
3 # Kamailio (OpenSER) SIP Server v5.0 - 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 "jsonrpc.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 "acc.so"
167
168 #!ifdef WITH_AUTH
169 loadmodule "auth.so"
170 loadmodule "auth_db.so"
171 #!ifdef WITH_IPAUTH
172 loadmodule "permissions.so"
173 #!endif
174 #!endif
175
176 #!ifdef WITH_NAT
177 loadmodule "nathelper.so"
178 loadmodule "rtpproxy.so"
179 #!endif
180
181 #!ifdef WITH_TLS
182 loadmodule "tls.so"
183 #!endif
184
185 #!ifdef WITH_DEBUG
186 loadmodule "debugger.so"
187 #!endif
188
189 # ----------------- setting module-specific parameters ---------------
190
191
192 # ----- jsonrpcs params -----
193 modparam("jsonrpcs", "pretty_format", 1)
194 /* set the path to RPC fifo control file */
195 # modparam("jsonrpcs", "fifo_name", "/var/run/kamailio/kamailio_rpc.fifo")
196 /* set the path to RPC unix socket control file */
197 # modparam("jsonrpcs", "dgram_socket", "/var/run/kamailio/kamailio_rpc.sock")
198
199 # ----- ctl params -----
200 #modparam("ctl", "binrpc", "unix:/var/run/kamailio/kamailio_ctl")
201
202 # ----- tm params -----
203 # auto-discard branches from previous serial forking leg
204 modparam("tm", "failure_reply_mode", 3)
205 # default retransmission timeout: 30sec
206 modparam("tm", "fr_timer", 30000)
207 # default invite retransmission timeout after 1xx: 120sec
208 modparam("tm", "fr_inv_timer", 120000)
209
210
211 # ----- rr params -----
212 # add value to ;lr param to cope with most of the UAs
213 modparam("rr", "enable_full_lr", 1)
214 # do not append from tag to the RR (no need for this script)
215 modparam("rr", "append_fromtag", 0)
216
217
218 # ----- registrar params -----
219 modparam("registrar", "method_filtering", 1)
220 /* uncomment the next line to disable parallel forking via location */
221 # modparam("registrar", "append_branches", 0)
222 /* uncomment the next line not to allow more than 10 contacts per AOR */
223 #modparam("registrar", "max_contacts", 10)
224 # max value for expires of registrations
225 modparam("registrar", "max_expires", 3600)
226 # set it to 1 to enable GRUU
227 modparam("registrar", "gruu_enabled", 0)
228
229
230 # ----- acc params -----
231 /* what special events should be accounted ? */
232 modparam("acc", "early_media", 0)
233 modparam("acc", "report_ack", 0)
234 modparam("acc", "report_cancels", 0)
235 /* by default we do not adjust the direct of the sequential requests.
236  * if you enable this parameter, be sure the enable "append_fromtag"
237  * in "rr" module */
238 modparam("acc", "detect_direction", 0)
239 /* account triggers (flags) */
240 modparam("acc", "log_flag", FLT_ACC)
241 modparam("acc", "log_missed_flag", FLT_ACCMISSED)
242 modparam("acc", "log_extra",
243         "src_user=$fU;src_domain=$fd;src_ip=$si;"
244         "dst_ouser=$tU;dst_user=$rU;dst_domain=$rd")
245 modparam("acc", "failed_transaction_flag", FLT_ACCFAILED)
246 /* enhanced DB accounting */
247 #!ifdef WITH_ACCDB
248 modparam("acc", "db_flag", FLT_ACC)
249 modparam("acc", "db_missed_flag", FLT_ACCMISSED)
250 modparam("acc", "db_url", DBURL)
251 modparam("acc", "db_extra",
252         "src_user=$fU;src_domain=$fd;src_ip=$si;"
253         "dst_ouser=$tU;dst_user=$rU;dst_domain=$rd")
254 #!endif
255
256
257 # ----- usrloc params -----
258 /* enable DB persistency for location entries */
259 #!ifdef WITH_USRLOCDB
260 modparam("usrloc", "db_url", DBURL)
261 modparam("usrloc", "db_mode", 2)
262 modparam("usrloc", "use_domain", MULTIDOMAIN)
263 #!endif
264
265
266 # ----- auth_db params -----
267 #!ifdef WITH_AUTH
268 modparam("auth_db", "db_url", DBURL)
269 modparam("auth_db", "calculate_ha1", yes)
270 modparam("auth_db", "password_column", "password")
271 modparam("auth_db", "load_credentials", "")
272 modparam("auth_db", "use_domain", MULTIDOMAIN)
273
274 # ----- permissions params -----
275 #!ifdef WITH_IPAUTH
276 modparam("permissions", "db_url", DBURL)
277 modparam("permissions", "db_mode", 1)
278 #!endif
279
280 #!endif
281
282
283 #!ifdef WITH_NAT
284 # ----- rtpproxy params -----
285 modparam("rtpproxy", "rtpproxy_sock", "udp:127.0.0.1:7722")
286
287 # ----- nathelper params -----
288 modparam("nathelper", "natping_interval", 30)
289 modparam("nathelper", "ping_nated_only", 1)
290 modparam("nathelper", "sipping_bflag", FLB_NATSIPPING)
291 modparam("nathelper", "sipping_from", "sip:pinger@kamailio.org")
292
293 # params needed for NAT traversal in other modules
294 modparam("nathelper|registrar", "received_avp", "$avp(RECEIVED)")
295 modparam("usrloc", "nat_bflag", FLB_NATB)
296 #!endif
297
298
299 #!ifdef WITH_TLS
300 # ----- tls params -----
301 modparam("tls", "config", "/usr/local/etc/kamailio/tls.cfg")
302 #!endif
303
304 #!ifdef WITH_DEBUG
305 # ----- debugger params -----
306 modparam("debugger", "cfgtrace", 1)
307 #!endif
308
309 ####### Routing Logic ########
310
311
312 # Main SIP request routing logic
313 # - processing of any incoming SIP request starts with this route
314 # - note: this is the same as route { ... }
315 request_route {
316
317         # per request initial checks
318         route(REQINIT);
319
320         # NAT detection
321         route(NATDETECT);
322
323         # CANCEL processing
324         if (is_method("CANCEL")) {
325                 if (t_check_trans()) {
326                         route(RELAY);
327                 }
328                 exit;
329         }
330
331         # handle requests within SIP dialogs
332         route(WITHINDLG);
333
334         ### only initial requests (no To tag)
335
336         # handle retransmissions
337         if(t_precheck_trans()) {
338                 t_check_trans();
339                 exit;
340         }
341         t_check_trans();
342
343         # authentication
344         route(AUTH);
345
346         # record routing for dialog forming requests (in case they are routed)
347         # - remove preloaded route headers
348         remove_hf("Route");
349         if (is_method("INVITE|SUBSCRIBE"))
350                 record_route();
351
352         # account only INVITEs
353         if (is_method("INVITE")) {
354                 setflag(FLT_ACC); # do accounting
355         }
356
357         # dispatch requests to foreign domains
358         route(SIPOUT);
359
360         ### requests for my local domains
361
362         # handle registrations
363         route(REGISTRAR);
364
365         if ($rU==$null) {
366                 # request with no Username in RURI
367                 sl_send_reply("484","Address Incomplete");
368                 exit;
369         }
370
371         # user location service
372         route(LOCATION);
373 }
374
375
376 route[RELAY] {
377         # enable additional event routes for forwarded requests
378         # - serial forking, RTP relaying handling, a.s.o.
379         if (is_method("INVITE|BYE|SUBSCRIBE|UPDATE")) {
380                 if(!t_is_set("branch_route")) t_on_branch("MANAGE_BRANCH");
381         }
382         if (is_method("INVITE|SUBSCRIBE|UPDATE")) {
383                 if(!t_is_set("onreply_route")) t_on_reply("MANAGE_REPLY");
384         }
385         if (is_method("INVITE")) {
386                 if(!t_is_set("failure_route")) t_on_failure("MANAGE_FAILURE");
387         }
388
389         if (!t_relay()) {
390                 sl_reply_error();
391         }
392         exit;
393 }
394
395 # Per SIP request initial checks
396 route[REQINIT] {
397 #!ifdef WITH_ANTIFLOOD
398         # flood dection from same IP and traffic ban for a while
399         # be sure you exclude checking trusted peers, such as pstn gateways
400         # - local host excluded (e.g., loop to self)
401         if(src_ip!=myself) {
402                 if($sht(ipban=>$si)!=$null) {
403                         # ip is already blocked
404                         xdbg("request from blocked IP - $rm from $fu (IP:$si:$sp)\n");
405                         exit;
406                 }
407                 if (!pike_check_req()) {
408                         xlog("L_ALERT","ALERT: pike blocking $rm from $fu (IP:$si:$sp)\n");
409                         $sht(ipban=>$si) = 1;
410                         exit;
411                 }
412         }
413         if($ua =~ "friendly-scanner") {
414                 sl_send_reply("200", "OK");
415                 exit;
416         }
417 #!endif
418
419         if (!mf_process_maxfwd_header("10")) {
420                 sl_send_reply("483","Too Many Hops");
421                 exit;
422         }
423
424         if(is_method("OPTIONS") && uri==myself && $rU==$null) {
425                 sl_send_reply("200","Keepalive");
426                 exit;
427         }
428
429         if(!sanity_check("1511", "7")) {
430                 xlog("Malformed SIP message from $si:$sp\n");
431                 exit;
432         }
433 }
434
435 # Handle requests within SIP dialogs
436 route[WITHINDLG] {
437         if (!has_totag()) return;
438
439         # sequential request withing a dialog should
440         # take the path determined by record-routing
441         if (loose_route()) {
442                 route(DLGURI);
443                 if (is_method("BYE")) {
444                         setflag(FLT_ACC); # do accounting ...
445                         setflag(FLT_ACCFAILED); # ... even if the transaction fails
446                 }
447                 else if ( is_method("ACK") ) {
448                         # ACK is forwarded statelessy
449                         route(NATMANAGE);
450                 }
451                 else if ( is_method("NOTIFY") ) {
452                         # Add Record-Route for in-dialog NOTIFY as per RFC 6665.
453                         record_route();
454                 }
455                 route(RELAY);
456                 exit;
457         }
458         if ( is_method("ACK") ) {
459                 if ( t_check_trans() ) {
460                         # no loose-route, but stateful ACK;
461                         # must be an ACK after a 487
462                         # or e.g. 404 from upstream server
463                         route(RELAY);
464                         exit;
465                 } else {
466                         # ACK without matching transaction ... ignore and discard
467                         exit;
468                 }
469         }
470         sl_send_reply("404", "Not here");
471         exit;
472 }
473
474 # Handle SIP registrations
475 route[REGISTRAR] {
476         if (!is_method("REGISTER")) return;
477         if(isflagset(FLT_NATS)) {
478                 setbflag(FLB_NATB);
479 #!ifdef WITH_NATSIPPING
480                 # do SIP NAT pinging
481                 setbflag(FLB_NATSIPPING);
482 #!endif
483         }
484         if (!save("location"))
485                 sl_reply_error();
486
487         exit;
488 }
489
490 # User location service
491 route[LOCATION] {
492         if (!lookup("location")) {
493                 $var(rc) = $rc;
494                 t_newtran();
495                 switch ($var(rc)) {
496                         case -1:
497                         case -3:
498                                 send_reply("404", "Not Found");
499                                 exit;
500                         case -2:
501                                 send_reply("405", "Method Not Allowed");
502                                 exit;
503                 }
504         }
505
506         # when routing via usrloc, log the missed calls also
507         if (is_method("INVITE")) {
508                 setflag(FLT_ACCMISSED);
509         }
510
511         route(RELAY);
512         exit;
513 }
514
515
516 # IP authorization and user uthentication
517 route[AUTH] {
518 #!ifdef WITH_AUTH
519
520 #!ifdef WITH_IPAUTH
521         if((!is_method("REGISTER")) && allow_source_address()) {
522                 # source IP allowed
523                 return;
524         }
525 #!endif
526
527         if (is_method("REGISTER") || from_uri==myself) {
528                 # authenticate requests
529                 if (!auth_check("$fd", "subscriber", "1")) {
530                         auth_challenge("$fd", "0");
531                         exit;
532                 }
533                 # user authenticated - remove auth header
534                 if(!is_method("REGISTER|PUBLISH"))
535                         consume_credentials();
536         }
537         # if caller is not local subscriber, then check if it calls
538         # a local destination, otherwise deny, not an open relay here
539         if (from_uri!=myself && uri!=myself) {
540                 sl_send_reply("403","Not relaying");
541                 exit;
542         }
543
544 #!endif
545         return;
546 }
547
548 # Caller NAT detection
549 route[NATDETECT] {
550 #!ifdef WITH_NAT
551         force_rport();
552         if (nat_uac_test("19")) {
553                 if (is_method("REGISTER")) {
554                         fix_nated_register();
555                 } else {
556                         if(is_first_hop())
557                                 set_contact_alias();
558                 }
559                 setflag(FLT_NATS);
560         }
561 #!endif
562         return;
563 }
564
565 # RTPProxy control
566 route[NATMANAGE] {
567 #!ifdef WITH_NAT
568         if (is_request()) {
569                 if(has_totag()) {
570                         if(check_route_param("nat=yes")) {
571                                 setbflag(FLB_NATB);
572                         }
573                 }
574         }
575         if (!(isflagset(FLT_NATS) || isbflagset(FLB_NATB)))
576                 return;
577
578         rtpproxy_manage("co");
579
580         if (is_request()) {
581                 if (!has_totag()) {
582                         if(t_is_branch_route()) {
583                                 add_rr_param(";nat=yes");
584                         }
585                 }
586         }
587         if (is_reply()) {
588                 if(isbflagset(FLB_NATB)) {
589                         set_contact_alias();
590                 }
591         }
592 #!endif
593         return;
594 }
595
596 # URI update for dialog requests
597 route[DLGURI] {
598 #!ifdef WITH_NAT
599         if(!isdsturiset()) {
600                 handle_ruri_alias();
601         }
602 #!endif
603         return;
604 }
605
606 # Routing to foreign domains
607 route[SIPOUT] {
608         if (uri==myself) return;
609
610         append_hf("P-hint: outbound\r\n");
611         route(RELAY);
612         exit;
613 }
614
615 # Manage outgoing branches
616 branch_route[MANAGE_BRANCH] {
617         xdbg("new branch [$T_branch_idx] to $ru\n");
618         route(NATMANAGE);
619 }
620
621 # Manage incoming replies
622 onreply_route[MANAGE_REPLY] {
623         xdbg("incoming reply\n");
624         if(status=~"[12][0-9][0-9]")
625                 route(NATMANAGE);
626 }
627
628 # Manage failure routing cases
629 failure_route[MANAGE_FAILURE] {
630         route(NATMANAGE);
631
632         if (t_is_canceled()) {
633                 exit;
634         }
635 }