]> git.donarmstrong.com Git - dsa-puppet.git/commitdiff
restrict smtp
authorStephen Gran <steve@lobefin.net>
Sat, 6 Mar 2010 12:14:19 +0000 (12:14 +0000)
committerStephen Gran <steve@lobefin.net>
Sat, 6 Mar 2010 12:14:19 +0000 (12:14 +0000)
Signed-off-by: Stephen Gran <steve@lobefin.net>
modules/exim/manifests/init.pp
modules/ferm/templates/defs.conf.erb
modules/ferm/templates/me.conf.erb

index 50484f9086f7be81a23d1a2dce62e311e34971da..61ab93cec0548c1bb57f19bb3c6f255b083670d8 100644 (file)
@@ -157,9 +157,13 @@ class exim {
         refreshonly => true,
     }
     @ferm::rule { "dsa-exim":
-            domain          => "(ip ip6)",
-            description     => "Allow smtp access",
-            rule            => "&SERVICE(tcp, 25)"
+            description     => "Allow SMTP",
+            rule            => "&SERVICE_RANGE(tcp, smtp, \$SSH_SOURCES)"
+    }
+    @ferm::rule { "dsa-exim-v6":
+            description     => "Allow SMTP",
+            domain          => "ip6",
+            rule            => "&SERVICE_RANGE(tcp, smtp, \$SSH_SOURCES)"
     }
     # Do we actually want this?  I'm only doing it because it's harmless
     # and makes the logs quiet.  There are better ways of making logs quiet,
index 2c97337ade639955f915144acea5532011ce959e..e4b72b32a48a4f05168bc6d46c79a2c0b71164e9 100644 (file)
@@ -8,13 +8,43 @@
 }
 
 @def &SERVICE_RANGE($proto, $port, $srange) = {
- proto $proto mod state state (NEW) dport $port saddr ($srange) ACCEPT;
+ proto $proto mod state state (NEW) dport $port @subchain $port { saddr ($srange) ACCEPT; }"
 }
 
 @def &TCP_UDP_SERVICE($port) = {
  proto (tcp udp) mod state state (NEW) dport $port ACCEPT;
 }
 
+@def $HOST_MAILRELAY_V4 = (<%=
+  mailrelay = []
+  localinfo.keys.sort.each do |node|
+      if localinfo[node]['mailrelay']
+          keyinfo[node][0]['ipHostNumber'].each do |ip|
+             next if ip =~ /:/
+             mailrelay << ip
+          end
+      end
+  end
+
+  mailrelay.join(' ')
+%>);
+
+@def $HOST_MAILRELAY_V6 = (<%=
+  mailrelay = []
+  localinfo.keys.sort.each do |node|
+      if localinfo[node]['mailrelay']
+          keyinfo[node][0]['ipHostNumber'].each do |ip|
+             next if ip =~ /\./
+             mailrelay << ip
+          end
+      end
+  end
+
+  mailrelay.join(' ')
+%>);
+
+@def $HOST_MAILRELAY = ( $HOST_MAILRELAY_V4 $HOST_MAILRELAY_V6 );
+
 @def $HOST_NAGIOS_V4 = (<%=
   nagii = []
   localinfo.keys.sort.each do |node|
index 3aa52c21150ba1be3dbc71a67493341f16a84a08..690dc369cf4f1204195ed15000aff5c421f940fe 100644 (file)
@@ -41,3 +41,33 @@ end
 
 sshallowed.join(' ')
 %>);
+
+def $SMTP_SOURCES =(<%=
+
+smtpallowed = []
+
+if not nodeinfo['smarthost'].empty?
+  smtpallowed = [ '$HOST_MAILRELAY_V4' ]
+end
+
+if smtpallowed.length == 0
+  smtpallowed = [ '0.0.0.0/0' ]
+end
+
+smtpallowed.join(' ')
+%>);
+
+def $SMTP_V6_SOURCES =(<%=
+
+smtpallowed = []
+
+if not nodeinfo['smarthost'].empty?
+  smtpallowed = [ '$HOST_MAILRELAY_V6' ]
+end
+
+if smtpallowed.length == 0
+  smtpallowed = [ '::' ]
+end
+
+smtpallowed.join(' ')
+%>);