LinuxForum.Fans
Тема

Iptables (xtables psd) вопрос о правильной настройке защиты от скана

Автор: denis32 22 сообщений 5206 просмотров
#235858

Сума уже схожу...

text
#!/bin/sh

IPTABLES="/sbin/iptables" external="eth0" SSH_PORT="54521" #Очистка цепочек $IPTABLES -F $IPTABLES -X $IPTABLES -t nat -F $IPTABLES -F INPUT $IPTABLES -F FORWARD #$IPTABLES -P INPUT ACCEPT $IPTABLES -P INPUT DROP $IPTABLES -P OUTPUT DROP $IPTABLES -P FORWARD DROP #Локально разрешаем всё. $IPTABLES -A INPUT -i lo -j ACCEPT $IPTABLES -A OUTPUT -o lo -j ACCEPT # Состояние ESTABLISHED говорит о том, что это не первый пакет в соединении. # Пропускать все уже инициированные соединения, а также дочерние от них $IPTABLES -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT # Пропускать новые, а так же уже инициированные и их дочерние соединения $IPTABLES -A OUTPUT -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT # Разрешить форвардинг для новых, а так же уже инициированных и их дочерних соединений $IPTABLES -A FORWARD -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# Включаем фрагментацию пакетов. Необходимо из за разных значений MTU $IPTABLES -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu # Отбрасывать все пакеты, которые не могут быть идентифицированы и поэтому не могут иметь определенного статуса. $IPTABLES -A INPUT -m state --state INVALID -j DROP $IPTABLES -A FORWARD -m state --state INVALID -j DROP $IPTABLES -A INPUT -m conntrack --ctstate INVALID -j DROP $IPTABLES -A FORWARD -m conntrack --ctstate INVALID -j DROP # ICMP - перенаправление: $IPTABLES -A INPUT --fragment -p icmp -j DROP $IPTABLES -A FORWARD --fragment -p icmp -j DROP $IPTABLES -A OUTPUT --fragment -p icmp -j DROP # Приводит к связыванию системных ресурсов, так что реальный обмен данными становится не возможным. $IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j DROP $IPTABLES -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP $IPTABLES -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP #Ограничиваем ICMP #$IPTABLES -A INPUT -i $external -m psd -j REJECT $IPTABLES -I INPUT -p icmp --icmp-type echo-request -m limit --limit 180/minute -j ACCEPT $IPTABLES -I INPUT -p icmp ! --icmp-type echo-request -m limit --limit 180/minute -j ACCEPT # Разрешаем ICMP соединение. Значительная часть ICMP используется для передачи сообщений о # том, что происходит с тем или иным UDP или TCP соединением. $IPTABLES -A INPUT -i $external -p icmp -m icmp --icmp-type source-quench -j ACCEPT $IPTABLES -A OUTPUT -o $external -p icmp -m icmp --icmp-type source-quench -j ACCEPT # запрещаем устанавливать новые исходящие соединения юзеру (uid 33) с правами которого работает web сервер. $IPTABLES -A OUTPUT -p tcp -m owner --uid-owner 33 -m state --state NEW -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

#Запираем netbios $IPTABLES -A INPUT -p udp ! -i $external --dport 137:138 -j DROP ############ NAT CONFIG ######################### $IPTABLES -t nat -A PREROUTING -i $external -p tcp --dport 411 -j REDIRECT --to-ports 4111 $IPTABLES -t nat -A PREROUTING -i $external -p tcp --dport 2011 -j REDIRECT --to-ports 4111 $IPTABLES -t nat -A PREROUTING -i $external -p tcp --dport 1111 -j REDIRECT --to-ports 4111 # $IPTABLES -t nat -A POSTROUTING -s 192.168.56.0/24 -j MASQUERADE ##################################################

# Правила против сканирования портов. ###################### Null scan ( nmap -sN <target> ) $IPTABLES -A INPUT -p tcp --tcp-flags ALL NONE -j DROP # Log attack $IPTABLES -A INPUT -p tcp --tcp-flags ALL NONE -m limit --limit 3/m --limit-burst 5 -j LOG --log-prefix "Firewall Null scan " # Drop and blacklist for 60 seconds IP of attacker $IPTABLES -A INPUT -p tcp --tcp-flags ALL NONE -m recent --name blacklist_60 --set -m comment --comment "Drop/Blacklist Null scan" -j DROP #################### Xmas scan (nmap -sX <target>) # Log attacks $IPTABLES -A INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -m limit --limit 3/m --limit-burst 5 -j LOG --log-prefix "Firewall> XMAS scan " $IPTABLES -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -m limit --limit 3/m --limit-burst 5 -j LOG --log-prefix "Firewall XMAS-PSH scan " $IPTABLES -A INPUT -p tcp --tcp-flags ALL ALL -m limit --limit 3/m --limit-burst 5 -j LOG --log-prefix "Firewall XMAS-ALL scan " # Drop and blacklist for 60 seconds IP of attacker $IPTABLES -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -m recent --name blacklist_60 --set -m comment --comment "Drop/Blacklist Xmas/PSH scan" -j DROP $IPTABLES -A INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -m recent --name blacklist_60 --set -m comment --comment "Drop/Blacklist Xmas scan" -j DROP $IPTABLES -A INPUT -p tcp --tcp-flags ALL ALL -m recent --name blacklist_60 --set -m comment --comment "Drop/Blacklist Xmas/All scan" -j DROP #################### FIN scan (nmap -sF <target) #Log attack $IPTABLES -A INPUT -p tcp --tcp-flags ALL FIN -m limit --limit 3/m --limit-burst 5 -j LOG --log-prefix "Firewall FIN scan " # Drop and blacklist for 60 seconds IP of attacker $IPTABLES -A INPUT -p tcp --tcp-flags ALL FIN -m recent --name blacklist_60 --set -m comment --comment "Drop/Blacklist FIN scan" -j DROP #################### ACK scan (nmap -sA <target>) $IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -m comment --comment "Drop TCP connection not starting by SYN" -j DROP ################### UDP scan (nmap -sU <target>) $IPTABLES -A INPUT -p udp -m limit --limit 6/h --limit-burst 1 -m length --length 0:28 -j LOG --log-prefix "Firewall 0 length udp " $IPTABLES -A INPUT -p udp -m length --length 0:28 -m comment --comment "Drop UDP packet with no content" -j DROP #$IPTABLES -A INPUT -i eth0 -m psd -j DROP #Открываем порты:

# FTP (Passive Mode) #$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 #Даём доступ к вебсерверу: $IPTABLES -A INPUT -p tcp -m tcp -m multiport --dports 80,443 -j ACCEPT #Даём доступ к DC-хабам $IPTABLES -A INPUT -p tcp -m tcp -m multiport --dports 4111,2011,1111,6850 -j ACCEPT # Разрешаем работу UDP пакетов на порту 1209 $IPTABLES -A INPUT -i $external -p udp --sport 1209 -j ACCEPT $IPTABLES -A OUTPUT -o $external -p udp --dport 1209 -j ACCEPT #Разрешаем ICQ $IPTABLES -A INPUT -p tcp -i $external --dport 5190 -m state --state NEW -j ACCEPT $IPTABLES -A OUTPUT -p tcp -o $external --sport 5190 -m state --state NEW -j ACCEPT #Jabber $IPTABLES -A INPUT -p tcp -i $external --dport 5222 -m state --state NEW -j ACCEPT $IPTABLES -A OUTPUT -p tcp -o $external --sport 5222 -m state --state NEW -j ACCEPT $IPTABLES -A INPUT -p tcp -i $external --dport 5280 -m state --state NEW -j ACCEPT $IPTABLES -A OUTPUT -p tcp -o $external --sport 5280 -m state --state NEW -j ACCEPT $IPTABLES -A INPUT -p tcp -i $external --dport 5269 -m state --state NEW -j ACCEPT $IPTABLES -A OUTPUT -p tcp -o $external --sport 5269 -m state --state NEW -j ACCEPT #Разрешаем SMTP $IPTABLES -A INPUT -p tcp -i $external --dport 465 -m state --state NEW -j ACCEPT $IPTABLES -A OUTPUT -p tcp -o $external --sport 465 -m state --state NEW -j ACCEPT $IPTABLES -A INPUT -p tcp -i $external --dport 587 -m state --state NEW -j ACCEPT $IPTABLES -A OUTPUT -p tcp -o $external --sport 587 -m state --state NEW -j ACCEPT $IPTABLES -A INPUT -p tcp -i $external --dport 25 -m state --state NEW -j ACCEPT $IPTABLES -A OUTPUT -p tcp -o $external --sport 25 -m state --state NEW -j ACCEPT #Разрешаем POP3/POP3S $IPTABLES -A INPUT -p tcp -i $external --dport 110 -m state --state NEW -j ACCEPT $IPTABLES -A OUTPUT -p tcp -o $external --sport 110 -m state --state NEW -j ACCEPT $IPTABLES -A INPUT -p tcp -i $external --dport 995 -m state --state NEW -j ACCEPT $IPTABLES -A OUTPUT -p tcp -o $external --sport 995 -m state --state NEW -j ACCEPT #Разрешаем imap $IPTABLES -A INPUT -p tcp -i $external --dport 143 -m state --state NEW -j ACCEPT $IPTABLES -A OUTPUT -p tcp -o $external --sport 143 -m state --state NEW -j ACCEPT $IPTABLES -A INPUT -p tcp -i $external --dport 993 -m state --state NEW -j ACCEPT $IPTABLES -A OUTPUT -p tcp -o $external --sport 993 -m state --state NEW -j ACCEPT $IPTABLES -A INPUT -p udp -i $external --dport 993 -m state --state NEW -j ACCEPT $IPTABLES -A OUTPUT -p udp -o $external --sport 993 -m state --state NEW -j ACCEPT #Разрешаем DNS $IPTABLES -A INPUT -i $external -p udp --sport 53 -j ACCEPT $IPTABLES -A OUTPUT -o $external -p udp --dport 53 -j ACCEPT $IPTABLES -A INPUT -i $external -p tcp --sport 53 -j ACCEPT $IPTABLES -A OUTPUT -o $external -p tcp --dport 53 -j ACCEPT #SSH $IPTABLES -A INPUT -m tcp -p tcp --dport $SSH_PORT -j ACCEPT $IPTABLES -A OUTPUT -m tcp -p tcp --dport $SSH_PORT -j ACCEPT #SKYPE $IPTABLES -A INPUT -p TCP -i $external --dport 11553 -j ACCEPT $IPTABLES -A OUTPUT -p TCP -o $external --dport 11553 -j ACCEPT $IPTABLES -A OUTPUT -p UDP -o $external --sport 11553 -j ACCEPT # Torrent $IPTABLES -A INPUT -p TCP -i $external --dport 51413 -j ACCEPT $IPTABLES -A INPUT -p UDP -i $external --dport 51413 -j ACCEPT $IPTABLES -A INPUT -p TCP -i $external --dport 6881 -j ACCEPT $IPTABLES -A INPUT -p UDP -i $external --dport 6881 -j ACCEPT $IPTABLES -A INPUT -p UDP -i $external --dport 29292 -j ACCEPT $IPTABLES -A INPUT -p TCP -i $external --dport 29292 -j ACCEPT # IGMP (IPTV) $IPTABLES -I INPUT -p igmp -j ACCEPT $IPTABLES -I OUTPUT -p igmp -j ACCEPT $IPTABLES -I INPUT -p udp -m udp -d 224.0.0.0/240.0.0.0 --dport 1234 -j ACCEPT $IPTABLES -I INPUT -p udp -m udp -d 224.0.0.0/240.0.0.0 --dport 9875 -j ACCEPT BLOCKDB="/usr/local/etc/firewall/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 BLOCKDB2="/usr/local/etc/firewall/ranges.bans" RANGES=$(grep -Ev "^#" $BLOCKDB2) for i in $RANGES do $IPTABLES -A INPUT -p tcp -i $external -s $i -j DROP $IPTABLES -A INPUT -p udp -i $external -s $i -j DROP done

BAD_CCDB="/usr/local/etc/firewall/country" CCs=$(grep -Ev "^#" $BAD_CCDB) for i in $CCs do $IPTABLES -I INPUT -m geoip --src-cc $i -j DROP done BAD_CCDB2="/usr/local/etc/firewall/country_hub" CCs2=$(grep -Ev "^#" $BAD_CCDB2) for i in $CCs2 do $IPTABLES -I INPUT -m geoip -p tcp --dport 4111 --src-cc $i -j DROP done

Описаные флаги сканирования в комментариях работают. Если просто

text
nmap host/ip

- сканирование удаётся..

#235875

Поставил Portsentry :(

Войдите или зарегистрируйтесь, чтобы ответить.