iptables -A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -m recent --set --name HTTP --rsource
iptables -A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -m recent --update --seconds 1 --hitcount 15 --rttl --name SSH --rsource -j DROP
iptables -A INPUT -p tcp -m tcp --dport 7171 -m state --state NEW -m recent --set --name LOGIN --rsource
iptables -A INPUT -p tcp -m tcp --dport 7171 -m state --state NEW -m recent --update --seconds 1 --hitcount 15 --rttl --name SSH --rsource -j DROP
iptables -A INPUT -p tcp -m tcp --dport 7172 -m state --state NEW -m recent --set --name GAME --rsource
iptables -A INPUT -p tcp -m tcp --dport 7172 -m state --state NEW -m recent --update --seconds 1 --hitcount 15 --rttl --name SSH --rsource -j DROP
iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name SSH --rsource
iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 1 --hitcount 15 --rttl --name SSH --rsource -j DROP
You have to protect all ports - not only 7171/7172, but also ssh/sftp port and http port. I use something like this and for now it works:
Code:iptables -A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -m recent --set --name HTTP --rsource iptables -A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -m recent --update --seconds 1 --hitcount 15 --rttl --name SSH --rsource -j DROP iptables -A INPUT -p tcp -m tcp --dport 7171 -m state --state NEW -m recent --set --name LOGIN --rsource iptables -A INPUT -p tcp -m tcp --dport 7171 -m state --state NEW -m recent --update --seconds 1 --hitcount 15 --rttl --name SSH --rsource -j DROP iptables -A INPUT -p tcp -m tcp --dport 7172 -m state --state NEW -m recent --set --name GAME --rsource iptables -A INPUT -p tcp -m tcp --dport 7172 -m state --state NEW -m recent --update --seconds 1 --hitcount 15 --rttl --name SSH --rsource -j DROP iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name SSH --rsource iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 1 --hitcount 15 --rttl --name SSH --rsource -j DROP
IPTables will help you only, when the DDoS attack doesn't exceed your bandwith rate - if it does, then there is nothing you can do, besides renting a dedicated server/VPS with DDoS protection.
My best
iptables -A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -m recent --set --name HTTP --rsource
iptables -A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -m recent --update --seconds 1 --hitcount 15 --rttl --name HTTP --rsource -j DROP
iptables -A INPUT -p tcp -m tcp --dport 7171 -m state --state NEW -m recent --set --name LOGIN --rsource
iptables -A INPUT -p tcp -m tcp --dport 7171 -m state --state NEW -m recent --update --seconds 1 --hitcount 15 --rttl --name LOGIN --rsource -j DROP
iptables -A INPUT -p tcp -m tcp --dport 7172 -m state --state NEW -m recent --set --name GAME --rsource
iptables -A INPUT -p tcp -m tcp --dport 7172 -m state --state NEW -m recent --update --seconds 1 --hitcount 15 --rttl --name GAME --rsource -j DROP
iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name SSH --rsource
iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 1 --hitcount 15 --rttl --name SSH --rsource -j DROP
*filter
# Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
# Accepts all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allows all outbound traffic
# You could modify this to only allow certain traffic
-A OUTPUT -j ACCEPT
# Allows HTTP, 7171, 7172 and SSH connections
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 7171 -j ACCEPT
-A INPUT -p tcp --dport 7172 -j ACCEPT
-A INPUT -p tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -m recent --set --name HTTP --rsource
-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -m recent --update --seconds 1 --hitcount 15 --rttl --name HTTP --rsource -j DROP
-A INPUT -p tcp -m tcp --dport 7171 -m state --state NEW -m recent --set --name LOGIN --rsource
-A INPUT -p tcp -m tcp --dport 7171 -m state --state NEW -m recent --update --seconds 1 --hitcount 15 --rttl --name LOGIN --rsource -j DROP
-A INPUT -p tcp -m tcp --dport 7172 -m state --state NEW -m recent --set --name GAME --rsource
-A INPUT -p tcp -m tcp --dport 7172 -m state --state NEW -m recent --update --seconds 1 --hitcount 15 --rttl --name GAME --rsource -j DROP
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name SSH --rsource
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 1 --hitcount 15 --rttl --name SSH --rsource -j DROP
# Allow ping
# note that blocking other types of icmp packets is considered a bad idea by some
# remove -m icmp --icmp-type 8 from this line to allow all kinds of icmp:
# https://security.stackexchange.com/questions/22711
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
# log iptables denied calls (access via 'dmesg' command)
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
# Reject all other inbound - default deny unless explicitly allowed policy:
-A INPUT -j REJECT
-A FORWARD -j REJECT
COMMIT
-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -m recent --set --name HTTP --rsource
-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -m recent --update --seconds 1 --hitcount 15 --rttl --name HTTP --rsource -j DROP
-A INPUT -p tcp -m tcp --dport 7171 -m state --state NEW -m recent --set --name LOGIN --rsource
-A INPUT -p tcp -m tcp --dport 7171 -m state --state NEW -m recent --update --seconds 1 --hitcount 15 --rttl --name LOGIN --rsource -j DROP
-A INPUT -p tcp -m tcp --dport 7172 -m state --state NEW -m recent --set --name GAME --rsource
-A INPUT -p tcp -m tcp --dport 7172 -m state --state NEW -m recent --update --seconds 1 --hitcount 15 --rttl --name GAME --rsource -j DROP
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name SSH --rsource
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 1 --hitcount 15 --rttl --name SSH --rsource -j DROP
-A INPUT -j REJECT
-A FORWARD -j REJECT
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 7171 -j ACCEPT
-A INPUT -p tcp --dport 7172 -j ACCEPT
-A INPUT -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT
-A FORWARD -j REJECT