[asterisk-users] Why Nat=yes Nat=no Option?
Klaus Darilion
klaus.mailinglists at pernau.at
Thu Nov 13 13:15:12 CST 2008
Alex Balashov schrieb:
> Klaus Darilion wrote:
>
>> This is a different scenario. In this case of course I want the public
>> IP of the client, not of the load balancer. So, yes - in this case
>> nat=no is useful for Asterisk. Nevertheless I ignore the IP provided by
>> the client in the contact header completely - I always use the public IP
>> of the client. Thus, in a loadbalancer setup I would configure the load
>> balancer to ignore the advertised IP but use the "received" IP
>> (implementation depends on the actual setup and used components).
>>
>> But as a basic rule - never ever trust the client. Storing and using the
>> Contact provided by the client without any screening is dangerous.
>
> Hm. Interesting. I am curious: I agree that validation should be in
> place, but why do you think that distrust of the client's contact URI
> should be elevated to a "basic rule?" What incentive do UACs have to
> provide an illegitimate contact URI? So the UAS will send responses
> somewhere else, to another UAC that will reject the request because it
> the dialog/transaction parameters do not match? Man-in-the-middle
> attacks from spoofed requests containing bogus contact domains? That
> can also be carried out with IP spoofing and other more traditional
> means on the IP layer itself.
Nono - it is not about replies. it is about how incoming calls will be
routed. Consider the following scenario, which is general for SIP
proxies/PBXs:
Proxy (Asterisk, Openser ...) on IP 1.1.1.1
This proxy uses a gateway for PSTN located at 2.2.2.2 (either belongs to
the proxy operator or is a gateway from a termination provider).
Very often the authentication between gateway and proxy is done based on
IP address.
Now, the customers SIP client at 3.3.3.3 REGISTERs to the proxy with
Contact: sip:0900123456 at 2.2.2.2.
If now there is an incoming call to the customer, the Proxy/Asterisk
will send the INVITE to 2.2.2.2 = the gateway. The gateway happily
accepts the call - as you see there is lots of fraud possibilities.
I did several security audits and many ITSPs were vulnerably for this
kind of attack.
There are some methods to prevent this (like e.g. blacklists in openser)
but a simple workaround which works fine in most ITSP setups is to
ignore the user provided contact.
> But there is a difference between screening and distrusting by default,
yes it is. But if the service is a POTS replacement and call forwarding
will be done using a web interface it is easier to use the source
IP:port instead of screening.
> particularly in scenarios where it may be explicitly undesirable for the
> received IP to be used as the contact, such as in switch assemblies
> where the signaling agents are partitioned somehow.
yes, yes. true. of course my example is for a very simple setup. But in
such complex scenarios there is still fraud potential and
screening/replacing the contact will not be done by the registrar, but
by the ingress point into the SIP network (e.g. load balancer, outbound
proxy, SBC, P-CSCF ... - call it what you want)
> I think the question here really is about good default behaviours and
> assumptions, not whether validation for security is a good idea, though.
I think the default value is ok. I works for 99% and it increases
security. If someone has a big complex setup he probably has the
knowledge of the nat= setting and knows the impacts of changing the value.
> In the scenario in the last paragraph, I may wish to allow contact
> addresses from other hosts on the same originating subnet but not on
> foreign networks (validation), but not to use the received IP
> (assumption of NAT).
If you have such requirements then change the nat= setting, screen the
contact values and you are fine. But IMO nat=yes is a good default setting.
klaus
More information about the asterisk-users
mailing list