Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #! /bin/sh
- IPTABLES="/sbin/iptables"
- internet="ppp0"
- external="eth0"
- internal="eth1"
- $IPTABLES -F
- $IPTABLES -X
- #$IPTABLES -A INPUT -p tcp -j LOG --log-prefix "iptables: INPUT tcp packets "
- #$IPTABLES -A INPUT -p udp -j LOG --log-prefix "iptables: INPUT udp packets "
- # Разрешаем доступ по интерфесу обратной петли
- $IPTABLES -A INPUT -i lo -j ACCEPT
- $IPTABLES -A OUTPUT -o lo -j ACCEPT
- # vbox
- $IPTABLES -A INPUT -i vboxnet0 -j ACCEPT
- $IPTABLES -A OUTPUT -o vboxnet0 -j ACCEPT
- # C себя разрешаем всё
- $IPTABLES -A OUTPUT -m state --state NEW -j ACCEPT
- # Позволяем входящие и исходящие соединения, инициированные уже установленными соединениями
- $IPTABLES -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
- $IPTABLES -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
- # радио p2p
- $IPTABLES -A INPUT -p udp -m udp --dport 2000:2002 -j ACCEPT
- # Разрешаем прохождение DHCP запросов через iptables.
- $IPTABLES -A INPUT -p udp -m udp --dport 68 --sport 67 -j ACCEPT
- $IPTABLES -A OUTPUT -p udp -m udp --dport 67 --sport 68 -j ACCEPT
- # какие_то важные пакеты
- $IPTABLES -I INPUT -p ah -j ACCEPT
- $IPTABLES -I INPUT -p esp -j ACCEPT
- ########################################################################
- # Защита #
- ########################################################################
- # Дропаем все с ошибками
- $IPTABLES -A INPUT -m state --state INVALID -j DROP
- $IPTABLES -A FORWARD -m state --state INVALID -j DROP
- # порт сканнеры
- $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
- # Дропаем все icmp
- $IPTABLES -A INPUT -p icmp -j DROP
- # антиспуффинг
- $IPTABLES -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
- $IPTABLES -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
- $IPTABLES -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
- $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
- # Блокируем все попытки входящих TCP-соединений не SYN-пакетами (либо ошибка, либо атака)
- $IPTABLES -I INPUT -m conntrack --ctstate NEW -p tcp ! --syn -j DROP
- # Вводим ограничения для новых подключений по SSH (не больше 4 в минуту)
- #$IPTABLES -A INPUT -i $external -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j LOG --log-prefix "SSH: "
- $IPTABLES -A INPUT -i $external -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j DROP
- # Вводим ограничения для новых подключений по WWW (не больше 50 соедининий с одного ip)
- #$IPTABLES -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j LOG --log-prefix "WWW: "
- #$IPTABLES -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j DROP
- # Вводим ограничения для новых подключений по WWW (не более 5 в секунду)
- #$IPTABLES -A INPUT -p tcp --dport 80 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
- #$IPTABLES -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW -m limit --limit 5/sec --limit-burst 5 -j ACCEPT
- # Вводим ограничения для новых подключений по FTP (не больше 50 соедининий с одного ip)
- $IPTABLES -A INPUT -p tcp --dport 21 -m connlimit --connlimit-above 50 -j DROP
- # Вводим ограничения для новых подключений по FTP (не больше 5 в секунду)
- $IPTABLES -A INPUT -m conntrack --ctstate NEW -p tcp --dport 21 -m hashlimit --hashlimit-upto 5/sec --hashlimit-mode srcip --hashlimit-name ftphash -j ACCEPT
- # Хаб
- # дропаем, если с ip новых соединений больше чем 10
- #$IPTABLES -A INPUT -p tcp -m multiport --dports 411,4111 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
- #$IPTABLES -A INPUT -p tcp -m multiport --dports 411,4111 -m conntrack --ctstate NEW -m limit --limit 10/min --limit-burst 10 -j ACCEPT
- # дропаем если с ip коннектов больше чем 20
- #$IPTABLES -A INPUT -p tcp -m multiport --dports 411,4111 -m connlimit --connlimit-above 20 -j LOG --log-prefix "iptables: hub-connlimit "
- #$IPTABLES -A INPUT -p tcp -m multiport --dports 411,4111 -m connlimit --connlimit-above 20 -j REJECT
- #$IPTABLES -A INPUT -p udp -m multiport --dports 411,4111 -m connlimit --connlimit-above 20 -j LOG --log-prefix "iptables: hub-connlimit "
- #$IPTABLES -A INPUT -p udp -m multiport --dports 411,4111 -m connlimit --connlimit-above 20 -j REJECT
- #~ #вечный бан по ip для dc++
- #~ BLOCKDB="/home/ftp/www/nemesis/iptables/ip.blocked"
- #~ IPS=$(grep -Ev "^#" $BLOCKDB)
- #~ for i in $IPS
- #~ do
- #~ $IPTABLES -A INPUT -p tcp -i $external -s $i -m multiport --dports 411,4111 -j DROP
- #~ $IPTABLES -A INPUT -p udp -i $external -s $i -m multiport --dports 411,4111 -j DROP
- #~ done
- #~
- #~ #вечный бан по ip для всех
- #~ BLOCKDB="/home/ftp/www/nemesis/iptables/ip-all.blocked"
- #~ IPS=$(grep -Ev "^#" $BLOCKDB)
- #~ for i in $IPS
- #~ do
- #~ $IPTABLES -A INPUT -p tcp -i $external -s $i -j DROP
- #~ $IPTABLES -A INPUT -p udp -i $external -s $i -j DROP
- #~ done
- #дропаем запрос имен netbios
- $IPTABLES -A INPUT -p udp ! -i $internal --dport 137:138 -j DROP
- #дропаем мультикаст
- $IPTABLES -A INPUT -d 224.0.0.1/32 -j DROP
- $IPTABLES -A OUTPUT -d 224.0.0.1/32 -j DROP
- $IPTABLES -A FORWARD -d 224.0.0.1/32 -j DROP
- ########################################################################
- # ЛОКАЛКА #
- ########################################################################
- # SSH
- $IPTABLES -A INPUT -p tcp -m tcp -i $external --dport 22 -j ACCEPT
- # SQUID
- $IPTABLES -A INPUT -p tcp -m tcp -i $external --dport 3128 -j ACCEPT
- #MYSQL
- #$IPTABLES -A INPUT -p tcp -i $external -s 10.58.20.136 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
- #$IPTABLES -A OUTPUT -p tcp -s 10.58.20.136 --sport 3306 -d 0/0 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
- ########################################################################
- # ОБЩЕЕ ДЛЯ ВСЕХ #
- ########################################################################
- # FTP
- $IPTABLES -A INPUT -m conntrack --ctstate NEW -p tcp --sport 1024:65535 --dport 20:21 -j ACCEPT
- $IPTABLES -A INPUT -p tcp --sport 1024:65535 --dport 49000:49500 -j ACCEPT
- # WWW
- $IPTABLES -A INPUT -p tcp -m tcp -m multiport --dports 80,443 -j ACCEPT
- $IPTABLES -A OUTPUT -p tcp -m tcp -m multiport --sports 80,443 -j ACCEPT
- # Проброшенные порты для пиринговых клиентов
- $IPTABLES -A INPUT -p tcp -m tcp --dport 7500:7504 -j ACCEPT
- $IPTABLES -A INPUT -p udp -m udp --dport 7500:7504 -j ACCEPT
- #soulseek
- $IPTABLES -A INPUT -p tcp -m tcp --dport 2234:2239 -j ACCEPT
- # Хаб
- $IPTABLES -A INPUT -p tcp -m tcp -m multiport --dports 411,4111 -j ACCEPT
- $IPTABLES -A INPUT -p udp -m udp -m multiport --dports 411,4111 -j ACCEPT
- ########################################################################
- # eth1 #
- ########################################################################
- # Разрешаем пинговать себя с $eth1
- $IPTABLES -I INPUT -p icmp -m icmp --icmp-type echo-request -i $internal -j ACCEPT
- $IPTABLES -I OUTPUT -p icmp -m icmp --icmp-type echo-reply -o $internal -j ACCEPT
- # SQUID
- $IPTABLES -A INPUT -p tcp -m tcp -i $internal --dport 3128 -j ACCEPT
- ########################################################################
- # ВНЕШКА #
- ########################################################################
- # Доступ к DNS-серверам
- $IPTABLES -A OUTPUT -p tcp -m tcp -o $internet --dport 53 -j ACCEPT
- $IPTABLES -A OUTPUT -p udp -m udp -o $internet --dport 53 -j ACCEPT
- #Добавляем правила по умолчанию
- $IPTABLES -A INPUT -i $internet -j DROP
- #$IPTABLES -A INPUT -j LOG --log-prefix "iptables: input drop "
- $IPTABLES -P INPUT DROP
- #$IPTABLES -A OUTPUT -j LOG --log-prefix "iptables: output drop "
- $IPTABLES -P OUTPUT DROP
- #$IPTABLES -A FORWARD -j LOG --log-prefix "iptables: forward drop "
- $IPTABLES -P FORWARD DROP
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement