Защитните стени под Linux
Публикувана от admin на September 26 2010 19:02:15
Ще разгледаме какви настройки са необходими за един сървър от нисък клас, като ще се разгледа

конфигурационения файл за 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 в зависимост от конкретните нужди.. Този скрипт може да се промени

по желание