#!/bin/sh
# This script is designed to be run by itself to add rate limiting
#
# 6-1-08
# Jason Jorgensen <jasonj@innominatus.com>

iface="eth0" # external interface

iptables -F

# ftp
iptables -A INPUT -p tcp --dport 21 -m recent --rcheck --seconds 60 --hitcount 4 --name FTP_LIMIT -j LOG --log-prefix "FTP LIMIT "
iptables -A INPUT -p tcp --dport 21 -m recent --update --seconds 60 --hitcount 4 --name FTP_LIMIT -j DROP
iptables -A INPUT -p tcp --dport 21 -m state --state NEW -m recent --set --name FTP_LIMIT -j ACCEPT

# ssh
iptables -A INPUT -p tcp --dport 22 -m recent --rcheck --seconds 60 --hitcount 4 --name SSH_LIMIT -j LOG --log-prefix "SSH LIMIT "
iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 4 --name SSH_LIMIT -j DROP
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH_LIMIT -j ACCEPT

# telnet telnet-ssl
#iptables -A INPUT -p tcp --dport 23 -m state --state NEW -m recent --set --name TELNET_LIMIT -j ACCEPT
#iptables -A INPUT -p tcp --dport 23 -m recent --update --seconds 60 --hitcount 4 --name TELNET_LIMIT -j DROP
#iptables -A INPUT -p tcp --dport 23 -m recent --rcheck --seconds 60 --hitcount 4 --name TELNET_LIMIT -j LOG --log-prefix "TELNET LIMIT "

# smtp
iptables -A INPUT -p tcp --dport 25 -m recent --rcheck --seconds 60 --hitcount 30 --name SMTP_LIMIT -j LOG --log-prefix "SMTP LIMIT "
iptables -A INPUT -p tcp --dport 25 -m recent --update --seconds 60 --hitcount 30 --name SMTP_LIMIT -j DROP
iptables -A INPUT -p tcp --dport 25 -m state --state NEW -m recent --set --name SMTP_LIMIT -j ACCEPT

# http, https
#iptables -A INPUT  -p tcp --dport 80 -m recent --rcheck --seconds 10 --hitcount 50 --name HTTP_LIMIT -j LOG --log-prefix "HTTP LIMIT "
#iptables -A INPUT  -p tcp --dport 80 -m recent --update --seconds 10 --hitcount 50 --name HTTP_LIMIT -j DROP
#iptables -A INPUT  -p tcp --dport 80 -m state --state NEW -m recent --set --name HTTP_LIMIT -j ACCEPT
#iptables -A INPUT -p tcp --dport 443 -m recent --rcheck --seconds 10 --hitcount 50 --name HTTPS_LIMIT -j LOG --log-prefix "HTTPS LIMIT "
#iptables -A INPUT -p tcp --dport 443 -m recent --update --seconds 10 --hitcount 50 --name HTTPS_LIMIT -j DROP
#iptables -A INPUT -p tcp --dport 443 -m state --state NEW -m recent --set --name HTTPS_LIMIT -j ACCEPT

# pop3, pop3s
#iptables -A INPUT -p tcp --dport 110 -m recent --rcheck --seconds 60 --hitcount 4 --name POP3_LIMIT -j LOG --log-prefix "POP3 LIMIT "
#iptables -A INPUT -p tcp --dport 110 -m recent --update --seconds 60 --hitcount 4 --name POP3_LIMIT -j DROP
#iptables -A INPUT -p tcp --dport 110 -m state --state NEW -m recent --set --name POP3_LIMIT -j ACCEPT
#iptables -A INPUT -p tcp --dport 995 -m recent --rcheck --seconds 60 --hitcount 4 --name POP3S_LIMIT -j LOG --log-prefix "POP3S LIMIT "
#iptables -A INPUT -p tcp --dport 995 -m recent --update --seconds 60 --hitcount 4 --name POP3S_LIMIT -j DROP
#iptables -A INPUT -p tcp --dport 995 -m state --state NEW -m recent --set --name POP3S_LIMIT -j ACCEPT

# imap, imaps
#iptables -A INPUT -p tcp --dport 143 -m recent --rcheck --seconds 60 --hitcount 4 --name IMAP_LIMIT -j LOG --log-prefix "IMAP LIMIT "
#iptables -A INPUT -p tcp --dport 143 -m recent --update --seconds 60 --hitcount 4 --name IMAP_LIMIT -j DROP
#iptables -A INPUT -p tcp --dport 143 -m state --state NEW -m recent --set --name IMAP_LIMIT -j ACCEPT
#iptables -A INPUT -p tcp --dport 993 -m recent --rcheck --seconds 60 --hitcount 4 --name IMAPS_LIMIT -j LOG --log-prefix "IMAPS LIMIT "
#iptables -A INPUT -p tcp --dport 993 -m recent --update --seconds 60 --hitcount 4 --name IMAPS_LIMIT -j DROP
#iptables -A INPUT -p tcp --dport 993 -m state --state NEW -m recent --set --name IMAPS_LIMIT -j ACCEPT


