|
|
|
@ -28,6 +28,8 @@ flags |
|
|
|
#!define FLB_NATSIPPING 2 |
|
|
|
#!define FLB_UAC_REDIRECT 3 |
|
|
|
|
|
|
|
#!define TRUSTED_ADR_GROUP 1 |
|
|
|
|
|
|
|
####### Global Parameters ######### |
|
|
|
fork = yes |
|
|
|
children = 25 |
|
|
|
@ -164,6 +166,9 @@ modparam("mi_fifo", "fifo_name", "/tmp/kamailio_fifo") |
|
|
|
######## UAC Redirection module ######## |
|
|
|
loadmodule "uac_redirect.so" |
|
|
|
|
|
|
|
######## DoS prevention mdule ######## |
|
|
|
loadmodule "pike.so" |
|
|
|
|
|
|
|
####### Role Configurations ########## |
|
|
|
#!ifdef DISPATCHER-ROLE |
|
|
|
include_file "dispatcher-role.cfg" |
|
|
|
@ -183,6 +188,13 @@ include_file "nat-traversal-role.cfg" |
|
|
|
loadmodule "db_kazoo.so" |
|
|
|
#!endif |
|
|
|
|
|
|
|
loadmodule "db_text.so" |
|
|
|
loadmodule "permissions.so" |
|
|
|
modparam("db_text", "db_mode", 1) |
|
|
|
modparam("permissions", "db_url", "text:///etc/kamailio/dbtext") |
|
|
|
modparam("permissions", "db_mode", 1) |
|
|
|
|
|
|
|
|
|
|
|
####### Routing Logic ######## |
|
|
|
route |
|
|
|
{ |
|
|
|
@ -198,6 +210,8 @@ route |
|
|
|
route(DISPATCHER_CLASSIFY_SOURCE); |
|
|
|
#!endif |
|
|
|
|
|
|
|
route(DOS_PREVENTION); |
|
|
|
|
|
|
|
route(HANDLE_OPTIONS); |
|
|
|
|
|
|
|
route(HANDLE_MOVE_REQUEST); |
|
|
|
@ -231,7 +245,12 @@ route[SANITY_CHECK] |
|
|
|
{ |
|
|
|
if (!mf_process_maxfwd_header("10")) { |
|
|
|
xlog("L_WARN", "$ci|end|Too much hops, not enough barley"); |
|
|
|
sl_send_reply("483", "Too Many Hops"); |
|
|
|
send_reply("483", "Too Many Hops"); |
|
|
|
exit; |
|
|
|
} |
|
|
|
|
|
|
|
if ( msg:len > 6144 ) { |
|
|
|
send_reply("513", "Message too large"); |
|
|
|
exit; |
|
|
|
} |
|
|
|
|
|
|
|
@ -246,6 +265,10 @@ route[HANDLE_OPTIONS] |
|
|
|
if (is_method("OPTIONS")) { |
|
|
|
if (isflagset(FLAG_INTERNALLY_SOURCED)) { |
|
|
|
route(INTERNAL_TO_EXTERNAL_RELAY); |
|
|
|
} |
|
|
|
else |
|
|
|
if ($rd=~ "[0-9]{1,3}\.[0-9]{1,3}.[0-9]{1,3}\.[0-9]{1,3}") { |
|
|
|
xlog("L_ERR", "Possible attack- Options: to $ru from $fu, UA $ua, IP $si\n"); |
|
|
|
} else { |
|
|
|
sl_send_reply("200", "Rawr!!"); |
|
|
|
} |
|
|
|
@ -373,6 +396,37 @@ route[EXTERNAL_TO_INTERNAL_RELAY] |
|
|
|
t_relay(); |
|
|
|
} |
|
|
|
|
|
|
|
route[DOS_PREVENTION] |
|
|
|
{ |
|
|
|
# allow request from internal network or from whitelist |
|
|
|
if (isflagset(FLAG_INTERNALLY_SOURCED) || allow_source_address(TRUSTED_ADR_GROUP)) { |
|
|
|
xlog("L_DBG", "Request from trusted IP $rm $si\n"); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
# drop requests with no To domain or IP To domain (friendly-scanner) |
|
|
|
if (is_method("REGISTER|SUBSCRIBE|OPTIONS") && |
|
|
|
($td == $null || $td=~ "[0-9]{1,3}\.[0-9]{1,3}.[0-9]{1,3}\.[0-9]{1,3}")) { |
|
|
|
xlog("L_ERR", "Possible attack- wrong td: $rm to $ru from $fu, UA $ua, IP $si\n"); |
|
|
|
exit; |
|
|
|
} |
|
|
|
|
|
|
|
# drop Invite with IP auth realm |
|
|
|
if (is_method("INVITE") && is_present_hf("Proxy-Authorization") && |
|
|
|
$ar =~ "[0-9]{1,3}\.[0-9]{1,3}.[0-9]{1,3}\.[0-9]{1,3}" ) { |
|
|
|
xlog("L_ERR", "Possible attack- Invite realm $ar: to $ru from $fu, UA $ua, IP $si\n"); |
|
|
|
exit; |
|
|
|
} |
|
|
|
|
|
|
|
# use pike check for the others |
|
|
|
if (!pike_check_req()) { |
|
|
|
if( $rc == -2) { |
|
|
|
xlog("L_ERR", "DOS attack: $rm to $ru from $fu, UA $ua, IP $si\n"); |
|
|
|
} |
|
|
|
exit; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
onreply_route[EXTERNAL_REPLY] |
|
|
|
{ |
|
|
|
xlog("L_INFO", "$ci|log|external reply $T_reply_code"); |
|
|
|
@ -467,4 +521,4 @@ onsend_route { |
|
|
|
xlog("L_INFO", "$ci|pass|$sndfrom(ip):$sndfrom(port) -> $sndto(ip):$sndto(port)"); |
|
|
|
} |
|
|
|
|
|
|
|
## vim:set tabstop=4 softtabstop=4 shiftwidth=4 expandtab |
|
|
|
# vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab |