iptables -I INPUT 1 -i eth0 -m psd -j REJECTПри таком правиле часто бывают проблемы, что не возможно отресолвить различные хосты. Никак не могу понять в чём дело. Скажите пожалуйста, как правильно сделать?
Настоятельно просим вас при общении соблюдать Правила форума и законы РФ. Наша тематика вне политики, поэтому воздержитесь от обсуждения ситуации на Украине и связанных с ней событий, независимо от того, какую сторону вы поддерживаете.
Также напоминаем, что наш форум находится в доменной зоне .ru, физически расположен на российских серверах и мы соблюдаем действующее законодательство России. Любые сообщения о политике будут удаляться.
Linux Forum → Общие вопросы → Iptables (xtables psd) вопрос о правильной настройке защиты от скана
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
iptables -I INPUT 1 -i eth0 -m psd -j REJECTПри таком правиле часто бывают проблемы, что не возможно отресолвить различные хосты. Никак не могу понять в чём дело. Скажите пожалуйста, как правильно сделать?
Первым его не ставь, в конец добавляй лучше.
Пробовал, не помогло.
Пробовал, не помогло.
Как пробовал? То что написал -I INPUT 1 - вставит в самое начало, надо в конце скрипта -A INPUT -i eth0 -m psd -j REJECT
И на остальное неплохо бы глянуть, у меня на шлюзе нормально работает, с резолвом проблем не наблюдаю.
#!/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А зачем политики в конце? Политики сразу после чистки выставляй, потом эстаблишед, и разрешения/ограничения.
Это шлюз?
Почистил бы от закоментированных правил, читать неудобно, и попробуй убрать все запрещения/ограничения и по одному их добавляй.
ы. Ядро какое?
Да, небольшой локальный серв и шлюз. ядро 2.6.32-5-686
Перенёс правила из конца в начало. Ничего не изменилось.
Вот примерная моя обертка, попробуй ее, где свои правила писать я указал, но у меня и 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Попробовал вот я очистить все правила и добавить только iptables -A INPUT -i eth0 -m psd -j REJECT - скан проходит.
denis32, а откуда сканируешь?
с того же компа... Неужели в этом может быть дело? Oo
Конечно в этом, твоему компу и локалке все разрешено, надо извне, либо повесь правила на какой-нибудь локальный комп и посмотри что будет. (или запрещать локалке форвард и оутпут)
Примерно так: http://linuxforum.ru/viewtopic.php?pid=256294#p256294
Залез на другой сервак, который стоит в этом же дц, но на другой подсети. Попробовал, тоже всё прошло.
Значит что-то не так, я показал что должно происходить. wink
Поместил правило чуть выше, просканил с другого серва, тоже удалось, но спалило не все открытые порты как раньше,
До:
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Для параноиков есть еще lscan, но я не пользовался, да и мануалов практически нет. http://manpages.ubuntu.com/manpages/kar … ons.8.html
не знаю, мб чего-то и не достаёт, что может 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Хехе. Хотя против nmap -sS и nmap -f O не канает.
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.
неа, не помогает от флагов -sS и -f
Сума уже схожу...
#!/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- сканирование удаётся..
Поставил Portsentry 
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Linux Forum → Общие вопросы → Iptables (xtables psd) вопрос о правильной настройке защиты от скана
Форум работает на PunBB, при поддержке Informer Technologies, Inc