#!/bin/sh
# This script is designed to be run after the firewall script FIAIF
#
# For each block section, the rules are listed in reverse as they are being inserted in 
#   to existing rules and not added on to the end.
#
# Setup:
#   Add this script to be run from 'fiaif.conf' as:
#   POST_START_SCRIPT[0]="/etc/fiaif/connection-rate-limit.sh"
#
# 6-1-08
# Jason Jorgensen <jasonj@innominatus.com>

iface="eth0" # external interface

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

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

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

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

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

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

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


