LinuxForum.Fans
Тема

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

Автор: denis32 22 сообщений 5205 просмотров
#235503
text
iptables -I INPUT 1 -i eth0 -m psd -j REJECT

При таком правиле часто бывают проблемы, что не возможно отресолвить различные хосты. Никак не могу понять в чём дело. Скажите пожалуйста, как правильно сделать?

#235504

Первым его не ставь, в конец добавляй лучше.

#235505

Пробовал, не помогло.

#235507
denis32 написал:
Пробовал, не помогло.

Как пробовал? То что написал -I INPUT 1 - вставит в самое начало, надо в конце скрипта -A INPUT -i eth0 -m psd -j REJECT
И на остальное неплохо бы глянуть, у меня на шлюзе нормально работает, с резолвом проблем не наблюдаю.

#235509
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 -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 -p tcp ! --syn -m state --state NEW -j DROP $IPTABLES -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP #Ограничиваем ICMP $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 # запрещаем устанавливать новые исходящие соединения юзеру (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 ################################################## #Открываем порты:

# 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 iptables -A INPUT -i eth0 -m psd -j REJECT

$IPTABLES -P INPUT DROP $IPTABLES -P OUTPUT ACCEPT $IPTABLES -P FORWARD DROP

Скан портов проходит.

text
# lsmod |grep psd
xt_psd                 42573  1 
compat_xtables          2351  2 xt_psd,xt_geoip
#235515

А зачем политики в конце? Политики сразу после чистки выставляй, потом эстаблишед, и разрешения/ограничения.
Это шлюз?
Почистил бы от закоментированных правил, читать неудобно, и попробуй убрать все запрещения/ограничения и по одному их добавляй.
ы. Ядро какое?

#235520

Да, небольшой локальный серв и шлюз. ядро 2.6.32-5-686

Перенёс правила из конца в начало. Ничего не изменилось.

#235526

Вот примерная моя обертка, попробуй ее, где свои правила писать я указал, но у меня и OUTPUT политика строгая те не только INPUT но и OUTPUT указывать надо.
По одному добавляй и смотри где запинаться начнет.

text
$IPT -P INPUT   DROP
$IPT -P OUTPUT  DROP
$IPT -P FORWARD DROP

# Отбрасывать все пакеты, которые не могут быть идентифицированы. $IPT -A INPUT -m state --state INVALID -j DROP $IPT -A FORWARD -m state --state INVALID -j DROP $IPT -A INPUT -m conntrack --ctstate INVALID -j DROP $IPT -A FORWARD -m conntrack --ctstate INVALID -j DROP

# ICMP - перенаправление: $IPT -A INPUT --fragment -p icmp -j DROP $IPT -A FORWARD --fragment -p icmp -j DROP $IPT -A OUTPUT --fragment -p icmp -j DROP

# SYN наводнение (связывание сист. ресурсов) $IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP $IPT -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP $IPT -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP

# Включаем фрагментацию пакетов. Необходимо из за разных значений MTU: $IPT -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

# Если интерфейс не lo, то запрещаем входить в список его адресов. $IPT -A INPUT -s 127.0.0.1/255.0.0.0 ! -i lo -j DROP $IPT -A INPUT \! -i lo -s 127.0.0.0/8 -j DROP

$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# Разрешаем локальный траффик для loopback и внутренней сети: $IPT -A INPUT -i lo -j ACCEPT $IPT -A OUTPUT -o lo -j ACCEPT $IPT -A INPUT -i $LAN -j ACCEPT $IPT -A OUTPUT -o $LAN -j ACCEPT

# Запрещаем доступ снаружи во внутренние сети: $IPT -A FORWARD -i $EXT -o $LAN -j REJECT # Разрешаем доступ из внутренней сети наружу: $IPT -A FORWARD -i $LAN -o $EXT -j ACCEPT

# Разрешаем ICMP соединение. Значительная часть ICMP используется для передачи сообщений о # том, что происходит с тем или иным UDP или TCP соединением. $IPT -A INPUT -i $EXT -p icmp -m icmp --icmp-type source-quench -j ACCEPT $IPT -A OUTPUT -o $EXT -p icmp -m icmp --icmp-type source-quench -j ACCEPT

# Разрешаем ping снаружи $IPT -A INPUT -i $EXT -p icmp -m icmp --icmp-type echo-request -j ACCEPT $IPT -A OUTPUT -o $EXT -p icmp -m icmp --icmp-type echo-reply -j ACCEPT

# Разрешаем ping самому серверу $IPT -A OUTPUT -o $EXT -p icmp -m icmp --icmp-type echo-request -j ACCEPT

# Разрешаем передачу пакета - некорректный параметр - используется, если в заголовке пакета # содержится недопустимая запись, или если контрольная сумма заголовка не соответствует # контрольной сумме, указанной передающим узлом. $IPT -A INPUT -i $EXT -p icmp -m icmp --icmp-type parameter-problem -j ACCEPT $IPT -A OUTPUT -o $EXT -p icmp -m icmp --icmp-type parameter-problem -j ACCEPT

# SSH в локалку $IPT -A INPUT -i $LAN -p tcp -m tcp --dport 44535 -j ACCEPT $IPT -A OUTPUT -o $LAN -p tcp -m tcp --sport 44535 -j ACCEPT # WWW наружу $IPT -A INPUT -i $EXT -p tcp -m tcp --dport 80 -j ACCEPT $IPT -A OUTPUT -o $EXT -p tcp -m tcp --sport 80 -j ACCEPT

# DNS, WWW, HTTPS, RSYNC для нас!!! для самого сервера (шлюза)!!! $IPT -A OUTPUT -o $EXT -p udp -m udp --dport 53 -j ACCEPT $IPT -A OUTPUT -o $EXT -p tcp -m tcp --dport 80 -j ACCEPT $IPT -A OUTPUT -o $EXT -p tcp -m tcp --dport 443 -j ACCEPT $IPT -A OUTPUT -o $EXT -p tcp -m tcp --dport 873 -j ACCEPT

# # # ДОБАВЛЯТЬ СЮДА # #

# При использовании действия TARPIT обязательно добавляй в конфиг следующее правило, иначе # «провисшие» соединения будут съедать ресурсы при обработке подсистемой conntrack: $IPT -t raw -I PREROUTING -p tcp --dport 25 -j NOTRACK $IPT -A INPUT -i $EXT -m psd -j REJECT

#235529

Попробовал вот я очистить все правила и добавить только iptables -A INPUT -i eth0 -m psd -j REJECT - скан проходит.

#235530

denis32, а откуда сканируешь?

#235531

с того же компа... Неужели в этом может быть дело? Oo

#235533

Конечно в этом, твоему компу и локалке все разрешено, надо извне, либо повесь правила на какой-нибудь локальный комп и посмотри что будет. (или запрещать локалке форвард и оутпут)
Примерно так: http://linuxforum.ru/viewtopic.php?pid=256294#p256294

#235535

Залез на другой сервак, который стоит в этом же дц, но на другой подсети. Попробовал, тоже всё прошло.

#235536

Значит что-то не так, я показал что должно происходить. wink

#235538

Поместил правило чуть выше, просканил с другого серва, тоже удалось, но спалило не все открытые порты как раньше,

До:

text
PORT     STATE  SERVICE
25/tcp   open   smtp
80/tcp   open   http
110/tcp  open   pop3
143/tcp  open   imap
443/tcp  open   https
465/tcp  open   smtps
587/tcp  closed submission
993/tcp  open   imaps
995/tcp  open   pop3s
1111/tcp open   unknown
4111/tcp open   unknown
5190/tcp closed aol
5222/tcp open   unknown
5269/tcp open   unknown
5280/tcp open   unknown
6881/tcp closed bittorrent-tracker

После:

text
Host is up (0.00021s latency).
Not shown: 997 filtered ports
PORT    STATE SERVICE
80/tcp  open  http
143/tcp open  imap
443/tcp open  https
#235775

Хз, мб чего-то и не достаёт, что может psd и/или lscan

Показать
text
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
################### SYN scan and TCP connect scan 
# log  probable sS and full connect tcp scan
PORTLIST_sS_SCAN="23 25 79 80 110 143 443 465 587 993 995 1111 4111 5190 5222 5269 5280 6881"
for i in $PORTLIST_sS_SCAN
 do
iptables -A INPUT -p tcp --dport $i --tcp-flags ALL SYN -m limit --limit 3/m --limit-burst 5 -j LOG --log-prefix "Firewall SYN scan trap:"
# blacklist for three minuts
iptables -A  INPUT -p tcp --dport $i --tcp-flags ALL SYN -m recent --name blacklist_180 --set -j DROP
done
################### 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

#235779

Хехе. Хотя против nmap -sS и nmap -f O не канает.

#235812

denis32, попробуй так

text
iptables -F INPUT # Очищаем цепочку INPUT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # Разрешаем пакеты по установленным соединениям
# Если за последний час было 10 или более запросов на нерабочие порты — блокируем
iptables -A INPUT -m recent --rcheck --seconds 3600 --hitcount 10 --rttl -j RETURN
# Если за последнюю минуту было 2 или более запросов на нерабочие порты — блокируем
iptables -A INPUT -m recent --rcheck --seconds 60 --hitcount 2 --rttl -j RETURN
# Разрешаем рабочие порты
iptables -A INPUT -m conntrack --ctstate NEW -p tcp -m multiport --dport 21,25,53,80,110 -j ACCEPT
iptables -A INPUT -m conntrack --ctstate NEW -p udp -m multiport --dport 53,123 -j ACCEPT
# Всех, кто ломится в нерабочие порты — регистрируем
iptables -A INPUT -m recent --set
iptables -P INPUT DROP # Что не разрешено — то запрещено

или так:

text
# Создаем цепочку для проверки и блокирования портсканов
iptables -N portscan_check
# Блокируем тех, кто был уличен в портскане в течение последних суток
iptables -A portscan_check -m recent --name portscan --rcheck --seconds 86400 -j DROP
# По прошествии суток можно удалять их из списка
iptables -A portscan_check -m recent --name portscan --remove
# Ну а сейчас — собственно процедура определения портскана
iptables -A portscan_check -p tcp --dport 139 -m recent --name portscan --set -j DROP
# Пускаем на проверку всех, кто пришел к нам из интернета (интерфейс eth0)
iptables -I INPUT -i eth0 -j portscan_check

Во втором примере от скана только 139 порт, для остальных использовать multiport.

#235824

неа, не помогает от флагов -sS и -f

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