Ще разгледаме какви настройки са необходими за един сървър от нисък клас, като ще се разгледа
конфигурационения файл за iptables.
Хубаво е да се знае, че важни машини/мрежи седят зад специален компютър, конфигуриран само
като защитна стена firewall. Такива комбинации могат да са (firewall/server): BSD/w2k; linux/nt с т.н.
Ако се налага наистина тежка защита този вариант е едно добро решение
Конфигуриране на iptables за Линукс.
Като начало трябва да се добави поддръжката на защитна стена в ядрото на опрационата система.
Товастава от (menuconfig) → Networking Support→ [Network firewalls,
TCP/IPNetworking, IP: firewalling, IP: firewall packet logging] →
Network packetfiltering → IP: Netfilter configuration.
Сега трябва да се прекомпилира ядрото и да се направи активно.
iptables се използва както за конфигурирането на IP филтрирането, така и за транслирането на
мрежови адреси. За улеснение са добавени 2 таблици с правила - filter и nat. Първата таблица е по
подразбиране ако не е зададена опцията -t. За таблицата filter съществуват 3 вериги (chains) а те са:
INPUT; FORWARD и OUTPUT. Тук ще разгледаме само таблица filter. Общия вид на командата е:
iptables команда правило разширения. Ето и списък на някои от опциите (за пълен списък → man
iptables).
-A верига
Добавя едно или повече правил акъм края на указаната верига. Ако е подадено име на хост като
изпращач или като получател и то съответства на повече от 1 IP адрес, правилото ще бъде добавено
за всеки адрес.
-I верига номер_на_правило
Вмъква едно или повече правила в началото на указаната верига. Ако е подадено имена хост като
изпращач или като получател и то съответства на повече от 1 IP адрес, правилото ще бъде добавено
за всеки адрес.
-D верига
Изтрива едно или повече правила от зададената верига, съответстващо на спецификацията на
правилото.
-D верига номер_на_правило
Изтрива правилото намиращо се на позиция номер-на-правило в указаната верига. Позицията на
правилото започва от 1 за първото правило на веригата.
-R верига номер_на_правило
Замества правилото, намиращо се на позиция номер-на-правило в дадената верига с дефинираната
спецификация на правило.
-C верига
Проверява дали дейтаграмата, описана от зададеното правило, съотвтства на определената верига.
Тази команда ще върне съобщение, описващо как веригата обработва дейтаграмата. Много ползно
при тестването на защитната стена.
-L [верига]
Генерира списък на правилата в посочената верига или във всички вериги, ако не е посочена верига.
-F [верига]
Изчиства правилата в посочената верига или във всички вериги, ако не е посочена такава.
-Z [верига]
Нулира броячите на дейтаграми и байтове за всички правила в посочената верига или във всички
вериги, ако не е посочена такава.
-N [верига]
Създава нова верига с посоченото име. Верига със същото име не трябва да съществува. Така се
създават потребителско-дефинирани вериги.
-X [верига]
Изтрива посочената потребителска верига или всички потребителски вериги, ако не е посочена
такава. За да бъде успеша тази команда, не трябва да има препратки към посочените вериги в коятои
да е друга верига от правилата.
-P верига политика
Задава подразбираща се политика за посочената верика като указаната политика. Валидните
политики за защитна стена са ACCEPT, DROP, QUEUE и RETURN. ACCEPT позволява на
дейтаграмата да премине, при DROP дейтаграмата се игнорира, при QUEUE дейтаграмата се
изпраща в потребителското пространство за по - нататъшна обработка, а при RETURN кодът за IP
защитна стена се връща към веригата от защитната стена, която е извикала веригата, съдържаща
това правило и продължава обработката от правилото, следващо извикващото правило.
Параметри за задаване на правила
Има множество параметри на iptables, които съставят спецификацията на правило. Където е
необходима спецификаци на правило, трябва да се подаде u1074 всеки един от тези параметри или ще се
възприемат техните стойности по подразбиране.
-p [!]протокол
Определя протокола на дейтаграмата, която ще съответства на това правило. Валидните имена за
протоколо са tcp, udp, icmp или число ако знаете номера на IP протокола (cat /etc/protocols). Ако се
изплзва знак !, правилото се инвентира и дейтаграата ще съответства на всеки протокол, различен от
посочения. Ако този параметър не е подаден, по подразбиране ще се възприеат всички протоколи.
-s [!]адрес[/маска]
Определя изходния адрес на дейтаграмата, която съответства на това правило. Адресът може да
бъде подаден като име на хост, име на мрежа или IP адрес. Маската е незадължителна и може да се
подаде по 2 начина - 255.255.255.0 или с /24 вариант-а...
-d [!]адрес[/маска]
Задава адрес и порт на получателя на дейтаграмата, която съответства на това правило. Кодирането
на този параметър е същото както при -s.
-j цел
Задава какво действие трябва да се предприеме, при откриване на съответствие с това правило. За
този параметър можете да мислите като за команда "иди на". Валидни цели са ACCEPT, DROP,
QUEUE и RETURN. Можете да посочите името на потребителски дефинирана верига, където да
продължи обработката. Можете да зададете името на целта чрез разширение. Ако този параметър е
пропуснат, при съответствие на дейтаграмата не се предприемат никакви действия освен да се
актуализират броячите на дейтаграми и байтове за това правило.
-i [!]име-на-интерфейс
Задава интерфейса, на който е получена дейтаграмата. Ако името на интерфейса завършва с + тогава
всеки интерфейс с подадения низ ще действа (пример: -i ! eth+ -- всички интерфейси освен
мрежовите устройства)
-o [!]име-на-интерфейс
Задава интерфейса, на който ще бъде предадена дейтаграмата. Този аргумент се кодира по същия
начин както -i.
Опции
-v Указва на iptables да генерира по - подробен изход. Това предоставя овече информация.
-n Указва на iptables да показва IP адреса и портовете като номера, без да с опитва да ги свърже с
техните съответстващи имена.
-x Указва всички числа в изхода на iptables да бъдат разшиени до тяхната пълна стойност без
закръгляване.
-line-numbers Указва при изброяване на правилата u1076 да бъдат показвани номерата на редовете.
Номерът на реда ще съответства на позицията на правилото във веригата.
Разширения
iptables е обновена версия на защитната стена на Линукс при 2.4 ядрата. Разликата м/у ipchains и по
- старите версии не е особено голяма, с изключение на разширяемостта. Можете да разширите до
известна степен възможностите му, като използвате различни модули - споделени библиотеки.
Съществуват някои стандартни разширения, които осигуряват част от възможностите, предлагани
от iptables. За да се използва едно разширение, трябва да се зададе неговото име чрез аргумента на
iptables -m име. Следващия списък показва опциите -m и -p, които определят контекста на
разширението, както и опциите, предоставяни от това разширение.
TCP разширения: използвани с -m tcp -p tcp
-sport [!] [порт[:порт]]
Задава порта, който трябва да използва от изпращача на дейтаграмата, за да съответства на това
правило. Портовете могат да бъдат посочени като интервал, разделени с двоеточие. Пример: 80:82
за портове 80, 81 и 82 вкл.
-dport [!] [порт[:порт]]
Задавапорта, който трябва да се използва от получателя на дейтаграмата, за да съответства на това
правило. Кодира се както при --sport.
-tcp-flags [!] маска комп
Указва, че това правило ще съответства, когато TCP флаговете в дейтаграмата съвпадат с
посочените от маска и комп. Маската е списък от разделени със запетая флагове, които трябва да
бъдат проверени при извършване на теста. комп е списък от разделени със запетая флагове, които
трябва да бъдат подадени, за да съвпада правилото. Валидни флагове са: SYN, ACK, FIN, RST,
URG, PSH, ALL и NONE. See RFC-793.
-tcp-flags SYN,RST,ACK SYN
Указва. че правилото съответства само на дейтаграми с вдигнат бит SYN и свалени битове ACK и
FIN. Дейтаграмите с тези опции се използват за отваряне на TCP връзки, затова тази възможност
може да бъде изпозлвана за управление на заявките за връзки.
UDP разширения: използвани с -m udp -p udp
-sport [!] [порт[:порт]]
Определя порта, който трябва да се използва от изпращача на дейтаграмата, за да съответства на
това правило. Портовете могат да бъдат посочени като интервал, разделени с двоеточие. Пример:
80:82 за портове 80, 81 и 82 вкл.
-dport [!] [порт[:порт]]
Определя порта, който трябва да се използва от получателя на дейтаграмата, за да съвпада с това
правило. Кодира се както при --sport
ICMP разширения: използвани с -m icmp -p icmp
-icmp-type [!] име-на-тип
Определя типа на ICMP съобщението, на което трябва да съотетства това правило. Типът може да
бъде зададен чрез номер или чрез име. Някои валидни имена са: echo-request, echo-reply, sourcequench,
time-exceeded, destination-unreachable, network-unreachable, host-unreachable, protocolunreachable.
MAC разширения________________: използвани с -m mac
-mac-source [!] адрес
Задава Ethernet адрес на хоста, който е предал дейтаграмата, за да съответства на това правило.
Това има смисъл само в правило във входящата или препредаващата верига, защото ще предаваме
всяка дейтаграма, която премине изходящата верига.
Най - лесно е да се направи стартов файл в /etc/rc.d. (например rc.firewall)от вида:
#!/bin/sh
# chmod 755 rc.firewall
IPT=/usr/sbin/iptables
# Our IP space
OURNET="192.168.1.0/24"
OURBCAST="192.168.1.255"
OURDEV="eth0"
# Out
OUTADDR="0/0"
OUTDEV="eth1"
# TCP Services
TCPIN="ssh ftp"
TCPOUT="smtp www ftp ftp-data irc ssh telnet"
# UDP Services
UDPIN="domain"
UDPOUT="domain"
# ICMP Services
# 0 Echo Reply
# 3 Destination Unreachable
# 4 Source Quench
# 5 Redirect (change route)
# 8 Echo Request
# 11 Time Exceeded
# 12 Parameter Problem
# 13 Timestamp Request
# 14 Timestamp Reply
# 15 Information Request
# 16 Information Reply
# 17 Address Mask Request
# 18 Address Mask Reply
ICMPIN="0 3 11"
ICMPOUT="8 3 11"
# Chisti rulez wyw whodqshtata tablitza
$IPT -F FORWARD
# Otkazwane na whodqsht dostyp
$IPT -P FORWARD deny
# Ignorira polucheni datagrams
$IPT -A INPUT -i $ANYDEV -j DROP
# Spoof protection
$IPT -A FORWARD -s $OURNET -i $ANYDEV -j DROP
# Smurf protection
$IPT -A FORWARD -m multiport -p icmp -i $ANYDEV -d $OURNET -j DENY
# Priemane na fragmenti
$IPT -A FORWARD -f -j ACCEPT
# TCP datagramz ACK (+)
$IPT -A FORWARD -m multiport -p tcp -d $OURNET --dports $TCPIN /
! --tcp-flags SYN,ACK ACK -j ACCEPT
$IPT -A FORWARD -m multiport -p tcp -s $OURNET --sports $TCPIN /
! --tcp-flags SYN,ACK ACK -j ACCEPT
# TCP Incoming
$IPT -A FORWARD -m multiport -p tcp -i $ANYDEV -d $OURNET $TCPIN /
--syn -j ACCEPT
# TCP Outgoing
$IPT -A FORWARD -m multiport -p tcp -i $OURDEV -d $ANYADDR /
--dports $TCPOUT --syn -j ACCEPT
#UDP Incoming
$IPT -A FORWARD -m multiport -p udp -i $ANYDEV -d $OURNET /
--dports $UDPIN -j ACCEPT
$IPT -A FORWARD -m multiport -p udp -i $ANYDEV -s $OURNET /
--sports $UDPIN -j ACCEPT
# UDP Outgoing
$IPT -A FORWARD -m multiport -p udp -i $OURDEV -d $ANYADDR /
--dports $UDPOUT -j ACCEPT
$IPT -A FORWARD -m multiport -p udp -i $OURDEV -s $ANYADDR /
--sports $UDPOUT -j ACCEPT
# ICMP Incoming
$IPT -A FORWARD -m multiport -p icmp -i $ANYDEV -d $OURNET /
--dports $ICMPIN -j ACCEPT
# ICMP Outgoing
$IPT -A FORWARD -m multiport -p icmp -i $OURDEV -d $ANYADDR /
--dports $ICMPOUT -j ACCEPT
Придавт му се права за изпълнение с chmod 755 rc.firewall . Сега можете да се напише ./rc.firewall
(cd /etc/rc.d ) start|stop|restart в зависимост от конкретните нужди.. Този скрипт може да се промени
по желание