DDoS protection. Using Netfilter/iptables. Jesper Dangaard Brouer Senior Kernel Engineer, Red Hat Network-Services-Team DevConf.



Similar documents
Secure use of iptables and connection tracking helpers

The IPTV-Analyzer OpenSourceDays 2012

Main functions of Linux Netfilter

Intro to Linux Kernel Firewall

Stateful Firewalls. Hank and Foo

Denial of Service Attacks

Best Practices Guide: Vyatta Firewall. SOFTWARE-BASED NETWORKING & SECURITY FROM VYATTA February 2013

Analysis on Some Defences against SYN-Flood Based Denial-of-Service Attacks

Optimisacion del ancho de banda (Introduccion al Firewall de Linux)

Netfilter Performance Testing

Telematics. 14th Tutorial - Proxies, Firewalls, P2P

Network Security. Chapter 9. Attack prevention, detection and response. Attack Prevention. Part I: Attack Prevention

Linux firewall. Need of firewall Single connection between network Allows restricted traffic between networks Denies un authorized users

Attack Lab: Attacks on TCP/IP Protocols

CS 640 Introduction to Computer Networks. Network security (continued) Key Distribution a first step. Lecture24

Open Source Firewall

How To Understand A Firewall

Linux Firewall Wizardry. By Nemus

Network Security: Network Flooding. Seungwon Shin GSIS, KAIST

Netfilter / IPtables

Secure Software Programming and Vulnerability Analysis

Protecting and controlling Virtual LANs by Linux router-firewall

Content Distribution Networks (CDN)

Removing The Linux Routing Cache

CIT 480: Securing Computer Systems. Firewalls

Denial of Service Attacks. Notes derived from Michael R. Grimaila s originals

OpenFlow with Intel Voravit Tanyingyong, Markus Hidell, Peter Sjödin

Using SYN Flood Protection in SonicOS Enhanced

Module: Firewalls. Professor Patrick McDaniel Spring CMPSC443 - Introduction to Computer and Network Security

Track 2 Workshop PacNOG 7 American Samoa. Firewalling and NAT

About Firewall Protection

Overview of Network Security The need for network security Desirable security properties Common vulnerabilities Security policy designs

CSCE 465 Computer & Network Security

Packet filtering with Linux

How To Set Up An Ip Firewall On Linux With Iptables (For Ubuntu) And Iptable (For Windows)

Denial Of Service. Types of attacks

Chapter 28 Denial of Service (DoS) Attack Prevention

CS Computer and Network Security: Firewalls

Firewalls Netasq. Security Management by NETASQ

CSC574 - Computer and Network Security Module: Firewalls

CIT 480: Securing Computer Systems. Firewalls

Firewalls. Pehr Söderman KTH-CSC

CYBER ATTACKS EXPLAINED: PACKET CRAFTING

Firewalls. Chien-Chung Shen

General Network Security

CSE331: Introduction to Networks and Security. Lecture 12 Fall 2006

Guide to DDoS Attacks December 2014 Authored by: Lee Myers, SOC Analyst

Internet infrastructure. Prof. dr. ir. André Mariën

CSE543 - Computer and Network Security Module: Firewalls

Precision Time Protocol on Linux ~ Introduction to linuxptp

Seminar Computer Security

Stateful Connection Tracking & Stateful NAT

Netfilter s connection tracking system

Firewalls, NAT and Intrusion Detection and Prevention Systems (IDS)

Linux Networking Basics

Matthew Rossmiller 11/25/03

SY system so that an unauthorized individual can take over an authorized session, or to disrupt service to authorized users.

page 1 DNS Rate Limiting W. Matthijs Mekking matthijs@nlnetlabs.nl 28 Feb 2013 Stichting NLnet Labs

Network Security Exercise 10 How to build a wall of fire

CIS 433/533 - Computer and Network Security Firewalls

CS5008: Internet Computing

Passive Network Traffic Analysis: Understanding a Network Through Passive Monitoring Kevin Timm,

Dos & DDoS Attack Signatures (note supplied by Steve Tonkovich of CAPTUS NETWORKS)

Black Box Analysis and Attacks of Nortel VoIP Implementations

CS Computer and Network Security: Firewalls

Building a Home Gateway/Firewall with Linux (aka Firewalling and NAT with iptables )

An API for dynamic firewall control and its implementation for Linux Netfilter

+ iptables. packet filtering && firewall

1. Firewall Configuration

Scaling to Millions of Simultaneous Connections

Chapter 7. Firewalls

Network Security Management

Security Technology White Paper

co Characterizing and Tracing Packet Floods Using Cisco R

Network Security. Chapter 3. Cornelius Diekmann. Version: October 21, Lehrstuhl für Netzarchitekturen und Netzdienste Institut für Informatik

Introduction to Firewalls Open Source Security Tools for Information Technology Professionals

Improving DNS performance using Stateless TCP in FreeBSD 9

Linux: 20 Iptables Examples For New SysAdmins

Chapter 8 Security Pt 2

Security vulnerabilities in the Internet and possible solutions

Cryptography and network security

1. Introduction. 2. DoS/DDoS. MilsVPN DoS/DDoS and ISP. 2.1 What is DoS/DDoS? 2.2 What is SYN Flooding?

Distributed Denial of Service Attacks & Defenses

VENKATAMOHAN, BALAJI. Automated Implementation of Stateful Firewalls in Linux. (Under the direction of Ting Yu.)

WHITE PAPER. FortiGate DoS Protection Block Malicious Traffic Before It Affects Critical Applications and Systems

Ulogd2, Advanced firewall logging

TCP SYN Flood - Denial of Service Seung Jae Won University of Windsor wons@uwindsor.ca

Announcements. No question session this week

Port Scanning and Vulnerability Assessment. ECE4893 Internetwork Security Georgia Institute of Technology

Managing Multiple Internet Connections with Shorewall

Client Server Registration Protocol

Ignoring the Great Firewall of China

Network and Services Discovery

Using VyOS as a Firewall

IPv6/IPv4 Automatic Dual Authentication Technique for Campus Network

Transcription:

DDoS protection Using Netfilter/iptables Jesper Dangaard Brouer Senior Kernel Engineer, Red Hat Network-Services-Team DevConf.cz Feb 2014 1/36 Email: brouer@redhat.com DDoS protection using / netoptimizer@brouer.com Netfilter/iptables / hawk@kernel.org

Who am I Name: Jesper Dangaard Brouer Linux Kernel Developer at Red Hat Edu: Computer Science for Uni. Copenhagen Focus on Network, Dist. sys and OS Linux user since 1996, professional since 1998 Sysadm, Kernel Developer, Embedded OpenSource projects, author of ADSL-optimizer, CPAN IPTables::libiptc, IPTV-Analyzer Patches accepted into Linux kernel, iproute2, iptables, libpcap and Wireshark Organizer of Netfilter Workshop 2013 2/36

What will you learn? Linux Kernel is vulnerable to simple SYN attacks End-host mitigation's already implemented in kernel show it is not enough Kernel: serious "listen" socket scalability problem solution is stalled... how to work-around this Firewall-based solution: synproxy (iptables/netfilter) How fast is stateful firewalling Where is our pain points Learn Netfilter tricks: boost performance a factor 10 3/36

First: Basic NIC tuning 101 All tests in presentation Basic tuning First kill irqbalance NIC hardware queue, are CPU aligned Disable Ethernet flow-control Intel ixgbe hw/driver issue single blocked hw queue blocks others Fix in kernel v3.5.0 commit 3ebe8fdeb0 (ixgbe: Set Drop_EN bit when multiple Rx queues are present w/o flow control) 4/36

Focus: Flooding DoS attack Denial of Service (DoS) attacks Focus: TCP flooding attacks Attacking the 3-Way HandShake (3WHS) End-host resource attack SYN flood SYN-ACK floods ACK floods (3 rd packet in 3WHS) Attacker often spoofs src IP Described in RFC 4987: TCP SYN Flooding Attacks and Common Mitigations 5/36

Linux current end-host mitigations Jargon RFC 4987 (TCP SYN Flooding Attacks and Common Mitigations) Linux uses hybrid solution SYN cache Mini request socket Minimize state, delay full state alloc SYN backlog of outstanding request sockets Above limit, use SYN cookies 6/36

Details: SYN "cache" savings Small initial TCB (Transmission Control Block) struct request_sock (size 56 bytes) mini sock to represent a connection request But alloc size is 112 bytes SLAB behind have sizeof(struct tcp_request_sock) Structs embedded in each-other 56 bytes == struct request_sock 80 bytes == struct inet_request_sock 112 bytes == struct tcp_request_sock Full TCB (struct inet_sock) is 832 bytes (note, sizes will increase/change in more recent kernels) 7/36

Details: Increasing SYN backlog Not recommended to increase for DoS Only increase, if legitimate traffic cause log: TCP: Possible SYN flooding... Increasing SYN backlog is not obvious Adjust all these: /proc/sys/net/ipv4/tcp_max_syn_backlog /proc/sys/net/core/somaxconn Syscall listen(int sockfd, int backlog); 8/36

SYN cookies Simplified description SYN packet don't create any local state SYN-ACK packet ACK packet Encode state in SEQ# (and TCP options) Contains SEQ#+1 (and TCP timestamp) Recover state SHA hash is computed with local secret Validate (3WHS) ACK packet state 9/36

Details: SYN-cookies SYN cookies SHA calculation is expensive SNMP counters (Since kernel v3.1) TCPReqQFullDoCookies : number of times a SYNCOOKIE was replied to client TCPReqQFullDrop : number of times a SYN request was dropped because syncookies were not enabled. Always on option /proc/sys/net/ipv4/tcp_syncookies = 2 10/36

So, what is the problem? Good End-Host counter-measurements Problem: LISTEN state scalability problem Vulnerable for all floods SYN, SYN-ACK and ACK floods Numbers: Xeon CPU X5550 10G ixgbe NO LISTEN socket: LISTEN socket: 2.904.128 pkts/sec -- SYN attack 252.032 pkts/sec -- SYN attack 336.576 pkts/sec -- SYN+ACK attack 331.072 pkts/sec -- ACK attack 11/36

Problem: SYN-cookie vs LISTEN lock Main problem: SYN cookies live under LISTEN lock I proposed SYN brownies fix (May 2012) http://thread.gmane.org/gmane.linux.network/232238 Got rejected, because not general solution e.g. don't handle SYN-ACK and 3WHS NFWS2013 got clearance as a first step solution Need to forward-port patches (Bug 1057364 - RFE: Parallel SYN cookies handling) 12/36

Firewall and Proxy solutions Network-Based Countermeasures Wesley M. Eddy, describes SYN-proxy In Cisco: The Internet Protocol Journal - Volume 9, Number 4, 2006, link: http://goo.gl/ac1aaz Netfilter: iptables target SYNPROXY Avail in kernel 3.13 and RHEL7 By Patrick McHardy, Martin Topholm and Me Also works on localhost General solution Solves SYN and ACK floods Indirect trick also solves SYN+ACK 13/36

SYN proxy concept 14/36

Conntrack performance(1) SYNPROXY needs conntrack Will that be a performance issue? Base performance: 2.964.091 pkts/sec -- NO LISTEN sock + no iptables rules 244.129 pkts/sec -- LISTEN sock + no iptables rules Loading conntrack: (SYN flood, causing new conntrack) 435.520 pkts/sec -- NO LISTEN sock + conntrack 172.992 pkts/sec -- LISTEN sock + conntrack Looks bad... but I have some tricks for you ;-) 15/36

Conntrack performance(2) Conntrack (lock-less) lookups are really fast Problem is insert and delete conntracks Use to protect against SYN+ACK and ACK attacks Default netfilter is in TCP loose mode Allow ACK pkts to create new connection Disable via cmd: sysctl -w net/netfilter/nf_conntrack_tcp_loose=0 Take advantage of state INVALID Drop invalid pkts before reaching LISTEN socket iptables -m state --state INVALID -j DROP 16/36

Conntrack perf(3) ACK-attacks ACK attacks, conntrack performance Default loose=1 and pass INVALID pkts 179.027 pkts/sec Loose=0 and and pass INVALID pkts 235.904 pkts/sec (listen lock scaling) Loose=0 and and DROP INVALID pkts 5.533.056 pkts/sec 17/36

Conntrack perf(4) SYN-ACK attack SYN-ACK attacks, conntrack performance SYN-ACKs don't auto create connections Thus, changing loose setting is not important Default pass INVALID pkts (and loose=1 ) 230.348 pkts/sec Default DROP INVALID pkts (and loose=1 ) 5.382.265 pkts/sec Default DROP INVALID pkts (and loose=0 ) 5.408.307 pkts/sec 18/36

Synproxy performance Only conntrack SYN attack problem left Due to conntrack insert lock scaling Base performance: 244.129 pkts/sec -- LISTEN sock + no iptables rules Loading conntrack: (SYN flood, causing new conntrack) 172.992 pkts/sec -- LISTEN sock + conntrack Using SYNPROXY 2.869.824 pkts/sec -- LISTEN sock + synproxy + conntrack 19/36

iptables: synproxy setup(1) Using SYNPROXY target is complicated SYNPROXY works on untracked conntracks In raw table, notrack SYN packets: iptables -t raw -I PREROUTING -i $DEV -p tcp -m tcp --syn \ --dport $PORT -j CT --notrack 20/36

iptables: synproxy setup(2) More strict conntrack handling Need to get unknown ACKs (from 3WHS) to be marked as INVALID state (else a conntrack is just created) Done by sysctl setting: /sbin/sysctl -w net/netfilter/nf_conntrack_tcp_loose=0 21/36

iptables: synproxy setup(3) Catching state: UNTRACKED == SYN packets INVALID == ACK from 3WHS Using SYNPROXY target: iptables -A INPUT -i $DEV -p tcp -m tcp --dport $PORT \ -m state --state INVALID,UNTRACKED \ -j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1460 22/36

iptables: synproxy setup(4) Trick to catch SYN-ACK floods Drop rest of state INVALID, contains SYN-ACK iptables -A INPUT -i $DEV -p tcp -m tcp --dport $PORT \ -m state --state INVALID -j DROP Enable TCP timestamping Because SYN cookies uses TCP options field /sbin/sysctl -w net/ipv4/tcp_timestamps=1 23/36

iptables: synproxy setup(5) Conntrack entries tuning Max possible entries 2 Mill 288 bytes * 2 Mill = 576.0 MB net/netfilter/nf_conntrack_max=2000000 IMPORTANT: Also adjust hash bucket size /proc/sys/net/netfilter/nf_conntrack_buckets writeable via /sys/module/nf_conntrack/parameters/hashsize Hash 8 bytes * 2Mill = 16 MB echo 2000000 > /sys/module/nf_conntrack/parameters/hashsize 24/36

Performance SYNPROXY Script iptables_synproxy.sh avail here: https://github.com/netoptimizer/network-testing/blob/master/iptables/ip tables_synproxy.sh Using SYNPROXY under attack types: 2.869.824 pkts/sec SYN-flood 4.948.480 pkts/sec ACK-flood 5.653.120 pkts/sec SYN+ACK-flood 25/36

SYNPROXY parameters The parameters given to SYNPROXY target Must match the backend-server TCP options Manual setup (helper tool nfsynproxy) Only one setting per rule Not useful for DHCP based network Future plan Auto detect server TCP options Simply allow first SYN through Catch SYN-ACK and decode options (RHBZ 1059679 - RFE: Synproxy: auto detect TCP options) 26/36

Real-life(1): Handle 900 Kpps 27/36

Real-life(2): SHA sum expensive SYN cookie SHA sum is expensive Bug 1057352 - RFE: Improve SYN cookies calculations 28/36

Real-life(3): Out traffic normal 29/36

Issue: Full connection scalability Still exists: Scalability issue with full conn Made it significantly more expensive for attackers (they need real hosts) Future work: fix scalability for Central lock: LISTEN socket lock Central lock: Netfilter new conntracks (Work-in-progress) 30/36

Fixing central conntrack lock Conntrack issue Insert / delete conntracks takes central lock Working on removing this central lock (Based on patch from Eric Dumazet) (RHBZ 1043012 - "netfilter: conntrack: remove the central spinlock") Preliminary results, SYN-flood No LISTEN socket to leave out that issue 435.520 pkts/sec conntrack with central lock 1.626.786 pkts/sec conntrack with parallel lock 31/36

Hack: Multi listen sockets Hack to work-around LISTEN socket lock Simply LISTEN on several ports Use iptables to rewrite/dnat to these ports 32/36

Hack: Full conn hashlimit trick(1) Problem: Full connections still have scalability Partition Internet in /24 subnets (128*256*256 / 2097152 = 4 max hash list) Limit SYN packets e.g. 200 SYN pps per src subnet Mem usage: fairly high Fixed: htable-size 2097152 * 8 bytes = 16.7 MB Variable: entry size 104 bytes * 500000 = 52 MB 33/36

Hack: Full conn hashlimit trick(2) Using hashlimit as work-around Attacker needs many real hosts, to reach full conn scalability limit iptables -t raw -A PREROUTING -i $DEV \ -p tcp -m tcp --dport 80 --syn \ -m hashlimit \ --hashlimit-above 200/sec --hashlimit-burst 1000 \ --hashlimit-mode srcip --hashlimit-name syn \ --hashlimit-htable-size 2097152 \ --hashlimit-srcmask 24 -j DROP 34/36

Alternative usage of "socket" module Avoid using conntrack Use xt_socket module For local socket matching Can filter out 3WHS-ACKs (and other combos) Parameter --nowildcard Problem can still be invalid/flood ACKs Mitigate by limiting e.g.hashlimit Didn't scale as well as expected https://github.com/netoptimizer/network-testing/blob/master/iptables/iptables_loc al_socket_hack.sh 35/36

The End Thanks to Martin Topholm and One.com For providing real-life attack data Download slides here: http://people.netfilter.org/hawk/presentations/devconf2014/ Feedback/rating of talk on: http://devconf.cz/f/37 If unlikely(time for questions) Questions? 36/36

Extra Slides 37/36

Disable helper auto loading Default is to auto load conntrack helpers It is a security risk! Poking holes in your firewall! Disable via cmd: echo 0 > /proc/sys/net/netfilter/nf_conntrack_helper Controlled config example: iptables -t raw -p tcp -p 2121 -j CT --helper ftp Read guide here: https://home.regit.org/netfilter-en/secure-use-of-helpers/ 38/36