iptables, или как не подарить свою систему другим…

iptables, или как не подарить свою систему другим…

Собственна что хотел отметить… Эта статья не однакратно публиковалась в сети… С небольшой переделкой правил довел немного ее до ума… Получилось очень даже ничего… Почему взялся за столь необычный подход??? Необходимо было как можно более засекреченную сделать систему… Здесь изложу только лишь основные моменты, любые правила можно будет по аналогии самому дополнить…
И хотел бы предупредить: Если у кого то стоят разного рода GUI для настройки правил — сносите их… И не лезьте к ним…
Данные правила успешно проверенны на RHLES 5…
Да и еще хотелось бы отметить: не рекомендуется при данном методе писать скрипты запуска… Лучше ввести все через консоль, не так много вводить… При написании скрипта легко допустить ошибку…
Установка политики по умолчанию (отбрасываем все что попало, ничего к нам изначально не идет):
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables — P OUTPUT DROP
statefull-пакеты. Эта цепочка обязательная она разрешает прохождение пакетов в уже установленных соединениях(ESTABLISHED)…
iptables -N allowed (allowed просто как добавочное имя, можно что угодно душе написать)
iptables -F allowed
Прохождение statefull трафика.
iptables -A allowed -m state —state ESTABLISHED,RELATED -j ACCEPT
Журналируем все обращение из внешки:
iptables -A allowed -i eth0 -m limit —limit 1/second -j ULOG —ulog-prefix «Bad packet from eth0»
iptables -A allowed -j DROP
Разрешаем ICMP… Банальным методом, ничего страшного…
iptables -N icmp_in
iptables -F icmp_in
Пропустим только NEW…
iptables -A icmp_in -m state —state NEW -p icmp —icmp-type echo-request -j ACCEPT
iptables -A icmp_in -m state —state NEW -p icmp —icmp-type time-exceeded -j ACCEPT
iptables -A icmp_in -m state —state NEW -p icmp —icmp-type destination-unreachable -j ACCEPT
Ну и журналируем их…
iptables -A icmp_in -p icmp -j ULOG —ulog-prefix «Bad ICMP»
Прохождение по SSH (без него никуда)…
iptables -N ssh-in
iptables -F ssh-in
iptables -A ssh-in -p tcp —dport 22 -j ACCEPT
В сети как я заметил есть много зверо подобных существ так и пытающихся пофлудить разного рода программами для перебора пароля, а точнее для взлома через SSH… Ну хрен бы с ними, устроим им прикол…
iptables -A ssh-in -m limit —limit 1/second -p tcp —tcp-flags ALL RST —dport ssh -j ACCEPT
iptables -A ssh-in -m limit —limit 1/second -p tcp —tcp-flags ALL FIN —dport ssh -j ACCEPT
iptables -A ssh-in -m limit —limit 1/second -p tcp —tcp-flags ALL SYN —dport ssh -j ACCEPT
iptables -A ssh-in -m state —state RELATED,ESTABLISHED -p tcp —dport ssh -j ACCEPT
Исходящая цепь… ICMP — нам же надо кого то пинговатьПодмигнуть
iptables -N icmp_out
iptables -F icmp_out
icmp-reply — разрешить, но не порешитьПодмигнуть
iptables -A icmp_out -p icmp —icmp-type 8 -j ACCEPT
iptables -A icmp_out -m state —state NEW -p icmp —icmp-type time-exceeded -j ACCEPT
iptables -A icmp_out -m state —state NEW -p icmp —icmp-type destination-unreachable -j ACCEPT
Cканеры портов… Еще один прикол…
iptables -N check_tcp
iptables -F check_tcp
Дропаем кастрированные пакеты Улыбка
iptables -A allowed -m state —state INVALID -m limit —limit 3/minute -j ULOG —ulog-prefix «INVALID»
iptables -A allowed -m state —state INVALID -j DROP
iptables -A check_tcp -p tcp —tcp-flags SYN,ACK SYN,ACK -m state —state NEW -j REJECT —reject-with tcp-reset
iptables -A check_tcp -p tcp ! —syn -m state —state NEW -j ULOG —ulog-prefix «NEW not —syn»
iptables -A check_tcp -p tcp ! —syn -m state —state NEW -j DROP
iptables -A check_tcp -p tcp —tcp-flags ALL FIN,URG,PSH -m limit —limit 5/minute -j ULOG —ulog-prefix «NMAP-XMAS»
iptables -A check_tcp -p tcp —tcp-flags ALL FIN,URG,PSH -j DROP
iptables -A check_tcp -p tcp —tcp-flags ALL ALL -m limit —limit 5/minute -j ULOG —ulog-prefix «XMAS»
iptables -A check_tcp -p tcp —tcp-flags ALL ALL -j DROP
iptables -A check_tcp -p tcp —tcp-flags ALL SYN,RST,ACK,FIN,URG -m limit —limit 5/minute -j ULOG —ulog-prefix «XMAS-PSH»
iptables -A check_tcp -p tcp —tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
iptables -A check_tcp -p tcp —tcp-flags ALL NONE -m limit —limit 5/minute -j ULOG —ulog-prefix «NULL_SCAN»
iptables -A check_tcp -p tcp —tcp-flags ALL NONE -j DROP
iptables -A check_tcp -p tcp —tcp-flags SYN,RST SYN,RST -m limit —limit 5/minute -j ULOG —ulog-prefix «SYN/RST»
iptables -A check_tcp -p tcp —tcp-flags SYN,RST SYN,RST -j DROP
iptables -A check_tcp -p tcp —tcp-flags SYN,FIN SYN,FIN -m limit —limit 5/minute -j ULOG —ulog-prefix «SYN/FIN»
iptables -A check_tcp -p tcp —tcp-flags SYN,FIN SYN,FIN -j DROP
Входящий траф…
iptables -A INPUT -p tcp -j check_tcp
iptables -A INPUT -p tcp —dport 22 -j ssh-in //разрешаем на SSH вхождение
iptables -A INPUT -s 192.168.0.1/24 -p tcp —dport 3128 -j com-allow //у меня стоит прокся вот через нее все и топают
iptables -A INPUT -s 192.168.0.1/24 -p udp —dport domain -j com-allow // анлогично тока с ДНС
iptables -A INPUT -p icmp -j icmp_in
iptables -A INPUT -i lo -d 127.0.0.1/8 -j ACCEPT
iptables -A INPUT -j allowed // установившееся соединение оставляем дальше работать
Форварда нет т.к все идет через проксю…
Исходящий траф
iptables -A OUTPUT -j check_tcp
iptables -A OUTPUT -o eth1 -j ACCEPT
iptables -A OUTPUT -p icmp -j icmp_out
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -p tcp —dport 22 -j com-allow
iptables -A OUTPUT -p udp —dport domain -j com-allow
iptables -A OUTPUT -p tcp -m multiport —dport http,https -j com-allow
iptables -A OUTPUT -j allowed
Nata — нету…
Правила закончились если что-то куда не попало значит не судьба попасть…
Может получиться так что iptables собран без библиотеки com-allow, не беда взамен писать ACCEPT…
А теперь собственна про приколы в данных правилах…
Из SSH —limit 1/second ну попытался неопытный парольчег перебрать, в ответ ему ничего не топает… А на самом деле хост наш как бы уже не доступен для негоПодмигнуть
Аналогично и для сканера портов —limit 3/minute… Тока интервал меняется…Улыбка

4 комментария

  • BaнXeлcинк

    22 октября 2008

    А комментарии тут реально интересные. Буду следить за комментами и дальше ;)

  • Андрей Гаркин

    22 октября 2008

    Ок. Будем ждать… :wink:

  • Ренат

    23 октября 2008

    Эээ, а объясните, плиз, а то я что то не совсем въехал в тему, это как?

  • Андрей Гаркин

    23 октября 2008

    А что конкретно объяснить? :roll:
    Экспериментировать надо, в каждом дистре iptables собран с разными ключами, что-то может не работать, но выход всегда есть, к примеру у меня стоят вообще универсальные правила, действуют как ограничители.
    Тока ошибка есть (точнее даже не ошибка для сервера все правильно, к примеру для банковской системы не обязательно чтобы исходящая цепочка куда угодно могла бродить), а вот для десктопа нужно: OUTPUT DROP ( нужно поставить РАЗРЕШИТЬ, т.е ACCEPT), но тогда правила придется переписать по новой все.

Добавить комментарий