Како да поставите заштитен ѕид користејќи Iptables на Ubuntu 12.04


Статус: застарен

Оваа статија опфаќа верзија на Ubuntu која повеќе не е поддржана. Ако моментално управувате со сервер кој работи на Ubuntu 12.04, топло ви препорачуваме надградба или мигрирање на поддржана верзија на Ubuntu:

  • Надградете на Ubuntu 14.04.
  • Надградете од Ubuntu 14.04 на Ubuntu 16.04
  • Мигрирајте ги податоците од серверот во поддржана верзија

Причина:

Видете наместо тоа:

За Iptables

Со цел да се направи серверот побезбеден по првичното поставување, Ubuntu испорачува со iptables што е стандардниот заштитен ѕид на дистрибуцијата. На самиот почеток, иако заштитниот ѕид на Ubuntu е конфигуриран, тој е поставен да го дозволува целиот дојдовен и појдовен сообраќај на виртуелен приватен сервер. За да овозможиме посилна заштита на серверот, можеме да додадеме некои основни правила за iptables.

Правилата iptables доаѓаат од низа опции кои можат да се комбинираат за да се создаде секој специфичен процес. Секој пакет што го преминува заштитниот ѕид се проверува според секое правило по редослед. Штом ќе се совпадне со правило, пакетот ја следи поврзаната акција, инаку продолжува по линијата.

Забелешка: Овој туторијал ја опфаќа безбедноста на IPv4. Во Linux, безбедноста на IPv6 се одржува одделно од IPv4. На пример, \iptables\ одржува само правила за заштитен ѕид за IPv4 адреси, но има пандан на IPv6 наречен \ip6tables\, кој може да се користи за одржување на правилата за заштитен ѕид за IPv6 мрежните адреси.

Ако вашиот VPS е конфигуриран за IPv6, не заборавајте да ги обезбедите и вашите IPv4 и IPv6 мрежни интерфејси со соодветни алатки. За повеќе информации за IPv6 алатките, погледнете го ова упатство: Како да ги конфигурирате алатките за користење IPv6 на Linux VPS

Команди на Iptables

Иако ова упатство ќе опфати ограничен број на команди кои на серверот ќе му обезбедат некоја основна безбедност, постојат различни нијанси и специфични случаи кои можат да се развијат за iptables. Подолу се дадени некои од најкорисните команди за развој на заштитен ѕид за вашиот VPS, но имајте на ум дека ова е кратка листа и има многу други опции.

-A: (Append), adds a rule to iptables
-L:  (List), shows the current rules
-m conntrack: allows rules to be based on the current connection state, elaborated in the the --cstate command.
--cstate: explains the states that connections can be in, there are 4: New, Related, Established, and Invalid
-p: (protocol), refers to the the protocol of the rule or of the packet to check.The specified protocol can be one of tcp, udp, udplite, icmp, esp, ah, sctp or the special keyword "all".
--dport: (port), refers to the the port through which the machine connects
-j: (jump), this command refers to the action that needs to be taken if something matches a  rule perfectly. It translates to one of four possibilities:
	-ACCEPT: the packet is accepted, and no further rules are processed
	-REJECT: the packet is rejected, and the 	sender is notified, and no further rules are processed
	-DROP: the packet is rejected, but the 	sender is not notified, and no further rules are processed
	-LOG: the packet is accepted but logged, and the following rules are processed 
-I: (Insert), adds a rule between two previous ones
-I INPUT 3: inserts a rule to make it the third in the list
-v: (verbose), offers more details about a rule

Креирање на правилата за Iptables:

Ако го напишете следново, можете да ги видите тековните правила за iptables:

sudo iptables -L

Тие треба да изгледаат вака:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Ако имате воспоставено друг сет на правила или сакате да започнете одново, секогаш можете да ги вратите правилата на стандардните со испирање и бришење на сите:

sudo iptables -F

Дополнително, ако сакате да ја забрзате работата со iptables, можете да вклучите -n во командата. Оваа опција го оневозможува пребарувањето на DNS и ја спречува командата да се обиде да ја пронајде обратната страна на секоја IP адреса во множеството правила. Можете да го користите ова за да наведете правила, како пример:

iptables -L -n

Основен заштитен ѕид

Како што стои, сегашните правила ги дозволуваат сите врски, и дојдовни и појдовни. Нема никакви безбедносни мерки. Како што ја подготвуваме табелата, имајте на ум дека штом пакетот е ПРИФАТЕН, ОДБИЕН или ОДПАДЕН, не се обработуваат дополнителни правила. Затоа, правилата што се на прво место имаат приоритет пред подоцнежните.

Додека ги креираме правилата, мораме да бидеме сигурни дека ќе се спречиме случајно да го блокираме SSH (методот преку кој се поврзавме на серверот).

За почеток, ајде да се погрижиме да дозволиме сите тековни врски, сите врски во моментот на воспоставување на правилото, ќе останат онлајн:

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Можеме да продолжиме и да го разложиме ова:

  1. -A им кажува на iptables да додадат правило на табелата.
  2. INPUT го означува ова правило како дел од синџирот за внесување.
  3. m conntrack проследено со --cstate ESTABLISHED,RELATED гарантира дека резултатот од ова правило ќе важи само за тековните врски и оние поврзани со нив се дозволени
  4. -j ACCEPT му кажува на пакетот да JUMP да прифати и врските сè уште се на место.

Откако ќе се увериме дека сите тековни врски со виртуелниот приватен сервер можат да останат непрекинато, можеме да продолжиме да ги блокираме другите небезбедни врски.

Да претпоставиме дека сакаме да го блокираме целиот дојдовен сообраќај, освен оние што доаѓаат на 2 заеднички порти: 22 за SSH и 80 за веб сообраќај. Продолжуваме со дозволување на целиот сообраќај на назначените пристаништа со следните команди:

sudo iptables -A INPUT -p tcp --dport ssh -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Во двете од овие команди, опцијата -p го означува протоколот со кој се прави врската, во овој случај tcp, додека --dport ја одредува портата преку која се пренесува пакетот.

Откако ќе гарантираме дека посакуваниот сообраќај ќе помине низ заштитниот ѕид, можеме да завршиме со блокирање на целиот преостанат сообраќај од пристап до нашиот виртуелен сервер. Бидејќи ова е последното правило во списокот, целиот сообраќај што одговара на некое од претходните правила во iptables нема да биде засегнат и ќе се третира како што претходно го поставивме.

Ајде да направиме правило да го блокираме целиот преостанат сообраќај:

sudo iptables -P INPUT DROP

Со тоа, можеме да видиме како изгледаат нашите ажурирани правила:

sudo iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            ctstate RELATED,ESTABLISHED 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:http 

Скоро сме готови. Сепак, ни недостасува уште едно правило. Треба да му обезбедиме на нашиот VPS пристап со јамка. Ако сега го додадеме правилото без дополнителни квалификации, тоа би отишло до крајот на списокот и, бидејќи би го следело правилото за блокирање на целиот сообраќај, никогаш нема да стапи во сила.

За да се спротивставиме на ова прашање, треба да го направиме ова правило прво во списокот, користејќи ја опцијата INPUT:

sudo iptables -I INPUT 1 -i lo -j ACCEPT

  1. -I INPUT 1 го става ова правило на почетокот на табелата
  2. lo се однесува на интерфејсот за враќање на јамката
  3. -j ACCEPT тогаш гарантира дека ќе биде прифатен сообраќајот со повратна врска

Сега завршивме со создавање на основен заштитен ѕид. Вашите правила треба да изгледаат вака (можиме да ги видиме деталите за iptable со внесување -v):

sudo iptables -L -v
Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  lo     any     anywhere             anywhere            
 1289 93442 ACCEPT     all  --  any    any     anywhere             anywhere             ctstate RELATED,ESTABLISHED
    2   212 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:ssh
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:http     

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 157 packets, 25300 bytes)
 pkts bytes target     prot opt in     out     source               destination       

Меѓутоа, штом виртуелниот сервер ќе се рестартира, правилата iptables ќе бидат избришани. Следниот чекор ќе го надмине зачувувањето и враќањето на правилата iptables.

Зачувување на правилата на Iptables

Иако правилата iptables се ефективни, тие автоматски ќе се избришат ако серверот се рестартира. За да се увериме дека тие остануваат на сила, можеме да користиме пакет наречен IP-Tables persistent.

Можеме да го инсталираме користејќи apt-get:

sudo apt-get install iptables-persistent

За време на инсталацијата, ќе бидете прашани дали сакате да ги зачувате правилата iptables и во правилата IPv4 и во правилата IPv6. Кажи „да“ и на двете.

Вашите правила потоа ќе бидат зачувани во /etc/iptables/rules.v4 и /etc/iptables/rules.v6.

Откако ќе заврши инсталацијата, започнете со постојана работа iptables:

sudo service iptables-persistent start

По секое рестартирање на серверот, ќе видите дека правилата остануваат на место.