1. Advertising
    y u no do it?

    Advertising (learn more)

    Advertise virtually anything here, with CPM banner ads, CPM email ads and CPC contextual links. You can target relevant areas of the site and show ads based on geographical location of the user if you wish.

    Starts at just $1 per CPM or $0.10 per CPC.

how to avoid SYN_RECV ?

Discussion in 'Security' started by cakka, May 18, 2011.

  1. #1
    Hello,

    i am learning ubuntu and my server get SYN Flood
    how to clear this problem ?

    i have try :
    echo 1 > /proc/sys/net/ipv4/tcp_syncookies
    
    on /etc/sysctl.conf
    
    net.ipv4.tcp_syncookies = 1
    
    then
    
    /sbin/sysctl -p /etc/sysctl.conf
    
    
    Code (markup):
    but when i check using :

    /sbin/sysctl -a
    Code (markup):
    it still :
    net.ipv4.tcp_syncookies = 0
    Code (markup):
    please help me, thanks
     
    cakka, May 18, 2011 IP
  2. raffo77

    raffo77 Active Member

    Messages:
    234
    Likes Received:
    0
    Best Answers:
    0
    Trophy Points:
    51
    #2
    Try this script

    
    
    #!/bin/sh
    
    # For debugging use iptables -v.
    IPTABLES="/sbin/iptables"
    MODPROBE="/sbin/modprobe"
    RMMOD="/sbin/rmmod"
    
    # Logging options.
    #------------------------------------------------------------------------------
    LOG="LOG --log-level debug --log-tcp-sequence --log-tcp-options"
    LOG="$LOG --log-ip-options"
    
    
    # Defaults for rate limiting
    #------------------------------------------------------------------------------
    RLIMIT="-m limit --limit 3/s --limit-burst 8"
    
    
    
    # Load required kernel modules
    #------------------------------------------------------------------------------
    $MODPROBE ip_conntrack
    $MODPROBE ip_conntrack_ftp
    $MODPROBE ip_tables
    $MODPROBE iptable_filter
    $MODPROBE ipt_LOG
    $MODPROBE ipt_state
    
    
    # Disable IP forwarding.
    echo 0 > /proc/sys/net/ipv4/ip_forward
    
    # Enable IP spoofing protection *
    for i in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 1 > $i; done
    
    # Protect against SYN flood attacks *
    echo 1 > /proc/sys/net/ipv4/tcp_syncookies
    
    # Ignore all incoming ICMP echo requests *
    echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
    
    # Ignore ICMP echo requests to broadcast *
    echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
    
    # Log packets with impossible addresses. *
    for i in /proc/sys/net/ipv4/conf/*/log_martians; do echo 1 > $i; done
    
    # Don't log invalid responses to broadcast *
    echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
    
    # Don't accept or send ICMP redirects. *
    for i in /proc/sys/net/ipv4/conf/*/accept_redirects; do echo 0 > $i; done
    for i in /proc/sys/net/ipv4/conf/*/send_redirects; do echo 0 > $i; done
    
    # Don't accept source routed packets. *
    for i in /proc/sys/net/ipv4/conf/*/accept_source_route; do echo 0 > $i; done
    
    
    
    # Drop everything by default.*
    $IPTABLES -P INPUT DROP
    $IPTABLES -P FORWARD DROP
    $IPTABLES -P OUTPUT DROP
    
    # Set the nat/mangle/raw tables' chains to ACCEPT
    $IPTABLES -t nat -P PREROUTING ACCEPT
    $IPTABLES -t nat -P OUTPUT ACCEPT
    $IPTABLES -t nat -P POSTROUTING ACCEPT
    
    $IPTABLES -t mangle -P PREROUTING ACCEPT
    $IPTABLES -t mangle -P INPUT ACCEPT
    $IPTABLES -t mangle -P FORWARD ACCEPT
    $IPTABLES -t mangle -P OUTPUT ACCEPT
    $IPTABLES -t mangle -P POSTROUTING ACCEPT
    
    # Delete all *
    $IPTABLES -F
    $IPTABLES -t nat -F
    $IPTABLES -t mangle -F
    
    # Delete all *
    $IPTABLES -X
    $IPTABLES -t nat -X
    $IPTABLES -t mangle -X
    
    # Zero all packets and counters. *
    $IPTABLES -Z
    $IPTABLES -t nat -Z
    $IPTABLES -t mangle -Z
    
    # LOG packets, then ACCEPT.
    $IPTABLES -N ACCEPTLOG
    $IPTABLES -A ACCEPTLOG -j $LOG $RLIMIT --log-prefix "ACCEPT "
    $IPTABLES -A ACCEPTLOG -j ACCEPT
    
    # LOG packets, then DROP.
    $IPTABLES -N DROPLOG
    $IPTABLES -A DROPLOG -j $LOG $RLIMIT --log-prefix "DROP "
    $IPTABLES -A DROPLOG -j DROP
    
    # LOG packets, then REJECT.
    # TCP packets are rejected with a TCP reset.
    $IPTABLES -N REJECTLOG
    $IPTABLES -A REJECTLOG -j $LOG $RLIMIT --log-prefix "REJECT "
    $IPTABLES -A REJECTLOG -p tcp -j REJECT --reject-with tcp-reset
    $IPTABLES -A REJECTLOG -j REJECT
    
    
    # Make It Even Harder To Multi-PING
    $IPTABLES  -A INPUT -p icmp -m limit --limit 1/s --limit-burst 2 -j ACCEPT
    $IPTABLES  -A INPUT -p icmp -m limit --limit 1/s --limit-burst 2 -j LOG --log-prefix PING-DROP:
    $IPTABLES  -A INPUT -p icmp -j DROP
    $IPTABLES  -A OUTPUT -p icmp -j ACCEPT
    
    
    # First, drop all fragmented ICMP packets (almost always malicious).
    $IPTABLES -A INPUT -p icmp --fragment -j DROPLOG
    $IPTABLES -A OUTPUT -p icmp --fragment -j DROPLOG
    $IPTABLES -A FORWARD -p icmp --fragment -j DROPLOG
    
    # Allow all ESTABLISHED ICMP traffic.
    $IPTABLES -A INPUT -p icmp -m state --state ESTABLISHED -j ACCEPT $RLIMIT
    $IPTABLES -A OUTPUT -p icmp -m state --state ESTABLISHED -j ACCEPT $RLIMIT
    
    # Allow some parts of the RELATED ICMP traffic, block the rest.
    $IPTABLES -A INPUT -p icmp -m state --state RELATED -j RELATED_ICMP $RLIMIT
    $IPTABLES -A OUTPUT -p icmp -m state --state RELATED -j RELATED_ICMP $RLIMIT
    
    # Allow incoming ICMP echo requests (ping), but only rate-limited.
    $IPTABLES -A INPUT -p icmp --icmp-type echo-request -j ACCEPT $RLIMIT
    
    # Allow outgoing ICMP echo requests (ping), but only rate-limited.
    $IPTABLES -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT $RLIMIT
    
    # Drop any other ICMP traffic.
    $IPTABLES -A INPUT -p icmp -j DROPLOG
    $IPTABLES -A OUTPUT -p icmp -j DROPLOG
    $IPTABLES -A FORWARD -p icmp -j DROPLOG
    
    
    # Allow loopback interface to do anything. *
    $IPTABLES -A INPUT -i lo -j ACCEPT
    $IPTABLES -A OUTPUT -o lo -j ACCEPT
    
    # Allow incoming connections related to existing allowed connections. *
    $IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    
    # Allow outgoing connections EXCEPT invalid *
    $IPTABLES -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
    
    
    
    # We don't care about Milkosoft, Drop SMB/CIFS/etc..
    $IPTABLES -A INPUT -p tcp -m multiport --dports 135,137,138,139,445,1433,1434 -j DROP
    $IPTABLES -A INPUT -p udp -m multiport --dports 135,137,138,139,445,1433,1434 -j DROP
    
    # Explicitly drop invalid incoming traffic
    $IPTABLES -A INPUT -m state --state INVALID -j DROP
    
    # Drop invalid outgoing traffic, too.
    $IPTABLES -A OUTPUT -m state --state INVALID -j DROP
    
    # If we would use NAT, INVALID packets would pass - BLOCK them anyways
    $IPTABLES -A FORWARD -m state --state INVALID -j DROP
    
    # PORT Scanners (stealth also)
    $IPTABLES -A INPUT -m state --state NEW -p tcp --tcp-flags ALL ALL -j DROP
    $IPTABLES -A INPUT -m state --state NEW -p tcp --tcp-flags ALL NONE -j DROP
    
    # Some  anti-spoofing rules
    $IPTABLES -N SYN_FLOOD
    $IPTABLES -A INPUT -p tcp --syn -j SYN_FLOOD
    $IPTABLES -A SYN_FLOOD -m limit --limit 2/s --limit-burst 6 -j RETURN
    $IPTABLES -A SYN_FLOOD -j DROP
    
    # Allow outgoing DNS requests. Few things will work without this.
    $IPTABLES -A OUTPUT -m state --state NEW -p udp --dport 53 -j ACCEPT
    $IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT
    
    # Allow outgoing HTTP requests. Unencrypted, use with care.
    $IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
    
    # Allow outgoing HTTPS requests.
    $IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT
    
    # Allow outgoing SMTPS requests. Do NOT allow unencrypted SMTP!
    # $IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 465 -j ACCEPT
    
    # Allow outgoing "submission" (RFC 2476) requests.
    $IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 587 -j ACCEPT
    
    
    # Allow outgoing SSH requests.
    $IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
    
    # Allow outgoing FTP requests. Unencrypted, use with care.
    $IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 21 -j ACCEPT
    
    
    
    # Allow outgoing MySQL requests. Unencrypted, use with care.
     $IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 3306 -j ACCEPT
    
    
    
    # Allow incoming DNS requests.
    $IPTABLES -A INPUT -m state --state NEW -p udp --dport 53 -j ACCEPT
    $IPTABLES -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT
    
    # Allow incoming HTTP requests.
    $IPTABLES -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
    
    # Allow incoming HTTPS requests.
    $IPTABLES -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT
    
    
    # Allow incoming SMTP requests.
    $IPTABLES -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT
    
    # Allow incoming SSH requests.
    $IPTABLES -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
    
    # Allow incoming FTP requests.
    $IPTABLES -A INPUT -m state --state NEW -p tcp --dport 21 -j ACCEPT
    
    
    # Allow incoming MySQL requests.
     $IPTABLES -A INPUT -m state --state NEW -p tcp --dport 3306 -j ACCEPT
    
    
    
    
    
    
    # Explicitly log and reject everything else.
    #------------------------------------------------------------------------------
    # Use REJECT instead of REJECTLOG if you don't need/want logging.
    $IPTABLES -A INPUT -j REJECTLOG
    $IPTABLES -A OUTPUT -j REJECTLOG
    $IPTABLES -A FORWARD -j REJECTLOG
    
    
    
    
    
    
    exit 0
    
    
    Code (markup):
    you save in a file then you run by: sh file.sh

    RAFFAELE
     
    raffo77, May 21, 2011 IP
  3. ryan1918

    ryan1918 Active Member

    Messages:
    668
    Likes Received:
    8
    Best Answers:
    0
    Trophy Points:
    60
    #3
    You can't block syn's as you need this for every day purposes, and any decent ddos attack will require hardware firewalls which are very expensive.
     
    ryan1918, May 30, 2011 IP
  4. raffo77

    raffo77 Active Member

    Messages:
    234
    Likes Received:
    0
    Best Answers:
    0
    Trophy Points:
    51
    #4
    Can't block synflood but can improve network usage with software firewall. Max pps on 100mbps port are 148.000 and some time are easy to make offline a 100mbps by sending 80.000 pps because the network don't are filter by kernel so the computer/server don't flush the bad tcp packets in the memory and so it have a flood with less than max for the port.
     
    raffo77, Jun 1, 2011 IP
  5. ryan1918

    ryan1918 Active Member

    Messages:
    668
    Likes Received:
    8
    Best Answers:
    0
    Trophy Points:
    60
    #5
    Well per say you could except more PPS but you would need true hardware and good hardware which starts in the $50,000 range for CHEAP ddos protection along with good bandwidth.
     
    ryan1918, Jun 1, 2011 IP
  6. raffo77

    raffo77 Active Member

    Messages:
    234
    Likes Received:
    0
    Best Answers:
    0
    Trophy Points:
    51
    #6
    50,000$ ??

    Buy 8 server with 10Gbps and put in one IP Load Balancer, you will have 80Gbps in one IP. for... not much expensive price! look ovh.co.uk
    3Gbps can handle 47.000 pc that send http / get requests.. i have already test it.
     
    raffo77, Jun 3, 2011 IP
  7. cakka

    cakka Member

    Messages:
    159
    Likes Received:
    0
    Best Answers:
    0
    Trophy Points:
    28
    #7
    thanks for this help, but i have stop using VPS... because the security issue
    i want to back using vps again, after i have a knowledge about how to secure my server
    how to do a brute SYN_RECV to my testing server ?

    thanks
     
    cakka, Oct 9, 2011 IP
  8. JamesZach

    JamesZach Peon

    Messages:
    12
    Likes Received:
    0
    Best Answers:
    0
    Trophy Points:
    0
    #8
    You might also want to reduce the sysctl variables net.ipv4.tcp_max_syn_backlog and net.ipv4.tcp_syn_retries from its default values.
     
    JamesZach, Dec 5, 2011 IP