DoS attack protection
Written by vaheeD on January 2, 2013
In general
DoS (Denial of Service) attack can cause overloading of router. Which means what CPU usage goes to 100% and router could be unreachable with timeouts. Every operations on packets which can take significant CPU power like firewalling(filter, nat, mangle), logging, queues can cause overloading if too much packets per second arrives to router.
Generally there is no perfect solution to protect against DoS attacks. Every service could be overloaded by too much requests. So there are only some methods for minimization impact of attack.
- Get more powerfull router or server
- Get more faster uplink
- Reduce number of firewall rules, queues and other packet handling actions
- Track attack path and block it closer to source (by upstream provider)
Types
TCP SYN flood
More info: SYN flood.
Diagnose
- Are there too much connections with syn-sent state present?
/ip firewall connection print
- Is too much packets per second going through interface?
/interface monitor-traffic ether3
- Is CPU usage 100%?
/system resource monitor
- Are there too much suspicious connections?
/tool torch
Protection
- Limit incoming connections
Address with too much connections can be added to address list for futher blocking.
/ip firewall filter add chain=input protocol=tcp connection-limit=LIMIT,32 \ action=add-src-to-address-list address-list=blocked-addr address-list-timeout=1d
where LIMIT is max. number of connection per IP. LIMIT should be 100 or higher as many services use multiple connection (HTTP, Torrent, other P2P programs).
- Action tarpit
Instead of simply droping attackers packets(action=drop) router can capture and hold connections and with enough powerfull router is can kill the attacker.
/ip firewall filter add chain=input protocol=tcp src-address-list=blocked-addr \ connection-limit=3,32 action=tarpit
- SYN filtering
Some advanced filtering can by applied to tcp packet state.
/ip firewall filter add chain=forward protocol=tcp tcp-flags=syn connection-state=new \ action=jump jump-target=SYN-Protect comment="SYN Flood protect" disabled=yes /ip firewall filter add chain=SYN-Protect protocol=tcp tcp-flags=syn limit=400,5 connection-state=new \ action=accept comment="" disabled=no /ip firewall filter add chain=SYN-Protect protocol=tcp tcp-flags=syn connection-state=new \ action=drop comment="" disabled=no
“syn limit=400” is a threshold, just enable rule in forward for syn packets to get dropped (for excessive amount of new connection)
- SYN cookies
More info: SYN cookies
/ip firewall connection tracking set tcp-syncookie=yes