Iptables
но тут решил попробовать заняться сервером и для этого выбрал Ubuntu Server 8.10
почитал тут мануальчики, вроде разобрался, потыкался, всё норм
но дошло дело до защиты и на этом счастье кончилось =)))
почитал несколько статей, но больше понравилась (_http://posix.ru/network/iptables/_)
руководствуясь ей написал что то похожее, но в том что написал не совсем уверен, по этому прошу помочь с написанием скрипта для защиты сервера l2 (скажем арендованного и по договоренности с установленной ОС Ubuntu Server 8.10), сайт на отдельном хостинге.
вот что получилось, в коде есть несколько вопросов=)
<script type='text/javascript'>
mytagid = Math.floor( Math.random() * 100 );
document.write("
#переменные:
# Переменная, задающая путь к файлу запуска iptables.
IPT="/sbin/iptables"
#сетевой интерфейс. Это нужно, чтобы не писать в правилах одно и тоже.
INET_IFACE="ppp0"
# Номера непривилегированных портов #что это не понял=)
UNPRIPORTS="1024:65535" #для серва можно ли сделать так UNPRIPORTS="2106,3106,7777"?
start_fw()
{
# Включить перенаправление пакетов через ядро.#кто может объясните что дает это=)
echo 1 > /proc/sys/net/ipv4/ip_forward
# Сбросить правила и удалить цепочки.
$IPT -F
$IPT -X
# Политики по умолчанию.
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT DROP
# Прописываем порты, которые открыты в системе, но которые не должны быть открыты на сетевых интерфейсах:
# мб стоит здесь вписать порт по которому коннектятся друг с другом ГС и ЛС?
# $IPT -A INPUT -p tcp -m tcp -m multiport -i $INET_IFACE -j DROP --dports №порта
# Открываем некоторые порты:
# L2server LS
$IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 2106 --sport $UNPRIPORTS -j ACCEPT
$IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 2106 -j ACCEPT ! --syn
# L2server GS
$IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 7777 --sport $UNPRIPORTS -j ACCEPT
$IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 7777 -j ACCEPT ! --syn
# MySQL (для сайта)
$IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 3106 --sport $UNPRIPORTS -j ACCEPT
$IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 3106 -j ACCEPT ! --syn
# VNC (удаленное управление ) учился вот по этому мануальчику (_http://www.debianadmin.com/remote-desktop-sharing-in-ubuntu.html)
$IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 0 --sport $UNPRIPORTS -j ACCEPT
$IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 0 -j ACCEPT ! --syn
#если на сайте будет управление сервером то здесь надо будет вписать еще и порт на котором Telnet?
}
case "$1" in
start) echo -n "Starting firewall: iptables"
start_fw
echo "."
;;
stop) echo -n "Stopping firewall: iptables"
iptables -F
iptables -X
echo "."
;;
save) echo -n "Saving firewall: iptables"
iptables-save > /etc/rules-save
echo "."
;;
restart) echo -n "Restarting firewall: iptables"
iptables -F
iptables -X
cat /etc/rules-save | iptables-restore
echo "."
;;
reload|force-reload) echo -n "Reloading configuration files for firewall: iptables"
echo "."
;;
*) echo "Usage: /etc/init.d/rc.iptables start|stop|restart|reload|force-reload"
exit 1
;;
esac
exit 0
скрыть
document.close();
и вот еще, надо ли что из этого?
<script type='text/javascript'>
mytagid = Math.floor( Math.random() * 100 );
document.write("
#может ли что из этого понадобится для игрового серва l2?
#-------------------------------------------------------------------------------------------------------
# # Эти правила предохраняют от некоторых типов атак:
# # SYN наводнение.
# # Приводит к связыванию системных ресурсов, так что реальных обмен данными становится не возможным.
# $IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
# $IPT -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP
#
# # UDP наводнение
# # Службы использующие UDP, очень часто становятся мишенью для атак с целью вывода системы из строя.
# $IPT -A INPUT -p UDP -s 0/0 --destination-port 138 -j DROP
# $IPT -A INPUT -p UDP -s 0/0 --destination-port 113 -j REJECT
# $IPT -A INPUT -p UDP -s 0/0 --source-port 67 --destination-port 68 -j ACCEPT
# $IPT -A INPUT -p UDP -j RETURN
# $IPT -A OUTPUT -p UDP -s 0/0 -j ACCEPT
#
# # ICMP - перенаправление
# # ICMP - сообщение указывает системе изменить содержимое таблиц маршрутизации с тем, что бы направлять
# # пакеты по более короткому маршруту. Может быть использовано взломщиком для перенаправления вашего трафика через свою машину.
# $IPT -A INPUT --fragment -p ICMP -j DROP
# $IPT -A OUTPUT --fragment -p ICMP -j DROP
#
# # Разрешаем ICMP соединение. Значительная часть ICMP используется для передачи сообщений о
# # том, что происходит с тем или иным UDP или TCP соединением.
# $IPT -A INPUT -p icmp -m icmp -i $INET_IFACE --icmp-type source-quench -j ACCEPT
# $IPT -A OUTPUT -p icmp -m icmp -o $INET_IFACE --icmp-type source-quench -j ACCEPT
#
# # Разрешаем себе ping наружу - нас же не попингуешь - пакеты отбрасываются.
# $IPT -A INPUT -p icmp -m icmp -i $INET_IFACE --icmp-type echo-reply -j ACCEPT
# $IPT -A OUTPUT -p icmp -m icmp -o $INET_IFACE --icmp-type echo-request -j ACCEPT
#
# # Разрешаем передачу пакета - некорректный параметр - используется, если в заголовке пакета содержится недопустимая запись,
# # или если контрольная сумма заголовка не соответствует контрольной сумме, указанной передающим узлом.
# $IPT -A INPUT -p icmp -m icmp -i $INET_IFACE --icmp-type parameter-problem -j ACCEPT
# $IPT -A OUTPUT -p icmp -m icmp -o $INET_IFACE --icmp-type parameter-problem -j ACCEPT
#
# # Запрещаем подключение к X серверу через сетевые интерфейсы.
# #думаю что закрыл все порты или я ошибаюсь?
# $IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport 1:65535 -j DROP --syn
#
#--------------------------------------------------------------------------------------------------------
# Разрешаем finger, whois, gorper, wais. Traceroute - разрешаем себе, к нам не проломятся - запрещено. Telnet
# # запретил, чтобы соблазна не было передавать пароли прямым текстом.
# $IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 20 -j ACCEPT
# $IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 20 --sport $UNPRIPORTS -j ACCEPT ! --syn
# $IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport $UNPRIPORTS --sport $UNPRIPORTS -j ACCEPT
# $IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport $UNPRIPORTS -j ACCEPT ! --syn
# $IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 23 --sport $UNPRIPORTS -j ACCEPT
# $IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 23 -j ACCEPT ! --syn
# $IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 79 --sport $UNPRIPORTS -j ACCEPT
# $IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 79 -j ACCEPT ! --syn
# $IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 43 --sport $UNPRIPORTS -j ACCEPT
# $IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 43 -j ACCEPT ! --syn
# $IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 70 --sport $UNPRIPORTS -j ACCEPT
# $IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 70 -j ACCEPT ! --syn
# $IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 210 --sport $UNPRIPORTS -j ACCEPT
# $IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 210 -j ACCEPT ! --syn
# $IPT -A OUTPUT -p udp -m udp -o $INET_IFACE --dport 33434:33523 --sport 32769:65535 -j ACCEPT
скрыть
document.close();
я понимаю что тут много с того сайта где я читал, но я посчитал нужным то что в первой части, и не знаю надо ли что из того что во второй, плз посоветуйте, исправьте меня или предложите что нибудь другое, буду благодарен за помошь.
для начала утя patch-o-mathic стоит? чтобы начать пакеты рапознавать и дропать?
некорректный фаер у тебя.
тут хорошая документация:
_http://www.opennet.ru/docs/RUS/iptables/
могу набросать простенький фаервол, если нужно...
Пройдемся по коду с начала...
1. Я не думаю, что твой арендованный сервер в интернет лезет через диал-лап... Так что мило меняем PPP0 на eth0 или как там у тебя называется интерфейс.
2. Да можно... Но лучше оставь непривелигерованные порты закрытыми ...
3. $IPT -P FORWARD DROP
$IPT -P OUTPUT DROP
Это не нужно... Так как на инпат рулы полностью будут блокировать трафик к тебе... И можно манипулировать с ними .. А на форвард зачем? На Ла2 сервере... Он что роутер в сети?
4. Если сайт на одной машине с сервером, то рулы для сайта не нужны... И надо 80 порт открыть 2 рулами выше... Если на другой, то не надо 3306 на весь трафик открывать просто -d $IP_сайта и все, путь 3306 будет виден только для сайта.
5. На сайте не может быть управление сервером через .. что кнопка рестарта ??? :))
6. Остальное не нужно... От син атак просто можно поставить... на фаерволе рулл ип/син... то есть например: 10 син запросов с ИП на единицу времени... Остальное дропаться будет... Плохо то, что если будет интернет клуб, то оттуда будет возможно играть только нескольким компам... Или придется для них отдельно рулы писать...
7. фигер хуиз... И все остальное можно будет работать с дефаулт плиси аксепт на оутгоиг... И не надо им писать что-то другое...
8. Если сайт на пхп... И на одной машине... Лучше апач компилить с пхп, причем апач как воркер... пхп с подержкой мультитрида... (пробовал, работает лучше) и апач с врубленым дефаултным модулем от ддоса выдержит атаку ботнета под 3000 машин .. (тестировалось на железе квард кор проц, 8гб озу).

