Како да ги наведете и избришете правилата за заштитен ѕид на Iptables
Вовед
Iptables е заштитен ѕид кој игра суштинска улога во мрежната безбедност за повеќето системи на Линукс. Додека многу упатства за iptables ќе ве научат како да креирате правила за заштитен ѕид за да го обезбедите вашиот сервер, ова ќе се фокусира на различен аспект од управувањето со заштитен ѕид: правила за наведување и бришење.
Во ова упатство, ќе покриеме како да ги направите следните задачи за iptables:
- Список на правила
- Исчистете ги бројачите на пакети и бајти
- Избриши правила
- Измијте ги синџирите (избришете ги сите правила во синџирот)
- Избришете ги сите синџири и табели, избришете ги сите синџири и прифатете го целиот сообраќај
Забелешка: Кога работите со заштитни ѕидови, внимавајте да не се заклучите надвор од вашиот сопствен сервер со блокирање на сообраќајот SSH (пристаниште :22
, стандардно). Ако го изгубите пристапот поради поставките на вашиот заштитен ѕид, можеби ќе треба да се поврзете со него преку конзола надвор од опсегот за да го поправите вашиот пристап.
Предуслови
Ова упатство претпоставува дека користите сервер Линукс со инсталирана команда iptables
и дека вашиот корисник има привилегии sudo
.
Ако ви треба помош со ова почетно поставување, ве молиме погледнете го нашиот CentOS.
Правила за наведување по спецификација
Ајде прво да погледнеме како да ги наброиме правилата. Постојат два различни начини да ги видите вашите активни правила за iptables: во табела или како листа на спецификации на правила. Двата методи обезбедуваат приближно исти информации во различни формати.
За да ги наведете сите активни правила за iptables по спецификација, извршете ја командата iptables
со опцијата -S
:
- sudo iptables -S
Output-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-N ICMP
-N TCP
-N UDP
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p icmp -m conntrack --ctstate NEW -j ICMP
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
-A TCP -p tcp -m tcp --dport 22 -j ACCEPT
...
Како што можете да видите, излезот изгледа исто како командите што беа користени за нивно создавање, без претходната команда iptables
. Ова исто така ќе изгледа слично на датотеките за конфигурација на правилата iptables, ако некогаш сте користеле iptables-persistent
или iptables save
.
Наведување на специфичен синџир
Ако сакате да го ограничите излезот на одреден синџир (INPUT
, OUTPUT
, TCP
итн.), можете директно да го наведете името на синџирот по опцијата -S
. На пример, за да ги прикажете сите спецификации на правилата во синџирот TCP
, ќе ја извршите оваа команда:
- sudo iptables -S TCP
Output-N TCP
-A TCP -p tcp -m tcp --dport 22 -j ACCEPT
Сега да го разгледаме алтернативниот начин за прегледување на активните правила на iptables: како табела со правила.
Правила за наведување како табели
Набројувањето на правилата iptables во приказот на табелата може да биде корисно за споредување на различни правила едни против други. За да ги внесете сите активни правила на iptables во табела, извршете ја командата iptables
со опцијата -L
:
- sudo iptables -L
Ова ќе ги даде сите тековни правила подредени по синџир.
Ако сакате да го ограничите излезот на одреден синџир (INPUT
, OUTPUT
, TCP
итн.), можете директно да го наведете името на синџирот по опцијата -L
.
Ајде да погледнеме на пример за синџир INPUT
:
- sudo iptables -L INPUT
OutputChain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
DROP all -- anywhere anywhere ctstate INVALID
UDP udp -- anywhere anywhere ctstate NEW
TCP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
ICMP icmp -- anywhere anywhere ctstate NEW
REJECT udp -- anywhere anywhere reject-with icmp-port-unreachable
REJECT tcp -- anywhere anywhere reject-with tcp-reset
REJECT all -- anywhere anywhere reject-with icmp-proto-unreachable
Првата линија на излез го означува името на синџирот (INPUT
, во овој случај), проследено со неговата стандардна политика (DROP
). Следната линија се состои од заглавија на секоја колона во табелата и е проследена со правилата на синџирот. Ајде да погледнеме што означува секое заглавие:
цел
: ако пакетот одговара на правилото, целта одредува што треба да се направи со него. На пример, пакетот може да биде прифатен, отфрлен, најавен или испратен до друг синџир за да се спореди со повеќе правилаprot
: протоколот, како што сеtcp
,udp
,icmp
илисите
опт
: ретко се користи, оваа колона означува IP опцииизвор
: изворната IP адреса или подмрежа на сообраќајот илисекаде
дестинација
: одредишната IP адреса или подмрежа на сообраќајот илисекаде
Последната колона, која не е означена, ги означува опциите на некое правило. Ова е кој било дел од правилото што не е означен со претходните колони. Ова може да биде што било, од изворни и дестинации порти до состојбата на поврзување на пакетот.
Прикажани брои пакети и збирна големина
Кога се наведуваат правилата на iptables, исто така е можно да се прикаже бројот на пакети и збирната големина на пакетите во бајти, кои одговараат на секое конкретно правило. Ова е често корисно кога се обидувате да добиете груба идеја за тоа кои правила се совпаѓаат со пакетите. За да го направите тоа, користете ги заедно опциите -L
и -v
.
На пример, да го погледнеме повторно ланецот INPUT
, со опцијата -v
:
- sudo iptables -L INPUT -v
OutputChain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
284K 42M ACCEPT all -- any any anywhere anywhere ctstate RELATED,ESTABLISHED
0 0 ACCEPT all -- lo any anywhere anywhere
0 0 DROP all -- any any anywhere anywhere ctstate INVALID
396 63275 UDP udp -- any any anywhere anywhere ctstate NEW
17067 1005K TCP tcp -- any any anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
2410 154K ICMP icmp -- any any anywhere anywhere ctstate NEW
396 63275 REJECT udp -- any any anywhere anywhere reject-with icmp-port-unreachable
2916 179K REJECT all -- any any anywhere anywhere reject-with icmp-proto-unreachable
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh ctstate NEW,ESTABLISHED
Имајте предвид дека списокот сега има две дополнителни колони, pkts
и бајти
.
Сега кога знаете како да ги наведете правилата за активниот заштитен ѕид на различни начини, ајде да погледнеме како можете да ги ресетирате бројачите на пакети и бајти.
Ресетирање на бројот на пакети и агрегатната големина
Ако сакате да ги избришете или нулате бројачите на пакети и бајти за вашите правила, користете ја опцијата -Z
. Тие исто така се ресетираат ако се случи рестартирање. Ова е корисно ако сакате да видите дали вашиот сервер добива нов сообраќај што одговара на вашите постоечки правила.
За да ги избришете бројачите за сите синџири и правила, користете ја опцијата -Z
сама по себе:
- sudo iptables -Z
За да ги избришете бројачите за сите правила во одреден синџир, користете ја опцијата -Z
и наведете го синџирот. На пример, за да ги избришете бројачите на синџирот INPUT
, извршете ја оваа команда:
- sudo iptables -Z INPUT
Ако сакате да ги исчистите бројачите за одредено правило, наведете го името на синџирот и бројот на правилото. На пример, за да ги нулите бројачите за првото правило во ланецот INPUT
, извршете го ова:
- sudo iptables -Z INPUT 1
Сега кога знаете како да ги ресетирате бројачите на пакети и бајти iptables, да ги погледнеме двата методи што може да се користат за нивно бришење.
Бришење правила по спецификација
Еден од начините за бришење на правилата на iptables е спецификацијата на правилата. За да го направите тоа, можете да ја извршите командата iptables
со опцијата -D
проследена со спецификацијата на правилото. Ако сакате да ги избришете правилата користејќи го овој метод, можете да го користите излезот од списокот со правила, iptables -S
за помош.
На пример, ако сакате да го избришете правилото со кое се исфрлаат неважечките дојдовни пакети (-A INPUT -m conntrack --ctstate INVALID -j DROP
), можете да ја извршите оваа команда:
- sudo iptables -D INPUT -m conntrack --ctstate INVALID -j DROP
Забележете дека тука треба да се исклучи опцијата -A
, која се користи за означување на позицијата на правилото за време на создавањето.
Бришење правила по синџир и број
Другиот начин за бришење на правилата iptables е преку неговиот синџир и бројот на линијата. За да го одредите бројот на линијата на правилото, наведете ги правилата во формат на табелата и додадете ја опцијата --line-numbers
:
- sudo iptables -L --line-numbers
OutputChain INPUT (policy DROP)
num target prot opt source destination
1 ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
2 ACCEPT all -- anywhere anywhere
3 DROP all -- anywhere anywhere ctstate INVALID
4 UDP udp -- anywhere anywhere ctstate NEW
5 TCP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
6 ICMP icmp -- anywhere anywhere ctstate NEW
7 REJECT udp -- anywhere anywhere reject-with icmp-port-unreachable
8 REJECT tcp -- anywhere anywhere reject-with tcp-reset
9 REJECT all -- anywhere anywhere reject-with icmp-proto-unreachable
10 ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ctstate NEW,ESTABLISHED
...
Ова го додава бројот на линијата на секој ред со правило, означен со заглавието num
.
Откако ќе знаете кое правило сакате да го избришете, забележете го бројот на синџирот и линијата на правилото. Потоа извршете ја командата iptables -D
проследена со синџирот и бројот на правилото.
На пример, ако сакаме да го избришеме правилото за внесување кое исфрла неважечки пакети, можеме да видиме дека тоа е правило 3
од ланецот INPUT
. Значи, треба да ја извршиме оваа команда:
- sudo iptables -D INPUT 3
Сега кога знаете како да избришете поединечни правила за заштитен ѕид, ајде да разгледаме како можете да исчистите синџирите на правила.
Синџири за испирање
Iptables нуди начин за бришење на сите правила во синџирот или исчистување на синџирот. Овој дел ќе ги опфати различните начини да го направите ова.
Предупредување: Бидете внимателни да не се заклучите надвор од вашиот сервер преку SSH со измивање на синџир со стандардна политика за отфрли
или одбијте
. Ако го правите тоа, можеби ќе треба да се поврзете со него преку конзолата за да го поправите вашиот пристап.
Испирање на еден синџир
За да исфрлите одреден синџир, кој ќе ги избрише сите правила во ланецот, можете да ја користите -F
или еквивалентната опција --flush
и името на ланецот да се измие.
На пример, за да ги избришете сите правила во ланецот INPUT
, извршете ја оваа команда:
- sudo iptables -F INPUT
Испирање на сите синџири
За да ги исчистите сите синџири, кои ќе ги избришат сите правила за заштитен ѕид, можете да ја користите опцијата -F
или еквивалентната --flush
сама по себе:
- sudo iptables -F
Испирање на сите правила, бришење на сите синџири и прифаќање на сите
Овој дел ќе ви покаже како да ги исчистите сите ваши правила, табели и синџири за заштитен ѕид и како да го дозволите целиот мрежен сообраќај.
Предупредување: Ова ефективно ќе го оневозможи вашиот заштитен ѕид. Треба да го следите овој дел само ако сакате да започнете со конфигурацијата на вашиот заштитен ѕид.
Прво, поставете ги стандардните политики за секој од вградените синџири на ACCEPT
. Главната причина да го направите ова е да се осигурате дека нема да бидете заклучени од вашиот сервер преку SSH:
- sudo iptables -P INPUT ACCEPT
- sudo iptables -P FORWARD ACCEPT
- sudo iptables -P OUTPUT ACCEPT
Потоа исчистете ги табелите nat
и mangle
, исплакнете ги сите синџири (-F
) и избришете ги сите нестандардни синџири (-X
):
- sudo iptables -t nat -F
- sudo iptables -t mangle -F
- sudo iptables -F
- sudo iptables -X
Вашиот заштитен ѕид сега ќе го дозволи целиот мрежен сообраќај. Ако ги наведете вашите правила сега, ќе видите дека нема никакви, а само трите стандардни синџири (INPUT
, FORWARD
и OUTPUT
) остануваат.
Заклучок
Откако ќе го поминете ова упатство, видовте како да ги наведете и избришете правилата за заштитен ѕид на iptables.
Запомнете дека сите промени во iptables преку командата iptables
се ефемерни и треба да се зачуваат за да опстојат преку рестартирање на серверот. Ова е покриено во делот Правила за зачувување на упатството за заеднички правила и команди за заштитен ѕид.