<div dir="ltr">Thanks Eric for the info, the shift is actually in address. <div>I rewritten the drop rule to drop only packets that were detected as modbus and now no need for allowing 3 way handshake.</div><div>Then it worked well, both function code as well as address and values filtering. </div><div>Happy Holidays to Everyone</div><div>Alex</div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Dec 23, 2016 at 10:32 AM, Alex Levit <span dir="ltr"><<a href="mailto:alex@bitfidence.com" target="_blank">alex@bitfidence.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hello Everyone,<div><br></div><div>I am new to suricata, so may be missing something basic in understanding how to write rules.</div><div>I am trying to enforce function code 4 (read input registers)  only between Scada and RTU while all others I want to block. The result is that I am able to either block or allow all modbus communication. </div><div><br></div><div>If I add below pass rules:</div><div><br></div><div>pass modbus 10.10.10.1 any -> 10.10.10.2 502 (msg:"Modbus";flow:<wbr>established; modbus:function 4; sid:1004; rev:1;)</div><div>pass modbus 10.10.10.2 502 -> 10.10.10.1 any (msg:"Modbus";flow:<wbr>established; modbus:function 4; sid:1005; rev:1;)</div><div><br></div><div>For some unclear reason, function code 3 is also allowed.</div><div>Removing these rules will block all function codes.</div><div>Attached are drop and pass rules files as well as log files and config.</div><div><br></div><div>Q1: <br></div><div><div>- What am I doing wrong ?</div><div><br class="m_2061478044573045138gmail-Apple-interchange-newline"></div></div><div>Q2</div><div>- The release is still defined "dev". Is that right direction for me to use it if I want to test DNP3 and modbus ?</div><div><br></div><div>Thanks,<br>Alex </div><div><br></div></div>
</blockquote></div><br></div>