All Projects → LTD-Beget → Syncookied

LTD-Beget / Syncookied

Licence: gpl-2.0
syn flood protection

Programming Languages

rust
11053 projects

Projects that are alternatives of or similar to Syncookied

Proximac
An open-source alternative to proxifier
Stars: ✭ 1,076 (+292.7%)
Mutual labels:  tcp, traffic
Monconn
A TCP connection monitoring tool written in Go.
Stars: ✭ 69 (-74.82%)
Mutual labels:  tcp, traffic
Pingtunnel
ping tunnel is a tool that advertises tcp/udp/socks5 traffic as icmp traffic for forwarding.
Stars: ✭ 1,904 (+594.89%)
Mutual labels:  tcp, traffic
STUP-Protocol
Secure/Speedup TCP-like UDP protocol
Stars: ✭ 12 (-95.62%)
Mutual labels:  tcp
SmartTrafficIntersection
Another AI toy project, of a traffic intersection controlled by a Reinforcement Learning AI agent to optimize traffic flow in an intersection of vehicles or pedestrians
Stars: ✭ 30 (-89.05%)
Mutual labels:  traffic
hereR
R package that provides an interface to the HERE REST APIs: Geocoder API, Routing API, Traffic API, Public Transit API and Destination Weather API. Locations and routes are returned as 'sf' objects.
Stars: ✭ 72 (-73.72%)
Mutual labels:  traffic
Ipcserviceframework
.NET Core Inter-process communication framework
Stars: ✭ 268 (-2.19%)
Mutual labels:  tcp
jrinetd
Jrinetd is a network TCP port redirector/forward proxy (like rinetd) with extra features like connection Failover, LoadBalancing and Clustering. In pure Java (NIO)
Stars: ✭ 20 (-92.7%)
Mutual labels:  tcp
Pirsch
Pirsch is a drop-in, server-side, no-cookie, and privacy-focused analytics solution for Go.
Stars: ✭ 257 (-6.2%)
Mutual labels:  traffic
edu cpp IOCP
IOCP 실습
Stars: ✭ 49 (-82.12%)
Mutual labels:  tcp
ethereum-dissectors
🔍Wireshark dissectors for Ethereum devp2p protocols
Stars: ✭ 82 (-70.07%)
Mutual labels:  tcp
http-connection-lifecycle
Complete and detailed explanation of HTTP connection lifecycle
Stars: ✭ 43 (-84.31%)
Mutual labels:  tcp
lunaticlog
Fake HTTP log generator module, test if your monitor system can survive under the log spikes.
Stars: ✭ 35 (-87.23%)
Mutual labels:  traffic
EdgeAdmin
CDN & WAF集群管理系统。
Stars: ✭ 199 (-27.37%)
Mutual labels:  tcp
Tcptunnel
A simple TCP port forwarder.
Stars: ✭ 259 (-5.47%)
Mutual labels:  tcp
extension-networking
Library developed for OpenFL to facilitate connections between applications, using TCP sockets, and following the scheme of event-driven programming.
Stars: ✭ 29 (-89.42%)
Mutual labels:  tcp
Awesome Ecommerce Stack
💰 Popular marketing tools and add-ons used by 10,000+ of the top e-commerce stores.
Stars: ✭ 255 (-6.93%)
Mutual labels:  traffic
anytunnel
内网穿透,内网穿透代理服务器,商用内网穿透代理系统,内网穿透平台,内网穿透多用户会员系统。
Stars: ✭ 115 (-58.03%)
Mutual labels:  tcp
proxy
A simple golang tcp proxy.
Stars: ✭ 101 (-63.14%)
Mutual labels:  tcp
Traffic-Prediction-Open-Code-Summary
Summary of open source code for deep learning models in the field of traffic prediction
Stars: ✭ 58 (-78.83%)
Mutual labels:  traffic

syncookied

syncookied logo

Build Status

syncookied emulates linux kernel syncookie functionality by intercepting SYN packets and sending replies to them using the same cookie generation alghorithm. It can achieve better performance under SYN flood attacks thanks to kernel bypass (netmap).

Installation

  1. Install rust (instructions here: https://www.rust-lang.org/en-US/downloads.html)
  2. Install build-essential and libpcap-dev or equivalent package for your distribution
  3. Install netmap. Make sure netmap.h / netmap_user.h can be found in /usr/include. Alternative you can point CFLAGS variable to their location: example.
  4. run cargo build --release, resulting binary will be found in target/release/syncookied.

Note: we use AVX-accelerated SHA1 function by default. SSE3 implementation is also available under sse3 feature flag, i.e.: cargo build --features=sse3 --no-default-features --release.

How to run

On server you want to protect

  1. Install tcpsecrets linux kernel mode to expose tcp syncookie key and timestamp
  2. Start syncookied in server mode: syncookied server <proto://ip:port>. Running this commands automatically starts a TCP or UDP server on specified ip/port and sets net.ipv4.tcp_syncookies to 2 on first request.

On server you want to use for packet processing

  1. Install netmap and make sure it works (pkt-gen)

  2. Disable NIC offloading features on the interface you want to use (eth2 here):

    ethtool -K eth2 gro off gso off tso off lro off rx off tx off 
    ethtool -A eth2 rx off tx off
    ethtool -G eth2 rx 2048 tx 2048
    
  3. Set up queues and affinities. Here we bind 12 queues to first 12 cpu cores:

    QUEUES=12
    ethtool -L eth2 combined $QUEUES
    ./set_irq_affinity -x 0-11 eth2
    

    set_irq_affinity is available at https://github.com/majek/ixgbe/blob/master/scripts/set_irq_affinity

  4. Create hosts.yml file in the working directory, which looks like this

    - ip: 185.50.25.4
      secrets_addr: udp://192.168.3.231:1488
      mac: 0c:c4:7a:6a:fa:bf
    

Here ip is external ip you want to protect, secrets_addr is the address of syncookied server running on protected host, and mac is its MAC address.

  1. Run syncookied -i eth2. It will print something like this:

    Configuration: 185.50.25.4 -> c:c4:7a:6a:fa:bf
    interfaces: [Rx: eth2/3c:fd:fe:9f:a8:82, Tx: eth2/3c:fd:fe:9f:a8:82] Cores: 24
    12 Rx rings @ eth2, 12 Tx rings @ eth2 Queue: 1048576
    Starting RX thread for ring 0 at eth2
    Starting TX thread for ring 0 at eth2
    Uptime reader for 185.50.25.4 starting
    ...
    
  2. Configure your network equipment to direct traffic for protected ip to syncookied.

  3. You can reload configuration at any time by changing hosts.yml and sending HUP signal to syncookied. It will print something like this:

    Uptime reader for 185.50.25.4 exiting
    All uptime readers dead
    Old readers are dead, all hail to new readers
    Uptime reader for 185.50.25.4 starting
    ...
    
  4. Enjoy your ddos protection

Notes

syncookied has some options you may want to tune, see syncookied --help. If you have more than 1 interface on your server, you may want to look into -O to use second one for TX. This greatly improves performance and latency as forwarding and syn-reply traffic is separated.

Traffic filtering

It's possible to filter traffic by adding "filters" section to host configuration like this:

- ip: 185.50.25.4
  secrets_addr: 127.0.0.1:1488
  mac: 0c:c4:7a:6b:0a:78
  filters:
   tcp and dst port 53: drop
   tcp and dst port 22: pass
   default: pass

Filters are written in pcap syntax. Consult pcap-filter(7) for more information. Default policy is "pass". It can be changed by using default key. Note that filtering happens on layer 4.

Troubleshooting

Please check the FAQ before filing an issue.

Need help?

Join us on Telegram: https://telegram.me/syncookied

Performance

syncookied under 12.65 Mpps syn flood attack utilizing 12 cores of Xeon E5-2680v3: syncookied perf

License

syncookied is distributed under the term of GPLv2.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].