An HttpModule provides additional processing functionality as a request is passed through the ASP.NET pipeline on its way to an HttpHandler (and on the way out as well, if needed).
An HttpHandler is the end point of a request.
So modules are typically used for security, caching, URL rewriting and so forth. Handlers serve up chunks of data, such as page content, images, etc.
You can use an HttpModule to provide a level of security, but as you rightly point out someone might try to spoof an IP address. A more secure option would be to use encryption using asymmetric keys. You might want to look at WSE to see how this is currently supported on the .asmx stack.
Regards
Dave