ГлавнаяРегистрацияВходВ закладки

Главная » Статьи » CentOS » Безопасность
Iptables защищаемся от ddos
Несколько часов эксперементов, и в итоге получился такой конфиг для iptables:

[-hide-] #!/bin/bash

OUT=»eth1″ # Наш сетевой интерфейс (интернет).
OUTADDR=»1.1.1.1″ # интернет ip
ANYWHERE=»0.0.0.0/0″ # Назначение, любое.
MULTICAST=»224.0.0.0/4″ # Мультикаст пакеты, если у вас не используется оставьте как есть

# Параметры запуска\остановки\статуса скрипта. лучше не трогать
# Остановка скрипта
case «$1″ in
stop)
echo «Shutting down firewall…»

iptables –flush
iptables –delete-chain
iptables –table nat –flush
iptables –table filter –flush
iptables –table nat –delete-chain
iptables –table filter –delete-chain

iptables -t filter -P INPUT ACCEPT
iptables -t filter -P OUTPUT ACCEPT
iptables -t filter -P FORWARD ACCEPT

echo «…done»
;;
status)
echo $»Table: filter»
iptables –list
echo $»Table: nat»
iptables -t nat –list
;;
restart|reload)
$0 stop
$0 start
;;

#
# Запуск скрипта
start)
echo «Starting Firewall…»
echo «»

# Очистка таблиц и цепочек
iptables –flush
iptables –delete-chain
iptables –table nat –flush
iptables –table filter –flush
iptables –table nat –delete-chain
iptables –table filter –delete-chain

# Назначение глобальных политик фаервола
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD

# Изменение параМБ SYSCTL
# Увеличение размера очередей
echo 32000000 > /proc/sys/net/ipv4/netfilter/ip_conntrack_max
# Время ожидания до закрытия соединения
echo 14400 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
# Время ожидания до посылки FIN пакета
echo 60 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_fin_wait
# Время ожидания до посылки FIN пакета
echo 10 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_syn_sent
# Для защиты от syn флуда
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
# Увеличиваем размер backlog очереди
echo 1280 > /proc/sys/net/ipv4/tcp_max_syn_backlog
# Число начальных SYN и SYNACK пересылок для TCP соединения
echo 4 > /proc/sys/net/ipv4/tcp_synack_retries
echo 4 > /proc/sys/net/ipv4/tcp_syn_retries
# Как часто посылать сообщение о поддержании keep alive соединения
echo 1800 > /proc/sys/net/ipv4/tcp_keepalive_time
# Сколько пакетов проверки keepalive посылать, прежде чем соединение будет закрыто.
echo 2 > /proc/sys/net/ipv4/tcp_keepalive_probes
# Зaпрещаем TCP window scaling
echo 0 > /proc/sys/net/ipv4/tcp_window_scaling
# Запрещаем selective acknowledgements, RFC2018
echo 0 > /proc/sys/net/ipv4/tcp_sack
# Запрещаем TCP timestamps, RFC1323
echo 0 > /proc/sys/net/ipv4/tcp_timestamps
# Увеличиваем размер буфера для приема и отправки данных через сокеты.
echo 1048576 > /proc/sys/net/core/rmem_max
echo 1048576 > /proc/sys/net/core/rmem_default
echo 1048576 > /proc/sys/net/core/wmem_max
echo 1048576 > /proc/sys/net/core/wmem_default
# Через какое время убить соединеие закрытое на нашей стороне
echo 1 > /proc/sys/net/ipv4/tcp_orphan_retries

# Temporary eth0 completely disabled
#iptables -A INPUT -i $OUT -j DROP

# Admins – full control (even dagerous)
for admin_ips in $ADMINS; do

iptables -A INPUT -s $admin_ips -m state –state NEW -j ACCEPT
done

# Silently Drop Stealth Scans
# All of the bits are cleared
iptables -A INPUT -p icmp –icmp-type timestamp-request -j DROP
iptables -A INPUT -p tcp –tcp-flags ALL NONE -j DROP
# SYN and FIN are both set
iptables -A INPUT -p tcp –tcp-flags SYN,FIN SYN,FIN -j DROP
# SYN and RST are both set
iptables -A INPUT -p tcp –tcp-flags SYN,RST SYN,RST -j DROP
# FIN and RST are both set
iptables -A INPUT -p tcp –tcp-flags FIN,RST FIN,RST -j DROP
# FIN is the only bit set, without the expected accompanying ACK
iptables -A INPUT -p tcp –tcp-flags ACK,FIN FIN -j DROP
# PSH is the only bit set, without the expected accompanying ACK
iptables -A INPUT -p tcp –tcp-flags ACK,PSH PSH -j DROP
# URG is the only bit set, without the expected accompanying ACK
iptables -A INPUT -p tcp –tcp-flags ACK,URG URG -j DROP

# Multicast – ignore
iptables -A INPUT -s $MULTICAST -j DROP
iptables -A INPUT -d $MULTICAST -j DROP

# any established or related conns are welcome
iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

# Loopback
iptables -A INPUT -i lo -j ACCEPT

# Statistics and auths for customers, ping tests
for net_ips in $NETWORK; do

iptables -A INPUT -p icmp -i $IN –icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp -i $OUT –icmp-type echo-request -j ACCEPT

done

# Открываем нужные нам порты.
# FTP
iptables -A INPUT -p tcp –dport 21 -m state –state NEW -j ACCEPT
# PASSIVE FTP
iptables -t filter -A INPUT -p tcp -m tcp –dport 50000:50500 -m state –state NEW -j ACCEPT
iptables -t filter -A INPUT -p udp -m udp –dport 50000:50500 -m state –state NEW -j ACCEPT
# APACHE
iptables -A INPUT -p tcp –dport 80 -m state –state NEW -j ACCEPT
# ssh
iptables -A INPUT -p tcp –dport 666 -m state –state NEW -j ACCEPT
# 110
iptables -A INPUT -p tcp –dport 110 -m state –state NEW -j ACCEPT
# 25
iptables -A INPUT -p tcp –dport 25 -m state –state NEW -j ACCEPT
########### OUTPUT

iptables -A OUTPUT -p icmp –icmp-type timestamp-reply -j DROP

##——————————–Фаервол закончился ———————–##

;;
*)
echo «Usage: firewall (start|stop|restart|status) EXTIF INTIF»
exit 1
esac

exit 0[-hide-]
Просмотров: 3485
Дата: 2011-07-13 23:58:00
Комментариев: 0
Источник: