LINUX.ORG.RU
ФорумAdmin

iptables & prt scan


0

1

Доброе время суток друзья!

Хочу защитить свой сервер от сканирования портов. Почитал про много разных способов, но решил остановиться на варианте с iptables .

как вам такой метод защиты от сканирования?

iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP

iptables -A INPUT -p all -i lo -j ACCEPT iptables -A OUTPUT -p all -o lo -j ACCEPT

iptables -A INPUT -m recent --rcheck --seconds 120 --name FUCKOFF -j DROP iptables -A INPUT -p tcp -m multiport ! --dports 22,80 -m recent --set --name FUCKOFF -j DROP

iptables -A INPUT -p tcp --syn --dport 22 -j ACCEPT iptables -A INPUT -p tcp --syn --dport 80 -j ACCEPT 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

тоесть любой пакет идущий на не 22,80 порт блокируется с ip адресом отправившим его на 120 секунд, на 120 секунд блокируется все пакеты с этого ip, тем самым предотвращается сканирование портов (У меня на сервер работает web и ssh)

Какие минусы и плюсы...?


ну минус в том, что если сделать nmap -p 22, то будет видно что порт открыт. Можно для пущей паранойи сделать для ссаш нестандартный порт. Тогда-то злоумышленнику будет непросто узнать, по какому порту можно к серверу доступ получить

nixtrian
()

Привидённые правила бесполезны против скана портов.
К тому же никто не сможет подключится к твоим сервисам на портах 22,80, т.к. их будет постоянно будет банить -j DROP правило после второго пришедшего пакета.

Nao ★★★★★
()

Я видимо чего-то не понимаю в извращениях... Что это и зачем? Если не военная тайна, конечно.

btw, вот это просто шедевр фаерволостроения:

iptables -A INPUT -p all -i lo -j ACCEPT
iptables -A OUTPUT -p all -o lo -j ACCEPT

WiZ
()
Ответ на: комментарий от Nao

Не заметил ! перед --dports 22,80
Ну тогда вроде что-то подобное защите от скана получается, но защита жестковата, т.к. будет банить и нормальных клиентов которые юзают порты 22,80 если они случайно пошлют хотя бы один пакет на порты кроме 22 и 80.

Nao ★★★★★
()
Ответ на: комментарий от WiZ

>btw, вот это просто шедевр фаерволостроения:

iptables -A INPUT -p all -i lo -j ACCEPT

iptables -A OUTPUT -p all -o lo -j ACCEPT



С учётом

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

это вполне оправдано :)

З.Ы. Топикстартер, не трожь OUTPUT.

Nao ★★★★★
()
Ответ на: комментарий от nixtrian

я уже поменял 22-ой порт на другой, и реализовал порт кнокинг методом нестандартного пинга. + если даже дойдёшь до авторизации, в случае набрания некорректного пароля более 3 раз данный ip блокируется на двое суток.

Это не паранойя, просто для меня безопасность превыше всего. ;)

xser
() автор топика

Зачем так заморачиваться? Если у тебя не висит на порту ничего, да хоть усруться сканировать. Если проникнут, фаервол не поможет. А вот по поводу ссш присоединяюсь к вышесказанному: сделай нестандартный порт + умную настройку (нет рутам, авторизация по ключу и так далее). Ну и обновляйтесь вовремя. Удачи.

rovdy
()
Ответ на: комментарий от xser

А каким образом забаненные ip можно запихнуть в mysql?

xser
() автор топика
Ответ на: комментарий от xser

Как страшно жить...

...
-A TCP -p tcp -m tcp --dport 22 -m recent --set --name SSH --rsource
-A TCP -p tcp -m tcp --dport 22 -m recent --update --seconds 120 --hitcount 4 --rttl --name SSH --rsource -j DROP
-A TCP -p tcp -m tcp --dport 22 -j ACCEPT
...

и

...
MaxAuthTries 2
MaxSessions 6
MaxStartups 2
...

никакой брутфорс не пройдет.

WiZ
()

есть 1 минус - вы глохнули нах весь ICMP, а некоторые из ICMP сообщений необходимы для корректной работы стека.

GHhost
()

А зачем так жёстко поступать с OUTPUT?

Вы интернет от себя тоже защитить хотите?

Suntechnic ★★★★★
()
Ответ на: комментарий от xser

iptables -P OUTPUT ACCEPT

Очевидно же.

И опять же - я не юзал recent, но что-то подсказывает мне, что модуль не быстрый, тем не менее ваши разрешительные правила под ним. И даже -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT. Это правило - безопасный маршрут и выявить эти пакеты можно в саммом начале, и именно оно вход, для всех валидных пакетов которых кстати большенство.

И вот этому законопослушному большинству приходится терпеть муторные обыски с раздеванием, а пропустит их в итоге простой паспортный контроль.

Я бы вынес это правило в начало. Пропустите трафик по валидным маршрутам, и только потом начинайте мучать те пакеты у которых нет документов...

Suntechnic ★★★★★
()
Ответ на: комментарий от xser

Да, хз...

Тут много подходов - одни закрывают всё - типа нефиг, другие оставляют возможность ping'а, справедливо пологая, что машина должна бы иметь права знать от других машинах в сети, ну и fragment опять же...

У меня так на шлюзе:

# Generated by iptables-save v1.4.4 on Fri Mar 11 01:22:14 2011
*mangle
:PREROUTING ACCEPT [37:9312]
:INPUT ACCEPT [37:9312]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [26:3672]
:POSTROUTING ACCEPT [36:4684]
COMMIT
# Completed on Fri Mar 11 01:22:14 2011
# Generated by iptables-save v1.4.4 on Fri Mar 11 01:22:14 2011
*nat
:PREROUTING ACCEPT [8:1823]
:OUTPUT ACCEPT [6:564]
:POSTROUTING ACCEPT [6:564]
-A POSTROUTING -s 192.168.8.0/24 -o eth0 -j SNAT --to-source 86.110.МОЙ.IP 
COMMIT
# Completed on Fri Mar 11 01:22:14 2011
# Generated by iptables-save v1.4.4 on Fri Mar 11 01:22:14 2011
*filter
:INPUT DROP [2:424]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [26:3672]
:ICMP_BAD_PACKETS - [0:0]
:ICMP_PACKETS - [0:0]
:TCP_BAD_PACKETS - [0:0]
:TCP_PACKETS - [0:0]
:TCP_PORTS - [0:0]
:TCP_SAFETY_TRACE - [0:0]
:UDP_BAD_PACKETS - [0:0]
:UDP_PACKETS - [0:0]
-A INPUT -p tcp -j TCP_PACKETS 
-A INPUT -p udp -j UDP_PACKETS 
-A INPUT -p icmp -j ICMP_PACKETS 
-A FORWARD -p tcp -j TCP_BAD_PACKETS 
-A FORWARD -p udp -j UDP_BAD_PACKETS 
-A FORWARD -p icmp -j ICMP_BAD_PACKETS 
-A ICMP_BAD_PACKETS -f -j LOG --log-prefix "icmp fragment:" 
-A ICMP_BAD_PACKETS -f -j DROP 
-A ICMP_PACKETS -j ICMP_BAD_PACKETS 
-A ICMP_PACKETS -p icmp -m icmp --icmp-type 4 -j ACCEPT 
-A ICMP_PACKETS -p icmp -m icmp --icmp-type 0 -j ACCEPT 
-A ICMP_PACKETS -p icmp -m icmp --icmp-type 12 -j ACCEPT 
-A TCP_BAD_PACKETS -m conntrack --ctstate INVALID -j LOG --log-prefix "INVALID state:" 
-A TCP_BAD_PACKETS -m conntrack --ctstate INVALID -j DROP 
-A TCP_BAD_PACKETS -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j LOG --log-prefix "NEW without SYN:" 
-A TCP_BAD_PACKETS -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j DROP 
-A TCP_PACKETS -j TCP_SAFETY_TRACE 
-A TCP_PACKETS -j TCP_BAD_PACKETS 
-A TCP_PACKETS -j TCP_PORTS 
-A TCP_PORTS -p tcp -m tcp --dport 22 -j ACCEPT 
-A TCP_SAFETY_TRACE -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT 
-A TCP_SAFETY_TRACE -i lo -j ACCEPT 
-A TCP_SAFETY_TRACE -s 192.168.8.0/24 -i wlan0 -j ACCEPT 
-A UDP_BAD_PACKETS -p udp -m udp --dport 113 -j REJECT --reject-with icmp-port-unreachable 
-A UDP_BAD_PACKETS -d 255.255.255.255/32 -p udp -m udp --dport 135:139 -j DROP 
-A UDP_PACKETS -p udp -m udp --sport 53 --dport 1024:65535 -j ACCEPT 
-A UDP_PACKETS -p udp -m udp --sport 1024:65535 --dport 1024:65535 -j ACCEPT 
-A UDP_PACKETS -p udp -m udp --dport 123 -j ACCEPT 
-A UDP_PACKETS -p udp -m udp --dport 113 -j REJECT --reject-with icmp-port-unreachable 
COMMIT

А по поводу зациты от скана портов может стоит посмотреть на цель TARPIT?

Вот что под этому поводу в мане сказано:

TARPIT
 Удерживает входящие соединения TCP (объём используемых модулем ресурсов не зависит от количества соединений). Запросы на установление соединения принимаются, но сразу после этого соединения переводятся в состояние удерживания (persist - окно нулевого размера), в которых удалённая сторона не посылает никаких данных, и только отправляет запросы на продолжение каждые 60-240 секунд. Попытки закрытия соединения игнорируются, и оно закрывается по истечении времени ожидания (12-24 минут). 
 Аналогично LaBrea <http://www.hackbusters.net/LaBrea/>, но не требует выделенного сервера и IP-адресов. Любой порт TCP, для которого иначе бы выполнялось одно из действий DROP или REJECT, может удерживать соединения (стать tarpit). 
 Для удерживания соединений на порт TCP 80 данного компьютера: 
 iptables -A INPUT -p tcp -m tcp --dport 80 -j TARPIT 


 Для значительного замедления сканирования неиспользуемых адресов по схеме Code Red/Nimda перенаправьте их на компьютер с Linux, не выполняющий функцию маршрутизации (ip route 10.0.0.0 255.0.0.0 ip.of.linux.box на Cisco), включите перенаправление IP на компьютере с Linux и: 
 iptables -A FORWARD -p tcp -j TARPIT 
 iptables -A FORWARD -j DROP

Suntechnic ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.