1 /**************************************************************** 2 * Licensed to the Apache Software Foundation (ASF) under one * 3 * or more contributor license agreements. See the NOTICE file * 4 * distributed with this work for additional information * 5 * regarding copyright ownership. The ASF licenses this file * 6 * to you under the Apache License, Version 2.0 (the * 7 * "License"); you may not use this file except in compliance * 8 * with the License. You may obtain a copy of the License at * 9 * * 10 * http://www.apache.org/licenses/LICENSE-2.0 * 11 * * 12 * Unless required by applicable law or agreed to in writing, * 13 * software distributed under the License is distributed on an * 14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * 15 * KIND, either express or implied. See the License for the * 16 * specific language governing permissions and limitations * 17 * under the License. * 18 ****************************************************************/ 19 20 21 22 package org.apache.james.transport.matchers; 23 24 import org.apache.mailet.Mail; 25 26 import java.util.Collection; 27 28 /** 29 * Does a DNS lookup (MX and A/CNAME records) on the sender's domain. If 30 * there are no entries, the domain is considered fake and the match is 31 * successful. 32 * 33 */ 34 public class SenderInFakeDomain extends AbstractNetworkMatcher { 35 36 public Collection match(Mail mail) { 37 if (mail.getSender() == null) { 38 return null; 39 } 40 String domain = mail.getSender().getHost(); 41 //DNS Lookup for this domain 42 Collection servers = getMailetContext().getMailServers(domain); 43 if (servers.size() == 0) { 44 //No records...could not deliver to this domain, so matches criteria. 45 log("No MX, A, or CNAME record found for domain: " + domain); 46 return mail.getRecipients(); 47 } else if (matchNetwork(servers.iterator().next().toString())){ 48 /* 49 * It could be a wildcard address like these: 50 * 51 * 64.55.105.9/32 # Allegiance Telecom Companies Worldwide (.nu) 52 * 64.94.110.11/32 # VeriSign (.com .net) 53 * 194.205.62.122/32 # Network Information Center - Ascension Island (.ac) 54 * 194.205.62.62/32 # Internet Computer Bureau (.sh) 55 * 195.7.77.20/32 # Fredrik Reutersward Data (.museum) 56 * 206.253.214.102/32 # Internap Network Services (.cc) 57 * 212.181.91.6/32 # .NU Domain Ltd. (.nu) 58 * 219.88.106.80/32 # Telecom Online Solutions (.cx) 59 * 194.205.62.42/32 # Internet Computer Bureau (.tm) 60 * 216.35.187.246/32 # Cable & Wireless (.ws) 61 * 203.119.4.6/32 # .PH TLD (.ph) 62 * 63 */ 64 log("Banned IP found for domain: " + domain); 65 log(" --> :" + servers.iterator().next().toString()); 66 return mail.getRecipients(); 67 } else { 68 // Some servers were found... the domain is not fake. 69 70 return null; 71 } 72 } 73 }