This documentation is no longer maintained and exists for historical purposes. The current documentation is located at

Hyperscan guide for Ubuntu


"Hyperscan is a high-performance multiple regex matching library."

In Suricata it can be used to perform multi pattern matching (mpm). Support was implemented by Justin Viiret and Jim Xu from Intel:,


To use Suricata with Hyperscan support, install dependencies:

apt-get install cmake ragel

libboost headers

Hyperscan needs the libboost headers from 1.58+.

On Ubuntu 15.10 or 16.04+, simply do:

apt-get install libboost-dev


Trusty has 1.57, so it's too old. We can grab a newer libboost version, but we don't install it system wide. It's only the headers we care about during compilation of Hyperscan.

sudo apt-get install python-dev libbz2-dev
tar xvzf boost_1_60_0.tar.gz
cd boost_1_60_0
./ --prefix=~/tmp/boost-1.60
./b2 install


We'll install version 4.2.0.

git clone
cd hyperscan
mkdir build
cd build

If you have your own libboost headers, use this cmake line instead:

cmake -DBUILD_STATIC_AND_SHARED=1 -DBOOST_ROOT=~/tmp/boost-1.60 ../

Finally, make and make install:

sudo make install

Compilation can take a long time, but it should in the end look something like this:

Install the project...
-- Install configuration: "RELWITHDEBINFO" 
-- Installing: /usr/local/lib/pkgconfig/libhs.pc
-- Up-to-date: /usr/local/include/hs/hs.h
-- Up-to-date: /usr/local/include/hs/hs_common.h
-- Up-to-date: /usr/local/include/hs/hs_compile.h
-- Up-to-date: /usr/local/include/hs/hs_runtime.h
-- Installing: /usr/local/lib/libhs_runtime.a
-- Installing: /usr/local/lib/
-- Installing: /usr/local/lib/
-- Installing: /usr/local/lib/
-- Installing: /usr/local/lib/libhs.a
-- Installing: /usr/local/lib/
-- Installing: /usr/local/lib/
-- Installing: /usr/local/lib/

Note that you may have to add /usr/local/lib to your ld search path

echo "/usr/local/lib" | sudo tee --append /etc/
sudo ldconfig



Suricata's installation is now quite standard.

It's possible to pass --with-libhs-includes=/usr/local/include/hs/ --with-libhs-libraries=/usr/local/lib/, although by default this shouldn't be necessary. Suricata should pick up Hyperscan's pkg-config file automagically.

When Suricata's compilation succeeded, you should have:

suricata --build-info|grep Hyperscan
  Hyperscan support:                       yes

Using Hyperscan

To use the hyperscan support edit your suricata.yaml and change the mpm-algo value to 'hs'.

Alternatively, use this commandline option: --set mpm-algo=hs