Оглавление Оглавление 1
Вид материала | Документы |
- Кожич Павел Павлович Минск 2010 г Оглавление Оглавление 2 Применение информационных, 302.47kb.
- Оглавление оглавление, 63.5kb.
- Оглавление Оглавление, 259.29kb.
- Ланин Борис Евсеевич Оглавление Оглавление 1 лекция, 810.53kb.
- Оглавление: Оглавление:, 350.3kb.
- Октябрьской Революции Краснознаменной академии (ввиа) имени профессора Н. Е. Жуковского, 1685.68kb.
- Караваева Елена Леонидовна г. Светлый 2008 г. Оглавление оглавление 2 пояснительная, 130.81kb.
- Винарский Владимир Афанасьевич ассистент Шешко Сергей Михайлович Минск 2008 г. Оглавление, 156.88kb.
- Коледа Виктор Антонович, ст преподаватель Пол Кожич Минск 2010 г. Оглавление Оглавление, 340.48kb.
- Обуховский Виктор Степанович, ассистент Позняков Андрей Михайлович Минск 2006 г оглавление, 266.12kb.
Настройка маршрутизатора
/proc/sys/net/ipv4 /etc/services ipchains iptables routed
ВведениеЧтобы сконфигурировать маршрутизатор для такой небезопасной сети, как Интернет, необходимо предпринять множество шагов. Прежде всего, определите, какие сервисы вам нужны и заблокируйте все остальное! Это минимизирует вероятность обнаружения уязвимости в вашей системе. Хорошей идеей будет регистрировать все отброшенные и отклоненные пакеты в журнале (и ограничить интенсивность этого процесса во избежание создания журнальных файлов слишком большого размера). Блокирование сканирования портов с помощью PortSentryБольшинство сканирований портов может быть обнаружено с помощью утилиты portsentry компании Psionic Technologies (теперь Cisco). Демон portsentry прослушивает несколько известных портов и может заблокировать IP-адрес в случае обнаружения сканирования. Установка Portsentry: Скачайте архив с исходным кодом с web-сайта и установите утилиту вручную: [root@test root]# tar zxvf portsentry-1.2.tar.gz -C /usr/local/src/ portsentry_beta/ portsentry_beta/portsentry.c portsentry_beta/portsentry.h portsentry_beta/portsentry_io.c portsentry_beta/portsentry_io.h ... [SNIP] ... portsentry_beta/ignore.csh [root@test root]# cd /usr/local/src/portsentry_beta/ [root@test portsentry_beta]# make linux SYSTYPE=linux Making cc -O -Wall -DLINUX -DSUPPORT_STEALTH -o ./portsentry ./portsentry.c \ ./portsentry_io.c ./portsentry_util.c [root@test portsentry_beta]# [root@test portsentry_beta]# make install Creating psionic directory /usr/local/psionic Setting directory permissions Creating portsentry directory /usr/local/psionic/portsentry Setting directory permissions chmod 700 /usr/local/psionic/portsentry Copying files cp ./portsentry.conf /usr/local/psionic/portsentry cp ./portsentry.ignore /usr/local/psionic/portsentry cp ./portsentry /usr/local/psionic/portsentry Setting permissions chmod 600 /usr/local/psionic/portsentry/portsentry.ignore chmod 600 /usr/local/psionic/portsentry/portsentry.conf chmod 700 /usr/local/psionic/portsentry/portsentry Edit /usr/local/psionic/portsentry/portsentry.conf and change your settings if you haven't already. (route, etc) WARNING: This version and above now use a new directory structure for storing the program and config files (/usr/local/psionic/portsentry). Please make sure you delete the old files when the testing of this install is complete. [root@test portsentry_beta]# Настройка portsentry : Конфигурационный файл утилиты: /usr/local/psionic/portsentry/portsentry.conf. Укажите порты, на которых вы хотите запустить утилиту portsentry: TCP_PORTS="1,11,15,79,111,119,143,540,635,1080,1524,2000,5742,6667,12345,12346,20034,27665,31337,32771,32772,32773,32774,40421,49724,54320" UDP_PORTS="1,7,9,69,161,162,513,635,640,641,700,37444,34555,31335,32770,32771,32772,32773,32774,31337,54321" Заблокируйте сканирование UDP и TCP: BLOCK_UDP="1" BLOCK_TCP="1" Перенаправьте атакующий хост на null-маршрут: KILL_ROUTE="/sbin/route add $TARGET$ 192.168.66.66 или KILL_ROUTE="/sbin/route add -host $TARGET$ reject или KILL_ROUTE="/usr/local/bin/iptables -I INPUT -s $TARGET$ -j DROP Также можно запустить какой-нибудь скрипт в ответ на атаку. Однако такая конфигурация не рекомендуется. Хорошей идеей будет настроить игнорирование IP-адресов ваших DNS серверов и маршрутизаторов. Эти IP адреса должны быть помещены в файл /usr/local/psionic/portsentry/portsentry.ignore. Стартовый сценарий Portsentry: Данный скрипт называется /etc/init.d/portsentry : /!/bin/bash # # portsentry Start the portsentry portscan detector # # Authors: Craig Rowland # and Matthias Saou # # chkconfig: 345 98 05 # description: PortSentry Port Scan Detector is part of the Abacus Project \ # suite of tools. The Abacus Project is an initiative to release \ # low-maintenance, generic, and reliable host based intrusion \ # detection software to the Internet community. # processname: portsentry # configfile: /etc/portsentry/portsentry.conf # pidfile: /var/run/portsentry.pid # Source function library. . /etc/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ ${NETWORKING} = "no" ] && exit 0 # For this script to work on non english systems export LANG=C RETVAL=0 start () { # Set up the ignore file SENTRYDIR=/usr/local/psionic/portsentry FINALIGNORE=$SENTRYDIR/portsentry.ignore TMPFILE=$SENTRYDIR/portsentry.ignore.tmp # Testline is used to see if the initscript has already been run if [ -f $FINALIGNORE ] ; then cp -f $FINALIGNORE $TMPFILE testline=`grep -n "Do NOT edit below this" $TMPFILE | cut --delimiter=":" -f1` if [ -z "$testline" ] ; then echo > /dev/null # Do nothing else let headline=$testline-2 head -$headline $FINALIGNORE > $TMPFILE fi fi echo '#########################################' >> $TMPFILE echo '# Do NOT edit below this line, if you #' >> $TMPFILE echo '# do, your changes will be lost when #' >> $TMPFILE echo '# portsentry is restarted via the #' >> $TMPFILE echo '# initscript. Make all changes above #' >> $TMPFILE echo '# this box. #' >> $TMPFILE echo '#########################################' >> $TMPFILE echo '' >> $TMPFILE echo '# Exclude all local interfaces' >> $TMPFILE for i in `/sbin/ifconfig -a | grep inet | awk '{print $2}' | sed 's/addr://'` ; do echo $i >> $TMPFILE done echo '' >> $TMPFILE echo '# Exclude the default gateway(s)' >> $TMPFILE for i in `/sbin/route -n | grep 0.0.0.0 | awk '{print $2}'` ; do echo $i >> $TMPFILE done echo '' >> $TMPFILE echo '# Exclude the nameservers' >> $TMPFILE for i in `/bin/cat /etc/resolv.conf | grep nameserver | awk '{print $2}'` ; do echo $i >> $TMPFILE done echo '' >> $TMPFILE echo '# And last but not least...' >> $TMPFILE echo '0.0.0.0' >> $TMPFILE echo '' >> $TMPFILE cp -f $TMPFILE $SENTRYDIR/portsentry.ignore rm -f $TMPFILE # Check for modes defined in the config file if [ -s $SENTRYDIR/portsentry.modes ] ; then modes=`cut -d "#" -f 1 $SENTRYDIR/portsentry.modes` else modes="tcp udp" fi for i in $modes ; do action $"Starting portsentry -$i: " /usr/local/psionic/portsentry/portsentry -$i RETVAL=$? done [ $RETVAL -eq 0 ] && touch /var/lock/subsys/portsentry return $RETVAL } stop() { echo -n $"Stopping portsentry: " killproc portsentry RETVAL=$? echo [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/portsentry return $RETVAL } # See how we were called. case $1 in start) start ;; stop) stop ;; status) status portsentry RETVAL=$? ;; restart) stop start RETVAL=$? ;; condrestart) if [ -f /var/lock/subsys/portsentry ]; then stop start RETVAL=$? fi ;; *) echo $"Usage: portsentry {start|stop|restart|condrestart|status}" exit 1 esac exit $RETVAL Использование Portsentry : portsentry может быть запущен с различными параметрами: -tcp :прослушивать порты из списка TCP_PORTS -udp :прослушивать порты из списка UDP_PORTS -stcp :режим «стелс»: прослушивать порты из списка TCP_PORTS, но не отвечать на соединения. -sudp :режим «стелс»: прослушивать порты из списка UDP_PORTS, но не отвечать на соединения. -atcp : Расширенный механизм обнаружения сканирования TCP портов: используется для мониторинга более 1024-х портов -audp : Расширенный механизм обнаружения сканирования UDP портов: используется для мониторинга более 1024-х портов [root@test root]# /etc/init.d/portsentry start Starting portsentry -tcp: [ OK ] Starting portsentry -udp: [ OK ] [root@test root]# Чтобы протестировать конфигурацию, запустите сканирование с другого хоста: [root@test root]# nmap -sS -v -O 192.168.0.42 Starting nmap 3.50 ( ure.org/nmap/ ) at 2004-08-18 13:37 CEST Host test (192.168.0.42) appears to be up ... good. Initiating SYN Stealth Scan against test (192.168.0.42) at 13:37 Adding open port 80/tcp Adding open port 824/tcp Adding open port 6000/tcp ... [пропущено] ... Nmap run completed -- 1 IP address (1 host up) scanned in 6.834 seconds [root@test root]# Регистрация событий в журнале: Журналы утилиты portsentry можно просматривать в файле /var/log/syslog : Aug 18 13:32:58 test portsentry[5019]: attackalert: TCP SYN/Normal scan from host: 192.168.0.165/192.168.0.165 to TCP port: 72 Aug 18 13:32:58 test portsentry[5019]: attackalert: Host 192.168.0.165 has been blocked via wrappers with string: "ALL: 192.168.0.165" Aug 18 13:32:58 test kernel: ip_tables: (C) 2000-2002 Netfilter core team Aug 18 13:32:58 test portsentry[5019]: attackalert: Host 192.168.0.165 has been blocked via dropped route using command: "/sbin/iptables -I INPUT -s 192.168.0.165 -j DROP" Aug 18 13:32:58 test portsentry[5019]: attackalert: TCP SYN/Normal scan from host: 192.168.0.165/192.168.0.165 to TCP port: 23 Aug 18 13:32:58 test portsentry[5019]: attackalert: Host: 192.168.0.165/192.168.0.165 is already blocked Ignoring Aug 18 13:32:58 test portsentry[5019]: attackalert: TCP SYN/Normal scan from host: 192.168.0.165/192.168.0.165 to TCP port: 386 а также в /usr/local/psionic/portsentry/portsentry.history : 1092828778 - 08/18/2004 13:32:58 Host: 192.168.0.165/192.168.0.165 Port: 72 TCP Blocked Если выставить опции KILL_ROUTE значение iptables, portsentry добавит правило iptables, блокирующее хост, запустивший сканирование портов: [root@test root]# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination DROP all -- 192.168.0.165 anywhere Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination [root@test root]# Фильтрация сетевых пакетовВведениеПакетный фильтр анализирует сетевые пакеты и принимает решение о том, какие пакеты принять, а какие - нет. По сути это то, что делает межсетевой экран (брандмауэр)5. Для операционной системы Linux в данный момент используется межсетевой экран Netfilter / Iptables . Брандмауэр состоит из двух частей: Netfilter - это часть ядра, принимающая и посылающая пакеты. Вторая часть, iptables, - это пользовательская утилита, применяемая для настройки правил фильтрации. Netfilter / Iptables входят в состав ядра версии 2.4:
Диаграмма прохождения пакета: INPUT, FORWARD и OUTPUT - это так называемые цепочки правил. В случае, если адрес назначения пакета совпадает с адресом межсетевого экрана, применяются правила из цепочки INPUT. Когда пакет посылается с адреса брандмауэра куда-то наружу, применяются правила цепочки OUTPUT. Если пакет должен быть передан межсетевым экраном куда-то дальше (т.е. он поступил на его адрес, но на самом деле предназначается для другого хоста), применяются правила цепочки FORWARD. Настройка ядраЧтобы заставить работать iptables, необходимо настроить ядро. Опции могут быть вкомпилированы в ядро или составлять отдельный модуль.
Маршрутизация и фильтрацияКогда пакет достигает сетевого интерфейса, он проходит несколько шагов, прежде чем будет передан локальному процессу, удален или передан на другой хост. Стадии обработки пакета: Межсетевой экран / маршрутизатор использует цепочку FORWARD для защиты локальной сети. Для защиты самого хоста используется цепочка правил INPUT. Отслеживание соединенийNetfilter хранит сведения о состоянии тех соединений, для которых это понятие имеет смысл. Данная техника реализуется с помощью анализа пакетов в цепочках PREROUTING и OUTPUT. Типичное соединение может иметь следующие состояния:
Таблица соединений ядра может быть выведена на экран следующим образом: [root@test root]# cat /proc/net/ip_conntrack |more tcp 6 96 SYN_SENT src=127.0.0.1 dst=192.168.0.42 sport=50295 dport=307 [UNREPLIED] src=192.168.0.42 dst=127.0.0.1 spor t=307 dport=50295 use=1 ... [root@test root]# Здесь, первое значение – это имя протокола (tcp), второе – номер протокола (6) и третье – таймаут, сбрасываемый в значение по умолчанию с каждым переданным пакетом. Таймауты
TCPСоединения протокола TCP устанавливаются в три приема: Клиент Сервер SYN ===> <=== SYN/ACK ACK ===> Следующие пакеты используются для корректного закрытия соединения TCP: Клиент Сервер FIN ===> <=== FIN/ACK ACK ===>
tcp 6 117 SYN_SENT src=192.168.1.5 dst=192.168.1.35 sport=1031 dport=23 [UNREPLIED] src=192.168.1.35 dst=192.168.1.5 sport=23 dport=1031 use=1
tcp 6 57 SYN_RECV src=192.168.1.5 dst=192.168.1.35 sport=1031 dport=23 src=192.168.1.35 dst=192.168.1.5 sport=23 dport=1031 use=1
tcp 6 431999 ESTABLISHED src=192.168.1.5 dst=192.168.1.35 sport=1031 dport=23 src=192.168.1.35 dst=192.168.1.5 sport=23 dport=1031 use=1 После обмена еще несколькими пакетами соединение перейдет в состояние ASSURED.
tcp 6 114 TIME_WAIT src=192.168.10.2 dst=192.168.8.4 sport=35054 dport=5223 src=192.168.8.4 dst=192.168.10.2 sport=5223 dport=35054 [ASSURED] use=1
UDPОбмен данными по протоколу UDP осуществляется без установления соединения, что означает, что в инициировании или закрытии соединения нет необходимости.
udp 17 20 src=192.168.1.2 dst=192.168.1.5 sport=137 dport=1025 [UNREPLIED] src=192.168.1.5 dst=192.168.1.2 sport=1025 dport=137 use=1
udp 17 170 src=192.168.1.2 dst=192.168.1.5 sport=137 dport=1025 src=192.168.1.5 dst=192.168.1.2 sport=1025 dport=137 use=1 После этого соединение рассматривается как установленное, поскольку были отмечены пакеты обоих хостов. Однако оно не будет помечено как ESTABLISHED поскольку формально в UDP не существует понятия установленного соединения.
udp 17 175 src=192.168.1.5 dst=195.22.79.2 sport=1025 dport=53 src=195.22.79.2 dst=192.168.1.5 sport=53 dport=1025 [ASSURED] use=1 ICMPПакеты ICMP используются для контроля и не устанавливают соединений. Существует несколько типов ICMP-пакетов, но только четыре из них приводят к генерации ответного пакета.
Клиент Сервер ICMP Echo Request ===> <=== ICMP Echo Reply /proc/net/ip_conntrack: icmp 1 25 src=192.168.1.6 dst=192.168.1.10 type=8 code=0 id=33029 [UNREPLIED] src=192.168.1.10 dst=192.168.1.6 type=0 code=0 id=33029 use=1 Поскольку после ответа трафика больше нет, информация об ICMP-соединении удаляется сразу же после получения ответа. Таймаут ICMP может быть задан в файле: /proc/sys/net/ipv4/netfilter/ip_ct_icmp_timeout По умолчанию его значение равно 30 секунд, что должно быть достаточно в большинстве случаев.
Клиент Маршрутизатор Сервер SYN ===============> <=== ICMP Net unreachable Маршрутизатор рассматривает соединение как новое (состояние NEW), поскольку прошел пакет SYN. Пакет ошибки ICMP будет распознан как имеющий отношение к соединению и оно будет удалено из списка отслеживаемых. Нечто подобное происходит и с UDP соединениями: Клиент Маршрутизатор Сервер UDP пакет ===============> <=== ICMP Net prohibited Другие соединенияСоединения таких протоколов как NETBLT, MUX, EGP обрабатываются также, как и UDP. Первый пакет переводит соединение в состояние NEW, а дальнейший обмен пакетами приводит к состоянию ESTABLISHED. Сложные протоколыНекоторые протоколы обмениваются такой информацией, как IP-адреса и номера портов, помещая ее в данные своих пакетов. Примеры таких протоколов: ICQ, IRC, FTP, Oracle, ntalk или H.323. В этом случае ядро не может так легко отслеживать соединение, поскольку информация о нем находится не в заголовке пакета. Чтобы такие протоколы работали, ядро вынуждено соответствующим образом анализировать трафик и отслеживать пакеты, имеющие отношение к соединению. Например, протокол FTP обычно использует два соединения. Первое из них – контрольная сессия на порту 21. Когда мы загружаем файл, клиент посылает номер порта на сервер и последний инициирует новое соединение со своего собственного 20-го порта (второе соединение - для данных) на указанный порт и передает данные. Клиент Маршрутизатор Сервер <=== RELATED === SYN SYN/ACK === ESTABLISHED ===> В пассивном режиме FTP-сервер сообщает клиенту, с каким портом нужно соединиться. Клиент соединяется со своего 20-го порта с указанным портом на сервере и получает запрошенные данные. Клиент Маршрутизатор Сервер SYN === RELATED ===> <=== ESTABLISHED === SYN/ACK Команда iptablesФормат команды iptables: iptables [-t table] command [match] [target/jump] ТаблицыУ Netfilter есть три главных таблицы. Если ни одна из таблиц не указана опцией -t, то по умолчанию будет использоваться таблица filter. Чтобы отобразить все правила какой-либо таблицы, используется опция -L: [root@test root]# iptables -t mangle -L Таблица filter Эта таблица осуществляет основную работу по фильтрации. Например, с помощью опции -j и целей ACCEPT и DROP пакеты могут быть приняты или отброшены соответственно. Таблица filter позволяет использовать почти все доступные цели. Правила могут содержать цели: DROP, LOG, ACCEPT, REJECT, ... . Набор доступных целей зависит от конфигурации ядра. [root@test root]# iptables -A INPUT -p tcp -j ACCEPT Таблица mangle Эта таблица правил позволяет модифицировать некоторые поля пакета данных, например, TTL (Time To Live – время жизни пакета), TOS (Type Of Service – тип сервиса), MARK. Поле TTL может использоваться для, сокрытия подсети. TOS и MARK в основном используются пользовательскими программами, такими как iproute2. Таблица nat Эта таблица используется для трансляции сетевых адресов (NAT). Адреса отправителя и получателя, указанные в пакете, могут быть изменены в этой таблице. В этой таблице не допускается фильтрация. Только первый пакет из потока данных попадет в эту цепочку правил. Остальные пакеты будут изменяться тем же способом автоматически.
КомандыВ iptables, правила могут быть добавлены, модифицированы и удалены.
[root@test root]# iptables -A INPUT -p tcp --dport 80 -j DROP
[root@test root]# iptables -D INPUT -p tcp --dport 80 -j DROP [root@test root]# iptables -D 1
[root@test root]# iptables -R INPUT 1 -s 192.168.0.1 -j DROP
[root@test root]# iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
[root@test root]# iptables -L [root@test root]# iptables -L INPUT -v [root@test root]# iptables -L -n [root@test root]# iptables -L -t nat
[root@test root]# iptables -F INPUT
[root@test root]# iptables -P FORWARD DROP
[root@test root]# iptables -Z INPUT
[root@test root]# iptables -N tcp_traffic
[root@test root]# iptables -X tcp_traffic
[root@test root]# iptables -X tcp_traffic udp_traffic Поиск совпаденийЯдро Linux ищет подходящее правило в таблицах netfilter для каждого пакета. Если правило подходит, действие, указанное в нем, выполняется. Неявные совпадения указываются опциями, заданными напрямую команде iptables. Для явных совпадений используется аргумент -m Основные опции для поиска совпадений
[root@test root]# iptables -A INPUT -p tcp ... [root@test root]# iptables -A INPUT -p udp ... [root@test root]# iptables -A INPUT -p icmp ...
[root@test root]# iptables -A INPUT -s 192.168.0.1 ... [root@test root]# iptables -A INPUT -s 192.168.0.0/24 ... [root@test root]# iptables -A INPUT -s ! 192.168.0.0/255.255.255.0 ...
[root@test root]# iptables -A INPUT -d 192.168.0.1 ... [root@test root]# iptables -A INPUT -d 192.168.0.0/24 ... [root@test root]# iptables -A INPUT -d ! 192.168.0.0/255.255.255.0 ... Опции TCPДля того, чтобы правило совпадало с определенными TCP пакетами, протокол TCP должен быть указан в правиле: -p tcp.
[root@test root]# iptables -A INPUT -p tcp --sport ssh [root@test root]# iptables -A INPUT -p tcp --sport 22:80 [root@test root]# iptables -A INPUT -p tcp --sport ! :1024
[root@test root]# iptables -A INPUT -p tcp --dport ssh
[root@test root]# iptables -A FORWARD -p tcp --tcp-flags SYN,FIN,ACK SYN [root@test root]# iptables -A FORWARD -p tcp --syn [root@test root]# iptables -A FORWARD -p tcp --tcp-flags SYN,RST,ACK SYN [root@test root]# iptables -A FORWARD -p tcp --tcp-flags ! FIN FIN Опции UDPЧтобы правило совпадало с UDP пакетами в нем должна быть указана опция: -p udp.
[root@test root]# iptables -A INPUT -p udp --sport 53
[root@test root]# iptables -A INPUT -p udp --dport dns Опции ICMPПакеты ICMP отфильтровываются правилом, в котором указана опция -p icmp. [root@test root]# iptables -A INPUT -p icmp --icmp-type echo-request [root@test root]# iptables -A INPUT -p icmp --icmp-type echo-reply Чтобы вывести полный список возможных опций фильтрации ICMP пакетов, выполните команду: [root@test root]# iptables -p icmp --help Ограничение интенсивности поступления пакетовОпция ограничения интенсивности может ограничить скорость поступления пакетов в единицу времени. Эта функция реализуется с помощью счетчика. Начальное значение счетчика уменьшается с каждым поступающим пакетом. Если счетчик достиг нуля, все последующие пакеты будут отбрасываться. Каждую секунду (например) значение счетчика увеличивается на единицу, позволяя таким образом пройти еще одному пакету. Опция используется для снижения негативного эффекта от атак затопления syn/ping пакетами (Syn/Ping Flood). Правило из следующего примера принимает пакеты с интенсивностью не более 5 штук в секунду. [root@test root]# iptables -A INPUT -m limit --limit 5/s Фильтрация по состоянию соединенияОпция фильтрации по состоянию соединения используется для выделения состояний соединений, отслеживаемых ядром. Возможные состояния: NEW, ESTABLISHED, RELATED, INVALID. Такая фильтрация используется для того, чтобы пропускать новые соединения только в одну сторону, а в обратную сторону пропускать только трафик возвращаемый в ответ на эти соединения (ESTABLISHED;RELATED). [root@test root]# iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED Цели и переходыЦель в правиле указывает на то, что нужно сделать с удовлетворяющим ему пакетом. Целью может быть таблица, заданная пользователем или стандартная цель ядра, например ACCEPT или DROP, принимающая пакет (позволяющая пакету пройти дальше) или отбрасывающая пакет (останавливающая обработку пакета) соответственно. Цель ACCEPTПакет принимается и остальные правила цепочки текущей таблицы не будут к нему не применяются. Цель DROPПакет отбрасывается и более не обрабатывается. Цель REJECTЦель REJECT работает подобно цели DROP, с тем отличием, что отправитель пакета получит ICMP сообщение сигнализирующее об ошибке. Цель REJECT можно использовать только в цепочках INPUT, FORWARD и OUTPUT. Цель DNATDNAT (Destination Network Address Translation – трансляция адреса получателя) используется для изменения IP-адреса получателя пакета. Цель DNAT может использоваться только в цепочках PREROUTING и OUTPUT таблицы nat. [root@test root]# iptables -t nat -A PREROUTING -p tcp -j DNAT --to-destination 192.168.1.111 Адрес отправителя в поступающих обратно пакетах автоматически транслируется в оригинальный. Цель SNATSNAT (Source Network Address Translation – трансляция адреса отправителя) используется для изменения IP-адреса отправителя пакета. Цель SNAT может использоваться только с цепочкой POSTROUTING таблицы nat. [root@test root]# iptables -t nat -A POSTROUTING -p tcp -j SNAT --to-source 192.168.1.1 Получаемые обратно пакеты будут автоматически оттранслированы в оригинальный адрес. Цель MASQUERADEПоведение цели masquerade подобно SNAT, однако в этом случае Netfilter самостоятельно решает, какой адрес отправителя нужно использовать, основываясь на маршруте по умолчанию. Такое поведение позволяет реализовывать NAT с динамическими IP-адресами, получаемыми от Интернет-провайдера или DHCP-сервера. Цель MASQUERADE доступна только в цепочке POSTROUTING таблицы nat. [root@test root]# iptables -t nat -A POSTROUTING -j MASQUERADE Цель MASQUERADE очищает информацию обо всех отслеживаемых соединениях в случае деактивации сетевого интерфейса. Цель REDIRECTЦель REDIRECT изменяет порт назначения пакета. Таким образом, пакет останется в пределах того же хоста, но будет передан на другой порт. [root@test root]# iptables -A INPUT -j REDIRECT --to-port 3128 Цель MIRRORЭто в чистом виде экспериментальная цель. С ее помощью можно менять местами адреса отправителя и получателя. Используйте с осторожностью :-) Цель RETURNПроход пакета по цепочке правил прекратится, как только пакет достигнет правила с этой целью. Цель QUEUEПакеты будут попадать в очередь для обработки пользовательскими программами. Цель MARKС помощью этой цели можно поставить метку на пакет с целью его дальнейшей обработки. Как Netfilter, так и пользовательские программы могут выявлять пакеты, помеченные таким образом, для выполнения с ними специальных действий. iptables -A INPUT -j MARK --set-mark 1 Цель LOGС помощью этой цели пакет попадает в журнал syslog. [root@test root]# iptables -A INPUT -j LOG --log-prefix " Dropped INPUT: " Цель ULOGЭта цель существует для предоставления возможностей регистрации пакетов в пользовательских программах, например, для занесения их в базу данных. Пример межсетевого экрнаСценарий, настраивающий правила iptables. Пример: #!/bin/bash echo 1 > /proc/sys/net/ipv4/ip_forward DMZ=10.0.0.0/24 IPTABLES="/sbin/iptables" $IPTABLES -F $IPTABLES -F -t nat $IPTABLES -P INPUT DROP $IPTABLES -P FORWARD DROP echo "accept localhost internal traffic" $IPTABLES -A INPUT -i lo -s localhost -j ACCEPT ... echo "accept ssh from $DMZ on eth1" $IPTABLES -A INPUT -s $DMZ -i eth1 -p tcp --dport 22 -j ACCEPT ... iptables -L -v -n iptables -L -v -n -t nat |