# More about SPF records

Few days back I visited Official Google Apps forum (one of my favorite places) and answered many questions. It was quite after some time i was there and found few cases/questions/problems as really interesting. Here’s one of the questions asked there by a admin named aol985 about SPF records.

His question:

As described in http://www.google.com/support/a/bin/answer.py?hl=en&answer=33786 , I set SPF record for mashfilm.ru domain to “v=spf1 include:aspmx.googlemail.com ~all”. But aspmx.googlemail.com currently does not resolves. Is it correct?

Nice one! He is right on fact that aspmx.googlemail.com does NOT resolve. Ok why?

anurag@root]$dig aspmx.googlemail.com a ; <<>> DiG 9.3.4-P1.1 <<>> aspmx.googlemail.com a ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42050 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;aspmx.googlemail.com. IN A ;; Query time: 100 msec ;; SERVER: 66.33.216.208#53(66.33.216.208) ;; WHEN: Wed Aug 5 02:48:00 2009 ;; MSG SIZE rcvd: 38 [anurag@root]$


Thus no A record which means it won’t resolve, BUT one must remember that a zone can have many records working side by side offering their own feature, like - MX records can be there with/without A, same with txt records, and few other also.

Now observing the spf record by Google - “v=spf1 _include:aspmx.googlemail.com ~all” here _include:aspmx.googlemail.com means to include the spf record of aspmx.googlemail.com which makes sense as:

[anurag@root]$dig aspmx.googlemail.com txt ; <<>> DiG 9.3.4-P1.1 <<>> aspmx.googlemail.com txt ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30134 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;aspmx.googlemail.com. IN TXT ;; ANSWER SECTION: aspmx.googlemail.com. 7178 IN TXT "v=spf1 redirect=_spf.google.com" ;; Query time: 14 msec ;; SERVER: 66.33.216.208#53(66.33.216.208) ;; WHEN: Wed Aug 5 02:54:02 2009 ;; MSG SIZE rcvd: 82 [anurag@root]$


Now it means spf record for aspmx.googlemail.com is “v=spf1 redirect=_spf.google.com” Now trying to understand _spf.google.com underscore right in start makes it different from a sub-zone since it can’t be used as a domain but will still remain a working sub zone in terms of DNS. So now since it can’t be used as a  sub domain i.e which can be used to be attached with web server and can supply pages via ftp, there is no meaning of A record for it here. Checking txt string of _spf.google.com

[anurag@root]$dig _spf.google.com txt ; <<>> DiG 9.3.4-P1.1 <<>> _spf.google.com txt ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52983 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;_spf.google.com. IN TXT ;; ANSWER SECTION: _spf.google.com. 300 IN TXT "v=spf1 ip4:216.239.32.0/19 ip4:64.233.160.0/19 ip4:66.249.80.0/20 ip4:72.14.192.0/18 ip4:209.85.128.0/17 ip4:66.102.0.0/20 ip4:74.125.0.0/16 ip4:64.18.0.0/20 ip4:207.126.144.0/20 ?all" ;; Query time: 29 msec ;; SERVER: 66.33.216.208#53(66.33.216.208) ;; WHEN: Wed Aug 5 02:57:26 2009 ;; MSG SIZE rcvd: 229 [anurag@root]$


And here we got it!

#### So much information in just one hostname!

"v=spf1 ip4:216.239.32.0/19 ip4:64.233.160.0/19 ip4:66.249.80.0/20 ip4:72.14.192.0/18 ip4:209.85.128.0/17 ip4:66.102.0.0/20 ip4:74.125.0.0/16 ip4:64.18.0.0/20 ip4:207.126.144.0/20 ?all"


is a part of SPF record which Google makes its Google Apps users to use. Thus using “v=spf1 include:aspmx.googlemail.com ~all” in spf tells that “this domain allows all of the server on this ip range - _ip4:216.239.32.0/19 ip4:64.233.160.0/19 ip4:66.249.80.0/20 ip4:72.14.192.0/18 ip4:209.85.128.0/17 ip4:66.102.0.0/20 ip4:74.125.0.0/16 ip4:64.18.0.0/20 ip4:207.126.144.0/20_ as authorized to send email on behalf of that domain.

So that’s how spf works in this case. :)