Нашел кучу настроек для домашнего компьютера, а вот для сервера - 0. Ситуация такая сервер, где расположены форум и еще некоторые ресурсы в лок. сети провайдер. eth0 - домашняя сеть (комп с виндой выходит в интернет через сервер с линуксом через NAT), eth1 сеть провайдера. Необходимо защитить сервер (ресурсы) от атак и прочего, при этом учитывая, что это сервер, где расположены общедоступные ресурсы, и через него выходит в интернет (NAT) другой комп. Буду очень признателен, если кто напишет хотя бы примерный файл с правилами для iptables. Уровень защиты особо сильный не нужен, т.к. сервер подключен только к локальной сети, внешка же отключена.
mr.L
14.08.2009, 07:42
читайте man и howto и пользуйтесь /dev/hands.
Используется только IPTABLES и bash.
Конфигурация:
RH 8.0 - Server/Firewall and etc
eth0 - смотрит наружу IP: 192.168.0.10
eth1- смотрит в мою local'ку IP: 10.0.0.1
В local'ке две машины Workstation and Laptop, иногда брат приезжает с третьей машиной, будем называть его OTHER.
За основу взяты некоторые scripts публично доступные.
1. Нужно считать трафик TCP как INBOUND так и OUTBOUND.
2. Трафик с провайдерской сеткой.
3. Траффик с интернетом.
4. Ну и конечно сколько жрет внешнего трафика каждая машина.
Поехали:
Начнем с того что надо вставить пару строчек (не совсем пару но кто хочет может вынести их в отдельный файл) в ваш script который настраивает iptables.
1. Переменные используемые в скрипте firwall'а:
IPTABLES="/sbin/iptables"
# 1.1 Your external device
INET_IP="192.168.0.10"
INET_IFACE="eth0"
# 1.2 Internet Service Provider's Network
ISP_IP="192.168.0.1"
ISP_IP_RANGE="192.168.0.0/24"
# Local Area Network configuration.
# your LAN's IP range and localnet host's IP. /24 means to only use the first 24
# bits of the 32 bit IP address. the same as netmask 255.255.255.0
LAN_IP="10.0.0.1"
LAN_IP_RANGE="10.0.0.0/24"
LAN_IFACE="eth1"
LAN_IP_WORKSTATION="10.0.0.11"
LAN_IP_LAPTOP="10.0.0.10"
Это мы установили переменные, которые в дальнейшем будут использоваться, ну и для удобочитаемости пригодятся.
2. Настраиваем chains/цепочки INPUT, OUTPUT and FORWARD чтобы отобрать трафика который нас интересует. По команде -j RETURN в цепочках для расчета траффика, пакет вернется на следующее правило которое следует за нашими правилами для INPUT, OUTPUT и FORWARD. Так что не волнуйтесь мышь не проскочит. Эти правила должны стоять первыми в своих цепочках.
# Перенаправляем трафик входящий с внешнего устройства
$IPTABLES -A INPUT -d $INET_IP -i $INET_IFACE -j TRAFFIC
# Перенаправляем трафик локальной сети
$IPTABLES -A FORWARD -o $LAN_IFACE -d $LAN_IP_RANGE -j TRAFFIC_FW
$IPTABLES -A FORWARD -s $LAN_IP_RANGE -o $INET_IFACE -j TRAFFIC_FW
# Перенаправляем трафик исходящий с внешнего устройства
$IPTABLES -A OUTPUT -s $INET_IP -o $INET_IFACE -j TRAFFIC
3. Далее настраиваем chains/цепочки которые будем использовать для расчета трафика
# Create separate chains for TRAFFIC Counter
$IPTABLES -N TRAFFIC
# Для трафика с localnet
$IPTABLES -N TRAFFIC_FW
# Для IN трафика вашего сервера
$IPTABLES -N TRAFFIC_TCP_INBOUND
# Для OUT трафика вашего сервера
$IPTABLES -N TRAFFIC_TCP_OUTBOUND
# Your overall INBOUND and OUTBOUND traffic with external network except ISP ip range
# Ваш INBOUND and OUTBOUND traffic с внешней сетью за исключением провайдерской подсети
$IPTABLES -N TRAFFIC_TCP_INBOUND_EXT
$IPTABLES -N TRAFFIC_TCP_OUTBOUND_EXT
# Your overall INBOUND and OUTBOUND traffic with ISP network
# Ваш INBOUND and OUTBOUND traffic с провайдерской подсетью
$IPTABLES -N TRAFFIC_TCP_INBOUND_ISP
$IPTABLES -N TRAFFIC_TCP_OUTBOUND_ISP
# Your overall INBOUND and OUTBOUND traffic of your server
$IPTABLES -N TRAFFIC_TCP_INBOUND_SERVER
$IPTABLES -N TRAFFIC_TCP_OUTBOUND_SERVER
# Your overall INBOUND and OUTBOUND traffic of your local network
$IPTABLES -N TRAFFIC_TCP_INBOUND_FRWD
$IPTABLES -N TRAFFIC_TCP_INBOUND_WS
$IPTABLES -N TRAFFIC_TCP_INBOUND_LAPTOP
$IPTABLES -N TRAFFIC_TCP_INBOUND_LNET
#
$IPTABLES -N TRAFFIC_TCP_OUTBOUND_FRWD
$IPTABLES -N TRAFFIC_TCP_OUTBOUND_WS
$IPTABLES -N TRAFFIC_TCP_OUTBOUND_LAPTOP
$IPTABLES -N TRAFFIC_TCP_OUTBOUND_LNET
4. Далее настраиваем chains/цепочки чтобы они работали так как нам нужно и разбрасывали трафик по подцепочкам (Будьте внимательны не все команды уместились на одной строке)
#
# Create content for TRAFFIC chains
#************************************************* ********** *****
# Основная цепочка, здесь фильтруется трафик для сервера на IN and OUT
$IPTABLES -A TRAFFIC -p tcp -d $INET_IP -i $INET_IFACE -j TRAFFIC_TCP_INBOUND
$IPTABLES -A TRAFFIC -p tcp -s $INET_IP -o $INET_IFACE -j TRAFFIC_TCP_OUTBOUND
$IPTABLES -A TRAFFIC -j RETURN
# Основная цепочка здесь фильтруется трафик для localnetwork на IN and OUT
$IPTABLES -A TRAFFIC_FW -p tcp -d $LAN_IP_RANGE -o $LAN_IFACE -j TRAFFIC_TCP_INBOUND_FRWD
$IPTABLES -A TRAFFIC_FW -p tcp -s $LAN_IP_RANGE -o $INET_IFACE -j TRAFFIC_TCP_OUTBOUND_FRWD
$IPTABLES -A TRAFFIC_FW -j RETURN
# Исходящий трафик с localnetwork
$IPTABLES -A TRAFFIC_TCP_OUTBOUND_FRWD -s $LAN_IP_LAPTOP -o $INET_IFACE -j TRAFFIC_TCP_OUTBOUND_LAPTOP
$IPTABLES -A TRAFFIC_TCP_OUTBOUND_FRWD -s $LAN_IP_WORKSTATION -o $INET_IFACE -j TRAFFIC_TCP_OUTBOUND_WS
$IPTABLES -A TRAFFIC_TCP_OUTBOUND_FRWD -s $LAN_IP_RANGE -o $INET_IFACE -j TRAFFIC_TCP_OUTBOUND_LNET
# Redirect для подсчета трафика для ISP и Internet
$IPTABLES -A TRAFFIC_TCP_OUTBOUND_FRWD -s $LAN_IP_RANGE -o $INET_IFACE -d $ISP_IP_RANGE -j TRAFFIC_TCP_OUTBOUND_ISP
$IPTABLES -A TRAFFIC_TCP_OUTBOUND_FRWD -s $LAN_IP_RANGE -o $INET_IFACE ! -d $ISP_IP_RANGE -j TRAFFIC_TCP_OUTBOUND_EXT
$IPTABLES -A TRAFFIC_TCP_OUTBOUND_FRWD -j RETURN
# Исходящий трафик с Work Station
$IPTABLES -A TRAFFIC_TCP_OUTBOUND_WS -j RETURN
# Исходящий трафик с Laptop
$IPTABLES -A TRAFFIC_TCP_OUTBOUND_LAPTOP -j RETURN
# Исходящий трафик с OTHER т.е. весь оставшийся
$IPTABLES -A TRAFFIC_TCP_OUTBOUND_LNET -j RETURN
# Исходящий трафик с Server/Firewall
# Redirect для подсчета траффика для ISP и Internet
$IPTABLES -A TRAFFIC_TCP_OUTBOUND -s $INET_IP -o $INET_IFACE -d $ISP_IP_RANGE -j TRAFFIC_TCP_OUTBOUND_ISP
$IPTABLES -A TRAFFIC_TCP_OUTBOUND -s $INET_IP -o $INET_IFACE ! -d $ISP_IP_RANGE -j TRAFFIC_TCP_OUTBOUND_EXT
$IPTABLES -A TRAFFIC_TCP_OUTBOUND -s $INET_IP -o $INET_IFACE -j TRAFFIC_TCP_OUTBOUND_SERVER
$IPTABLES -A TRAFFIC_TCP_OUTBOUND -j RETURN
# Трафик предназначенный для ISP
$IPTABLES -A TRAFFIC_TCP_OUTBOUND_ISP -j RETURN
# Трафик предназначенный для Internet
$IPTABLES -A TRAFFIC_TCP_OUTBOUND_EXT -j RETURN
# Исходящий трафик с Server/Firewall
$IPTABLES -A TRAFFIC_TCP_OUTBOUND_SERVER -j RETURN
# Входящий трафик на Server/Firewall
# Redirect для подсчета трафика от ISP и Internet
$IPTABLES -A TRAFFIC_TCP_INBOUND -d $INET_IP -i $INET_IFACE -s $ISP_IP_RANGE -j TRAFFIC_TCP_INBOUND_ISP
$IPTABLES -A TRAFFIC_TCP_INBOUND -d $INET_IP -i $INET_IFACE ! -s $ISP_IP_RANGE -j TRAFFIC_TCP_INBOUND_EXT
$IPTABLES -A TRAFFIC_TCP_INBOUND -d $INET_IP -i $INET_IFACE -j TRAFFIC_TCP_INBOUND_SERVER
$IPTABLES -A TRAFFIC_TCP_INBOUND -j RETURN
# От ISP
$IPTABLES -A TRAFFIC_TCP_INBOUND_ISP -j RETURN
# От Internet
$IPTABLES -A TRAFFIC_TCP_INBOUND_EXT -j RETURN
# Входящий трафик на Server/Firewall
$IPTABLES -A TRAFFIC_TCP_INBOUND_SERVER -j RETURN
# Входящий трафик на localnetwork
$IPTABLES -A TRAFFIC_TCP_INBOUND_FRWD -d $LAN_IP_LAPTOP -o $LAN_IFACE -j TRAFFIC_TCP_INBOUND_LAPTOP
$IPTABLES -A TRAFFIC_TCP_INBOUND_FRWD -d $LAN_IP_WORKSTATION -o $LAN_IFACE -j TRAFFIC_TCP_INBOUND_WS
$IPTABLES -A TRAFFIC_TCP_INBOUND_FRWD -d $LAN_IP_RANGE -o $LAN_IFACE -j TRAFFIC_TCP_INBOUND_LNET
# Redirect для подсчета трафика от ISP и Internet
$IPTABLES -A TRAFFIC_TCP_INBOUND_FRWD -d $LAN_IP_RANGE -o $LAN_IFACE -s $ISP_IP_RANGE -j TRAFFIC_TCP_INBOUND_ISP
$IPTABLES -A TRAFFIC_TCP_INBOUND_FRWD -d $LAN_IP_RANGE -o $LAN_IFACE ! -s $ISP_IP_RANGE -j TRAFFIC_TCP_INBOUND_EXT
$IPTABLES -A TRAFFIC_TCP_INBOUND_FRWD -j RETURN
# Входящий трафик на Workstation
$IPTABLES -A TRAFFIC_TCP_INBOUND_WS -j RETURN
# Входящий трафик на Laptop
$IPTABLES -A TRAFFIC_TCP_INBOUND_LAPTOP -j RETURN
# Входящий трафик на OTHER т.е. все отальные
$IPTABLES -A TRAFFIC_TCP_INBOUND_LNET -j RETURN
С настройками iptables покончено
5. Далее пишем скрипт который выполняется cron/кроном он будет запрашивать iptables, подсчитывать и выводить отчеты по трафику либо на /dev/stdout либо в файл путь к которому указывается в начале скрипта.
Пример команды запуска скрипта: /sbin/traflog -s -p
Данная команда выводит на /dev/stdout статистику для вашего сервера.
( Будте внимательны Вывод в файл по умолчанию. )
#!/bin/sh
#
# traflog - logger of iptable's statistic
#
# Path to your system iptables
IPTABLES="/sbin/iptables"
# Path to dir with log output
F_PATH="/var/log/firewall/traflog"
#
# Files have names like 'YearMonthDate . whose trafic
F_LNET="$F_PATH/"`date +"%Y%m%d"`".lnet"
F_SERV="$F_PATH/"`date +"%Y%m%d"`".serv"
F_OVER="$F_PATH/"`date +"%Y%m%d"`".over"
F_ALL="$F_PATH/"`date +"%Y%m%d"`".all"
-b)
if [ "$2" = "-p" ]; then
F_ALL="/dev/stdout"
fi
shorttraf
if [ "$2" = "-r" ]; then
resettraf
fi
RETVAL=0
;;
-o)
if [ "$2" = "-p" ]; then
F_OVER="/dev/stdout"
fi
overalltraf
if [ "$2" = "-r" ]; then
resettraf
fi
RETVAL=0
;;
-l)
if [ "$2" = "-p" ]; then
F_LNET="/dev/stdout"
fi
localtraf
if [ "$2" = "-r" ]; then
resettraf
fi
RETVAL=0
;;
-s)
if [ "$2" = "-p" ]; then
F_SERV="/dev/stdout"
fi
servertraf
if [ "$2" = "-r" ]; then
resettraf
fi
RETVAL=0
;;
-a)
if [ "$2" = "-p" ]; then
F_ALL="/dev/stdout"
F_LNET="/dev/stdout"
F_SERV="/dev/stdout"
F_OVER="/dev/stdout"
fi
localtraf
servertraf
overalltraf
shorttraf
if [ "$2" = "-r" ]; then
resettraf
fi
RETVAL=0
;;
*)
echo $"usage: traflog [-bolsa] [-pr]"
echo $" -b log Overall traffic statistic in brif"
echo $" -o log only Overall statistic"
echo $" -l log internet traffic for local network"
echo $" -s log internet traffic for server"
echo $" -a log internet traffic for All"
echo $" -r reset statistic in ALL chains of iptables"
echo $" -p display statistic information only on /dev/stdout"
echo $""
echo $" log path: $FILE"
exit 1
esac
exit $RETVAL
6. И последнее кидаем указанную ниже строчку в /etc/crontab или как он у вас называется, и ждем 23:55 каждого дня чтобы посмотреть статистику дня. Если натерпится выводите командой /sbin/traflog -a -p на экран.
55 23 * * * root /etc/firewall/traflog -a -r
( Непременно с ключом -r чтобы сбросить статистику за прошедший день. )
ну и почитай здесь - есть интересные темы ) - http://www.ingineer.ru/linux/