1 21 package org.jsmtpd.plugins.inputIPFilters; 22 23 import java.net.Inet4Address ; 24 import java.net.InetAddress ; 25 import java.util.ArrayList ; 26 import java.util.Iterator ; 27 import java.util.List ; 28 29 import org.apache.commons.logging.Log; 30 import org.apache.commons.logging.LogFactory; 31 import org.jsmtpd.core.common.PluginInitException; 32 import org.jsmtpd.core.common.PluginStore; 33 import org.jsmtpd.core.common.acl.IACL; 34 import org.jsmtpd.core.common.dnsService.IDNSResolver; 35 import org.jsmtpd.core.common.inputIPFilter.IFilterIP; 36 import org.jsmtpd.tools.cache.ICache; 37 import org.jsmtpd.tools.cache.SimpleCache; 38 39 43 public class RBLFilter implements IFilterIP { 44 47 private List <String > serverList = new ArrayList <String >(); 48 51 private Log log = LogFactory.getLog(RBLFilter.class); 52 55 private IDNSResolver resolver = null; 56 59 private IACL acl = null; 60 63 private boolean bypassLocal = false; 64 68 private ICache<String ,Inet4Address > cache = new SimpleCache<String ,Inet4Address > (500); 69 70 public boolean checkIP(InetAddress input) { 71 72 if (!(input instanceof Inet4Address )) return false; 74 75 String ipString = ((Inet4Address ) input).getHostAddress(); 76 77 if (bypassLocal && acl.isValidRelay(ipString)) 78 return true; 79 80 if (cache.get(ipString)!=null) return true; 82 83 String [] parts = ((Inet4Address ) input).getHostAddress().split("\\."); 85 String reverse = parts[3] + "." + parts[2] + "." + parts[1] + "." + parts[0]; 86 87 for (Iterator iter = serverList.iterator(); iter.hasNext();) { 89 String element = (String ) iter.next(); 90 String toCheck = reverse + "." + element; 91 log.debug("Client ip: " + ipString + " RBL filtering with " + element); 92 if (resolver.exists(toCheck)) { 93 log.warn("Client ip: " + ipString + " rejected by RBLFilter plugin on server " + element); 94 return false; 95 } 96 } 97 cache.cache(ipString,(Inet4Address ) input); return true; } 100 101 public String getPluginName() { 102 return "Real time Blacklist plugin for jsmtpd"; 103 } 104 105 public void initPlugin() throws PluginInitException { 106 resolver = PluginStore.getInstance().getResolver(); 107 if (resolver == null) 109 throw new PluginInitException(); 110 111 acl = PluginStore.getInstance().getAcl(); 112 113 if (acl == null) 114 throw new PluginInitException(); 115 116 } 117 118 119 public void shutdownPlugin() { 120 } 122 123 public void setRBLServer(String serv) { 125 serverList.add(serv); 126 } 127 public void setBypassLocal(boolean b) { 128 bypassLocal = b; 129 } 130 } | Popular Tags |