<div dir="ltr">Found the callback code for MAIL FROM:<div><br></div><div><div>'M' SMFIC_MAIL MAIL FROM: information</div><div> Expected response: Accept/reject action</div></div><div><br></div><div>Time for some more coding :D</div></div><br><div class="gmail_quote"><div dir="ltr">On Sun, Aug 19, 2018 at 4:04 PM Shawn Iverson <<a href="mailto:iversons@rushville.k12.in.us">iversons@rushville.k12.in.us</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Another update<div><br></div><div>The latest commit to my branch includes more fixes and a new thing that needs handled now that a Milter is in play. When mail is submitted back to postfix, it needs to be processed by other things that could reject the email (such as an blocked sender). This is a problem because MailScanner does not know how to handle rejects since it has always been part of the queue process interacting directly with the queues, not before queue process.</div><div><br></div><div>During message delivery, if a reject is detected, I inject a special header to the message and requeue it to MailScanner. MailScanner has a chance, based on this special header to flag the message, remove the special header, add diagnostic info to the header about the relay, and quarantine the message. The mail admin is happy knowing that the message didn't just vanish and has an opportunity to resolve the issue and release it or know the disposition of the email.</div><div><br></div><div>Another cool thing about this Milter Processor I discovered is you can simply drop a message into /var/spool/MailScanner/milterin from /var/spool/MailScanner/quarantine, and it will try to redeliver it :D</div><div><br></div><div>This new code is in Message.pm and only becomes active if the milter is activated.</div></div><br><div class="gmail_quote"><div dir="ltr">On Sun, Aug 19, 2018 at 9:30 AM Shawn Iverson <<a href="mailto:iversons@rushville.k12.in.us" target="_blank">iversons@rushville.k12.in.us</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Oh yeah, here's the config for Postfix:<div><br></div><div><div>smtpd_milters = inet:<a href="http://127.0.0.1:33333" target="_blank">127.0.0.1:33333</a><br></div></div><div>smtpd_milter_maps = cidr:/etc/postfix/smtpd_milter_map<br></div><div><br></div><div>/etc/postfix/smtpd_milter_map:<br></div><div><div><a href="http://127.0.0.0/8" target="_blank">127.0.0.0/8</a> DISABLE</div><div>::/64 DISABLE</div></div><div><br></div><div>This allows scanned emails to pass the milter, as well as notifications sent from the localhost. You do need at least Postfix version 3.2 I believe to have milter map support.</div><div><br></div><div><br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr">On Sat, Aug 18, 2018 at 11:28 PM Shawn Iverson <<a href="mailto:iversons@rushville.k12.in.us" target="_blank">iversons@rushville.k12.in.us</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">MailScanner users:<div><br></div><div>The MailScanner Milter project is coming along nicely.</div><div><br></div><div><a href="https://github.com/shawniverson/v5/commits/081118msmilter" target="_blank">https://github.com/shawniverson/v5/commits/081118msmilter</a><br></div><div><br></div><div>I am currently running this on a split relay to test the milter without impacting production email.</div><div><br></div><div>The design is fairly simple, although development has taken about 40 hours of my time. I know more about MailScanner (and perl) than I ever have :D</div><div><br></div><div>The Milter is integrated into MailScanner and forks as a branch of the MailScanner process tree, keeping systemd happy.</div><div><br></div><div>The Milter process intercepts incoming email and tells postfix to DISCARD, which basically accepts the mail and silently drops it before entering the queue. At the same time, the Milter writes a raw email file to the /var/spool/MailScanner/milterin queue.</div><div><br></div><div>MailScanner picks up the message batches in the milterin directory, processes them, and spits them out to /var/spool/MailScanner/milterout directory as raw email files.</div><div><br></div><div>The MSMail Processor (new) relays the messages to postfix for further processing over port 25. A optional localhost rule in header_checks removes the local entry from the header before delivery.</div><div><br></div><div>The benefits are that the postfix queue is not touched at all throughout this process, making the solution (hopefully) an acceptable one within the postfix community. It is also very fast, and the codebase for this method is smaller than even the Postfix Processor, and MailScanner gets its own queues, separate from postfix.</div><div><br></div><div>One drawback to this method is there is no apparent way to extract the Envelope From address (at least not yet, perhaps I am missing a milter code), although it doesn't appear that MailScanner is all that concerned about it and doesn't go out of its way to capture it. I think it is important though, for spoof detection, so I will continue to research this.</div><div><br></div><div>Anyone that is willing to get their feet wet and test can apply the following files from my branch:</div><div><br></div><div>(In common)</div><div>/usr/sbin/MailScanner</div><div>/usr/share/MailScanner/perl/MailScanner/Milter.pm</div><div>/usr/share/MailScanner/perl/MailScanner/MSMail.pm</div><div>/usr/share/MailScanner/perl/MailScanner/MSDiskStore.pm</div><div>/usr/share/MailScanner/perl/MailScanner/ConfigDefs.pm</div><div><br></div><div>Then create the following dirs:</div><div>mkdir -p /var/spool/MailScanner/milterin</div><div>chown postfix:mtagroup /var/spool/MailScanner/milterin</div><div>mkdir -p /var/spool/MailScanner/milterout</div><div>chown postfix:mtagroup /var/spool/MailScanner/milterout</div><div><br></div><div>Apply the following to /etc/MailScanner/MailScanner.conf:</div><div>Incoming Queue Dir = /var/spool/MailScanner/milterin</div><div>Outgoing Queue Dir = /var/spool/MailScanner/milterout<br></div><div>MTA = MSMail</div><div>MSMail Queue Type = short | long (pick one that matches your postfix setting)<br></div><div><br></div><div>I recommend doing this in a test or split relay environment that blackholes email. Do not use in production yet ;)</div><div><br></div><div>Known issues at the moment:</div><div>MailWatch doesn't recogize MSMail as an 'MTA' so the queue stats do not appear</div><div>More validation and error handling is needed throughout. Weird emails abound!<br></div><div>Need to know the envelope from sender. Currently hidden from the milter, but hopefully exposable via a callback code.</div><div><br></div><div><br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr">On Tue, Aug 14, 2018 at 10:56 AM Shawn Iverson <<a href="mailto:iversons@rushville.k12.in.us" target="_blank">iversons@rushville.k12.in.us</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Dear MailScanner users:<div><br></div><div>I am officially working on creating a lightweight milter for MailScanner. </div><div><br></div><div>This milter will not provide MTA protocol rejection for postfix, due to the severe performance penalty it would cause. All mail will be intercepted, accepted, and silently dropped from the postfix queue and placed in a MailScanner queue.<br></div><div><br></div><div>I have a working prototype, and it is processing mail! It is in need of heavy refactoring and some bug squashing.</div><div><br></div><div>Currently it attempts to create a postfix formatted queue file (very ugly, who thought up this file format???!!!). I may instead create a new Milter Processor for MailScanner that reduces the overhead of doing this and can read the incoming email in a simple line-by-line format. This may also increase performance overall and reduce all the conversions happening.</div><div><br></div><div>The other side of the coin is what to do when MailScanner is done processing mail. Currently, it generates a postfix queue file and drops it into postfix incoming directory. It should not do this but instead drop the message into postfix using native postfix tools. That will be the next part I tackle as part of the Milter Processor.</div><div><br></div><div>Why am I doing this? I want to place MailScanner back in a good standing with Postfix folks (at least when the milter + postfix method is in use). </div><div><br></div><div>I have no plans of removing the old method but rather provide a more supported path for postfix users.</div><div><br></div><div>Wish me luck. I could be heard across the neighborhood when MailScanner processed an email from the Milter for the first time! :D</div><div><br></div><div><br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr">On Sat, Aug 11, 2018 at 9:58 AM David Jones <<a href="mailto:djones@ena.com" target="_blank">djones@ena.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 08/11/2018 08:52 AM, Shawn Iverson wrote:<br>
> David,<br>
> <br>
> I agree that this is true, and part of my lack of motivation to do it. <br>
> One reason I wanted it as an option was to reconcile the ongoing <br>
> conflict with the postfix community and return MailScanner to good <br>
> standing to this community. Weitze has been very stern about <br>
> MailScanner directly tapping the postfix queues.<br>
> <br>
> Perhaps an alternative option would be to create a fast MailScanner <br>
> milter that behaves more like the HOLD queue. Basically just a milter <br>
> that immediately fires back accept to postfix and places all the <br>
> messages in a MailScanner HOLD queue as opposed to a postfix HOLD <br>
> queue. Doing so would maintain speed, simplicity, and be more compliant <br>
> with postfix. The code would also be very simple.<br>
> <br>
> Then, as you say, if you need MTA level functionality for SA, use other <br>
> software and methods.<br>
> <br>
> <br>
<br>
This light MS milter would make a lot of sense based on your goal to get <br>
compliant with Postfix and back "in" with the Postfix community. +1<br>
<br>
> <br>
> On Sat, Aug 11, 2018 at 9:39 AM David Jones <<a href="mailto:djones@ena.com" target="_blank">djones@ena.com</a> <br>
> <mailto:<a href="mailto:djones@ena.com" target="_blank">djones@ena.com</a>>> wrote:<br>
> <br>
> On 08/11/2018 08:15 AM, Shawn Iverson wrote:<br>
> > I have been planning for a MailScanner milter for quite some<br>
> time. I<br>
> > have been specifically studying rpamd's milter source for this<br>
> purpose.<br>
> > Alas, lack of time and lack of money are always an issue, and I<br>
> put a<br>
> > lot of hours in my day job. As Jerry would say, I like to eat<br>
> and have<br>
> > a roof over my head :D<br>
> ><br>
> > If I do find the time to build a milter, performance will<br>
> definitely be<br>
> > impacted. The reason is that postfix will have to keep each session<br>
> > open for the duration of scanning, and each MailScanner child<br>
> would have<br>
> > to issue a callback to postfix after scanning the spam so that<br>
> postfix<br>
> > can responds to the connection appropriately (i.e. reject or<br>
> accept).<br>
> > This will slow down mail processing considerably. If I do this,<br>
> I am<br>
> > going to keep the HOLD queue around, so you would have to choose<br>
> between<br>
> > speed or MTA level rejection functionality.<br>
> ><br>
> ><br>
> ><br>
> <br>
> My gut tells me that this is going to be so slow, that it's not<br>
> going to<br>
> be worth the time to put into it. If you want to reject at MTA time,<br>
> throw in amavis-new or spamd (not rspamd) using the same SpamAsssassin<br>
> rules and Bayes DB to get most of the same features as MailScanner<br>
> during the SMTP conversation. Then the mail that gets through can be<br>
> filtered by MailScanner for it's extra features that make it unique.<br>
> <br>
> I understand there are different local legal requirements around the<br>
> world that if email is accepted at MTA time then it has to be passed on<br>
> to the end user's mailbox. If you are located in one of these<br>
> countries, then this would be more of an issue. But since I am in a<br>
> country that doesn't have this legal requirement, I do block email<br>
> post-MTA by MailScanner.<br>
> <br>
> The majority of my spam is blocked at the MTA level already by highly<br>
> tuned RBLs and postscreen's RBL weighting which is very, very good.<br>
> Only a small percentage of spam that is zero-hour or from compromised<br>
> accounts makes it to MailScanner.<br>
> <br>
> I highly recommend the Invaluement RBL. It's very accurate -- only<br>
> 1 or<br>
> 2 false positives over 5+ the years. This RBL is very cost effective<br>
> and has allowed me to disable all Spamhaus RBL checks in SpamAssassin<br>
> saving thousands of dollars a year. (We have too high a volume to stay<br>
> under the free usage limits of Spamhaus so we were having to pay for<br>
> the<br>
> RBL feed.)<br>
> <br>
> ><br>
> ><br>
> ><br>
> > On Tue, Aug 7, 2018 at 10:52 AM David Jones via MailScanner<br>
> > <<a href="mailto:mailscanner@lists.mailscanner.info" target="_blank">mailscanner@lists.mailscanner.info</a><br>
> <mailto:<a href="mailto:mailscanner@lists.mailscanner.info" target="_blank">mailscanner@lists.mailscanner.info</a>><br>
> > <mailto:<a href="mailto:mailscanner@lists.mailscanner.info" target="_blank">mailscanner@lists.mailscanner.info</a><br>
> <mailto:<a href="mailto:mailscanner@lists.mailscanner.info" target="_blank">mailscanner@lists.mailscanner.info</a>>>> wrote:<br>
> ><br>
> > On 08/07/2018 05:03 AM, <a href="mailto:info@schroeffu.ch" target="_blank">info@schroeffu.ch</a><br>
> <mailto:<a href="mailto:info@schroeffu.ch" target="_blank">info@schroeffu.ch</a>> <mailto:<a href="mailto:info@schroeffu.ch" target="_blank">info@schroeffu.ch</a><br>
> <mailto:<a href="mailto:info@schroeffu.ch" target="_blank">info@schroeffu.ch</a>>><br>
> > wrote:<br>
> > ><br>
> > > Hi Mailscanner friends,<br>
> > ><br>
> > > is there any progress to make MailScanner usable as a<br>
> postfix milter?<br>
> > > The most biggest problem I have is, SPAM is not possible to<br>
> > reject when<br>
> > > reaching a high score at MTA level. For my understanding,<br>
> connect<br>
> > via<br>
> > > milter instead of queue ^HOLD would be the solution.<br>
> > ><br>
> > > For the next decade we are still using MailScanner instead<br>
> of others<br>
> > > like Rspamd, because MailScanner is like a mail suite for mail<br>
> > security,<br>
> > > but if there will never be the possibility to reject at<br>
> MTA level<br>
> > the<br>
> > > high score spam, we will also change in 1-3 years while<br>
> replacing<br>
> > the OS<br>
> > > beyond.<br>
> > ><br>
> ><br>
> > One of MailScanner's strongest features is it's batch mode<br>
> processing<br>
> > that will allow it to handle a very high volume of mail<br>
> flow. I doubt<br>
> > that MailScanner will ever be changed to run as a milter for this<br>
> > reason.<br>
> ><br>
> > I tried rspamd and found it wasn't as good as the author<br>
> claims so no<br>
> > reason to try to use that as a milter. It also wasn't as<br>
> fast as it<br>
> > claims. I could not send high volumes of mail through it<br>
> like I could<br>
> > with MailScanner.<br>
> ><br>
> > If you want to block high scoring spam at the MTA level, I<br>
> suggest<br>
> > using<br>
> > amavis or spamd with the same SA rulesets as MailScanner. <br>
> This will<br>
> > get<br>
> > you most of the power of MailScanner's blocking at the MTA.<br>
> ><br>
> > <a href="https://wiki.apache.org/spamassassin/IntegratedInMta" rel="noreferrer" target="_blank">https://wiki.apache.org/spamassassin/IntegratedInMta</a><br>
> ><br>
> > If you you use postscreen and postwhite at the Postfix MTA<br>
> level, you<br>
> > can block most of the obvious spam with a tuned list of<br>
> RBLs. See the<br>
> > SA users mailing list over the past year for details on this<br>
> from me<br>
> > and<br>
> > a few others.<br>
> ><br>
> > I suggest setting up a quick test VM with iRedmail to get a good<br>
> > example<br>
> > of how to do TLS and amavis integration well with Postfix.<br>
> ><br>
> > --<br>
> > David Jones<br>
> ><br>
> ><br>
> > --<br>
> > MailScanner mailing list<br>
> > <a href="mailto:mailscanner@lists.mailscanner.info" target="_blank">mailscanner@lists.mailscanner.info</a><br>
> <mailto:<a href="mailto:mailscanner@lists.mailscanner.info" target="_blank">mailscanner@lists.mailscanner.info</a>><br>
> > <mailto:<a href="mailto:mailscanner@lists.mailscanner.info" target="_blank">mailscanner@lists.mailscanner.info</a><br>
> <mailto:<a href="mailto:mailscanner@lists.mailscanner.info" target="_blank">mailscanner@lists.mailscanner.info</a>>><br>
> > <a href="http://lists.mailscanner.info/mailman/listinfo/mailscanner" rel="noreferrer" target="_blank">http://lists.mailscanner.info/mailman/listinfo/mailscanner</a><br>
> ><br>
> ><br>
> ><br>
> > --<br>
> > Shawn Iverson, CETL<br>
> > Director of Technology<br>
> > Rush County Schools<br>
> > 765-932-3901 x1171<br>
> > <a href="mailto:iversons@rushville.k12.in.us" target="_blank">iversons@rushville.k12.in.us</a><br>
> <mailto:<a href="mailto:iversons@rushville.k12.in.us" target="_blank">iversons@rushville.k12.in.us</a>><br>
> <mailto:<a href="mailto:iversons@rushville.k12.in.us" target="_blank">iversons@rushville.k12.in.us</a><br>
> <mailto:<a href="mailto:iversons@rushville.k12.in.us" target="_blank">iversons@rushville.k12.in.us</a>>><br>
> ><br>
> ><br>
> <br>
> -- <br>
> David Jones<br>
> <br>
> <br>
> <br>
> -- <br>
> Shawn Iverson, CETL<br>
> Director of Technology<br>
> Rush County Schools<br>
> 765-932-3901 x1171<br>
> <a href="mailto:iversons@rushville.k12.in.us" target="_blank">iversons@rushville.k12.in.us</a> <mailto:<a href="mailto:iversons@rushville.k12.in.us" target="_blank">iversons@rushville.k12.in.us</a>><br>
> <br>
> <br>
<br>
<br>
-- <br>
David Jones<br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="m_5017245380047933853m_-6216490641821755777m_6234903770055031370m_3110263751911545936gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><div dir="ltr">Shawn Iverson, CETL<div>Director of Technology</div><div>Rush County Schools</div><div>765-932-3901 x1171</div><div><a href="mailto:iversons@rushville.k12.in.us" target="_blank">iversons@rushville.k12.in.us</a></div><div><br></div><div><img src="https://docs.google.com/uc?export=download&id=0Bw5iD0ToYvs_cy1OZFNIZ0drYVU&revid=0Bw5iD0ToYvs_UitIcHVIWkJVVTl2VGpxVUE0d0FQcHBIRXk4PQ" width="96" height="96" style="font-size:12.8px"><img src="https://docs.google.com/uc?export=download&id=0Bw5iD0ToYvs_Zkh4eEs3R01yWXc&revid=0Bw5iD0ToYvs_QWpBK2Y2ajJtYjhOMDRFekZwK2xOamk5Q3Y0PQ" width="89" height="96"></div><div><img src="https://docs.google.com/uc?export=download&id=1aBrlQou4gjB04FY-twHN_0Dn3GHVNxqa&revid=0Bw5iD0ToYvs_RnQ0eDhHcm95WHBFdkNRbXhQRXpoYkR6SEEwPQ" style="font-size:12.8px"><br></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="m_5017245380047933853m_-6216490641821755777m_6234903770055031370gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><div dir="ltr">Shawn Iverson, CETL<div>Director of Technology</div><div>Rush County Schools</div><div>765-932-3901 x1171</div><div><a href="mailto:iversons@rushville.k12.in.us" target="_blank">iversons@rushville.k12.in.us</a></div><div><br></div><div><img src="https://docs.google.com/uc?export=download&id=0Bw5iD0ToYvs_cy1OZFNIZ0drYVU&revid=0Bw5iD0ToYvs_UitIcHVIWkJVVTl2VGpxVUE0d0FQcHBIRXk4PQ" width="96" height="96" style="font-size:12.8px"><img src="https://docs.google.com/uc?export=download&id=0Bw5iD0ToYvs_Zkh4eEs3R01yWXc&revid=0Bw5iD0ToYvs_QWpBK2Y2ajJtYjhOMDRFekZwK2xOamk5Q3Y0PQ" width="89" height="96"></div><div><img src="https://docs.google.com/uc?export=download&id=1aBrlQou4gjB04FY-twHN_0Dn3GHVNxqa&revid=0Bw5iD0ToYvs_RnQ0eDhHcm95WHBFdkNRbXhQRXpoYkR6SEEwPQ" style="font-size:12.8px"><br></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="m_5017245380047933853m_-6216490641821755777gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><div dir="ltr">Shawn Iverson, CETL<div>Director of Technology</div><div>Rush County Schools</div><div>765-932-3901 x1171</div><div><a href="mailto:iversons@rushville.k12.in.us" target="_blank">iversons@rushville.k12.in.us</a></div><div><br></div><div><img src="https://docs.google.com/uc?export=download&id=0Bw5iD0ToYvs_cy1OZFNIZ0drYVU&revid=0Bw5iD0ToYvs_UitIcHVIWkJVVTl2VGpxVUE0d0FQcHBIRXk4PQ" width="96" height="96" style="font-size:12.8px"><img src="https://docs.google.com/uc?export=download&id=0Bw5iD0ToYvs_Zkh4eEs3R01yWXc&revid=0Bw5iD0ToYvs_QWpBK2Y2ajJtYjhOMDRFekZwK2xOamk5Q3Y0PQ" width="89" height="96"></div><div><img src="https://docs.google.com/uc?export=download&id=1aBrlQou4gjB04FY-twHN_0Dn3GHVNxqa&revid=0Bw5iD0ToYvs_RnQ0eDhHcm95WHBFdkNRbXhQRXpoYkR6SEEwPQ" style="font-size:12.8px"><br></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="m_5017245380047933853gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><div dir="ltr">Shawn Iverson, CETL<div>Director of Technology</div><div>Rush County Schools</div><div>765-932-3901 x1171</div><div><a href="mailto:iversons@rushville.k12.in.us" target="_blank">iversons@rushville.k12.in.us</a></div><div><br></div><div><img src="https://docs.google.com/uc?export=download&id=0Bw5iD0ToYvs_cy1OZFNIZ0drYVU&revid=0Bw5iD0ToYvs_UitIcHVIWkJVVTl2VGpxVUE0d0FQcHBIRXk4PQ" width="96" height="96" style="font-size:12.8px"><img src="https://docs.google.com/uc?export=download&id=0Bw5iD0ToYvs_Zkh4eEs3R01yWXc&revid=0Bw5iD0ToYvs_QWpBK2Y2ajJtYjhOMDRFekZwK2xOamk5Q3Y0PQ" width="89" height="96"></div><div><img src="https://docs.google.com/uc?export=download&id=1aBrlQou4gjB04FY-twHN_0Dn3GHVNxqa&revid=0Bw5iD0ToYvs_RnQ0eDhHcm95WHBFdkNRbXhQRXpoYkR6SEEwPQ" style="font-size:12.8px"><br></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><div dir="ltr">Shawn Iverson, CETL<div>Director of Technology</div><div>Rush County Schools</div><div>765-932-3901 x1171</div><div><a href="mailto:iversons@rushville.k12.in.us" target="_blank">iversons@rushville.k12.in.us</a></div><div><br></div><div><img src="https://docs.google.com/uc?export=download&id=0Bw5iD0ToYvs_cy1OZFNIZ0drYVU&revid=0Bw5iD0ToYvs_UitIcHVIWkJVVTl2VGpxVUE0d0FQcHBIRXk4PQ" width="96" height="96" style="font-size:12.8px"><img src="https://docs.google.com/uc?export=download&id=0Bw5iD0ToYvs_Zkh4eEs3R01yWXc&revid=0Bw5iD0ToYvs_QWpBK2Y2ajJtYjhOMDRFekZwK2xOamk5Q3Y0PQ" width="89" height="96"></div><div><img src="https://docs.google.com/uc?export=download&id=1aBrlQou4gjB04FY-twHN_0Dn3GHVNxqa&revid=0Bw5iD0ToYvs_RnQ0eDhHcm95WHBFdkNRbXhQRXpoYkR6SEEwPQ" style="font-size:12.8px"><br></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>