1

iptables -I INPUT 1 -i eth0 -m psd -j REJECT

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

Debian GNU/Linux 6.0.4 | xfce4.6

2

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

История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

3

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

Debian GNU/Linux 6.0.4 | xfce4.6

4

denis32 пишет:

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

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

История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

5

#!/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

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

# lsmod |grep psd
xt_psd                 42573  1 
compat_xtables          2351  2 xt_psd,xt_geoip
Debian GNU/Linux 6.0.4 | xfce4.6

6 (06.03.2012 20:35:42 отредактировано zenon)

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

История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

7 (06.03.2012 20:39:45 отредактировано denis32)

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

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

Debian GNU/Linux 6.0.4 | xfce4.6

8

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

$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
История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

9

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

Debian GNU/Linux 6.0.4 | xfce4.6

10

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

История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

11

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

Debian GNU/Linux 6.0.4 | xfce4.6

12 (06.03.2012 21:01:42 отредактировано zenon)

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

История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

13

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

Debian GNU/Linux 6.0.4 | xfce4.6

14

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

История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

15 (06.03.2012 21:12:03 отредактировано denis32)

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

До:

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

После:

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
Debian GNU/Linux 6.0.4 | xfce4.6

16

Для параноиков есть еще lscan, но я не пользовался, да и мануалов практически нет. http://manpages.ubuntu.com/manpages/kar … ons.8.html

История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

17

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

+ открыть спойлер
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
Debian GNU/Linux 6.0.4 | xfce4.6

18

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

Debian GNU/Linux 6.0.4 | xfce4.6

19

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

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 # Что не разрешено — то запрещено

или так:

# Создаем цепочку для проверки и блокирования портсканов
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.

История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

20

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

Debian GNU/Linux 6.0.4 | xfce4.6

21

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

#!/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

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

nmap host/ip

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

Debian GNU/Linux 6.0.4 | xfce4.6

22

Поставил Portsentry  ac

Debian GNU/Linux 6.0.4 | xfce4.6