Iptables dla początkujących

Iptables dla początkujących
IPTABLES są uważane za jeden z głównych zasobów obronnych dla wielu administratorów systemu, mimo że zastąpiono go NFTABLES. Najlepsi producenci sieci włączyli iptables do sprzętu nadal w środowiskach produkcyjnych.

IPTABLES jest wysoce wszechstronny i akceptuje bezpośrednie polecenia od użytkownika, który może ładować i rozładowywać reguły zgodnie z potrzebą.

Ten samouczek pokazuje Jak chronić serwer WWW, Przekaż połączenia z wewnętrznymi adresami IP z naszej sieci LAN i oferuj określone usługi tylko na biało -listy adresów IP.

Notatka: Ten samouczek iptables został wydany po raz pierwszy dwa lata temu i zaktualizowany w dniu 23.05.2021 z ulepszonymi przykładami i lepszej jakości zrzuty ekranu.

Jak zainstalować

IPTABLES są domyślnie pominięte w dystrybucjach zawierających nftables.

Aby zainstalować IPTABLE w dystrybucjach Linux opartych na Debian, uruchom następujące polecenie:

sudo apt aktualizacja && apt instaluj iptables

Otwieranie portów HTTP i HTTPS

Po pierwsze, dodajmy wszystkie akceptujące zasady, zaczynając od serwera internetowego.

Notatka: Jeśli utworzysz skrypt z regułami, nie musisz używać sudo.

sudo iptables -a wejście -p tcp - -dport 80 -j Zaakceptuj
sudo iptables -a wejście -p tcp - -dport 443 -j Zaakceptuj

Aby zobaczyć dodane reguły „uruchom” „iptables -l"

Gdzie:

Iptables = wywołuje program

-A = Dodaje regułę

WEJŚCIE = ruch przychodzący

-P = protokół

-Ddport = port docelowy

-J = określ „cel”; Celem jest rodzaj zasad: akceptuj, upuść, odrzucić (wbudowany)…

Iptables -l = wymienia wszystkie reguły załadowane iptables (Iptables -l -v = to samo z gadatą.)

W powyższym przykładzie instruujemy iptables, aby dodać regułę dla ruchu przychodzącego za pośrednictwem protokołu TCP i portów 80 (HTTP) i 443 (HTTPS) do zaakceptowania.

Możemy zmienić polecenie, aby zaakceptować połączenie tylko z określonego adresu IP, dodając parametr „-S”:

sudo iptables -a wejście -s 127.0.0.1 -p TCP - -DPORT 80 -J Zaakceptuj

Gdzie:

S = źródło

Możesz także przetestować swoją zaporę z NMAP:

Notatka: W powyższym przykładzie port 443 nie jest pokazany, ponieważ serwer nie ma odpowiednio skonfigurowanego certyfikatu SSL.

Notatka: Aby uzyskać więcej informacji na temat NMAP, możesz to przeczytać.

Ochrona twojego serwera za pomocą iPtables:

#Open HTTP i HTTPS Usługi.
iptables -a wejście -p tcp - -dport 80 -J Zaakceptuj
iptables -a wejście -p tcp - -dport 443 -j Zaakceptuj
#Open SSH Port Service
iptables -a wejście -p tcp - -dport 22 -m contrack --ctState nowy, ustalony -j zaakceptuj

Gdzie są nowe parametry:

-m oznacza „Dopasuj” i służy do wywoływania rozszerzeń iptables, takich jak conntrack, który nie jest częścią funkcji podstawowych iptables.

Conntrack = Umożliwia śledzenie informacji o połączeniach, takich jak określone adresy lub, w tym przypadku, stan połączenia. Musi to być uważnie użyte, ponieważ wiele reguł do obrony serwerów przed niektórymi atakami używa containrack, podczas gdy sprzęt ogranicza jego użycie, a takie ograniczenie można wykorzystać do przeciążenia zasobów serwera.

-ctstate = określa, że ​​stan reguły jest zgodny; możliwe stany to: NOWY, PRZYJĘTY, POWIĄZANY I NIEWAŻNY.

#Zapewnij swoją usługę SSH przeciwko atakom brutalnej siły, umożliwiając tylko określony adres IP
Aby uzyskać dostęp do iptables -a wejście -p tcp -s x.X.X.X - -dport 22 -m contrack --ctState nowy,
Ustanowiony -j akceptuj
#Zapewnij swoją usługę SSH przeciwko atakom brutalnej siły, ograniczając próby połączenia
Iptables -a wejście -p tcp -m tcp -dport 22 -m contrack --ctState nowy -j 22 -testowy
IPTABLES -A 22 -test -m najnowsze -Nazwa Połączenia -Set - -Mask 255.255.255.255 -Rsource
IPTABLES -A 22 -test -m najnowsze -Nazwa Połączenia - -Rcheck - -Mask 255.255.255.255
--RSOURCE -SECONDS 30 -HITCOUNT 3 -J 22 -ORCHOCY
Iptables -a 22 -test -j zaakceptuj
Iptables -a 22 -ochrona -j upuszczenie

Gdzie:

W pierwszym wierszu nasza reguła mówi „-m conntrack -CtState nowy ” Co oznacza, że ​​jeśli połączenie jest nowe, przejdź do reguły „22-test”.

Druga linia mówi, że pakiet Net Net Mask 255.255.255.255 jest nazwanych jako ZNAJOMOŚCI.

Trzeci wiersz mówi, jeśli ZNAJOMOŚCI jest ponad 3 razy w ciągu 30 sekund, zapora kontynuuje stosowanie łańcucha 22-ochrona. Czwarta linia mówi, jeśli ZNAJOMOŚCI nie widziano ponad 3 razy w ciągu 30 sekund, można je zaakceptować.

Piąta linia, która należy do 22-ochrona łańcuch, mówi, aby upuścić ZNAJOMOŚCI Jeśli wydają się być ponad 3 razy w ciągu 30 sekund.

Teraz, aby się zakończyć, odrzućmy wszystkie nieokreślone połączenia przychodzące i pozwolimy na cały ruch wychodzący:

IPTABLES -p Wyjście Akceptuj
IPTABLES -p Drop wejściowy

P odnosi się do polityki łańcucha; Pamiętaj, że celem jest polityka, akceptuj, upuszczanie, odrzucenie. W takim przypadku mówimy, że domyślną zasadą ruchu wychodzącego jest zaakceptowanie, a domyślną zasadą przychodzącego ruchu jest odmowa, chyba że określamy coś innego w poprzednich zasadach. Jest to bardzo podstawowa zapora ogniowa, która nie zawiera reguł dla wielu ataków, do nauki, a nie produkcji; Pod koniec artykułu dołączam zaporę, której użyłem do produkcji na serwerze; ma komentarze wyjaśniające każdą regułę.

Przekazywanie połączenia z określonym portem do określonego adresu IP

Jest to również bardzo przydatne dla użytkowników komputerów stacjonarnych, którzy chcą rozważyć połączenie za pośrednictwem określonego urządzenia; Może być przydatny nawet dla graczy; Zwykle robimy to z ustawień routera, ale załóżmy, że urządzenie routingu działa.

iptables -a prrouting -t nat -p tcp -d x.X.X.X - -DPORT 8080 -J DNAT -do odstąpienia y.Y.Y.Y: 80
iptables -a posttrouting -t nat -p tcp -j snat - -to -source x.X.X.X

Powyższe reguły wywołują NAT (translacja adresu sieciowego), aby określić połączenia za pośrednictwem protokołu TCP na adres x.X.X.X i Port 8080 zostaną przekierowane, aby zająć się Y.Y.Y.Y, port 80. Druga reguła określa odpowiedzi na adres źródłowy (x.X.X.X). Możemy użyć tych zasad, aby umożliwić dostęp do kamery IP, włączyć grę online za pomocą sieci zewnętrznych itp.

Ten samouczek miał przedstawić początkujących do IPTables i wyjaśnia jedynie ograniczoną liczbę podstaw. Poniżej możesz zobaczyć próbkę dobrze zaplanowanej zapory używanej dla serwera produkcyjnego; Obejmuje niektóre zasady, które już widzieliśmy w bardziej złożonych zasadach, aby zapobiec DDO, między innymi rodzajami ataków.

Bonus: Próbka zapory produkcyjnej

iptables -f
#---- Włącz ochronę złego komunikatu o błędzie
Włącz/proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
#---- Włącz filtrowanie odwrotnej ścieżki. Bezpieczniejsze, ale przełamuje asymetryczne routing i/lub ipsec
Włącz/proc/sys/net/ipv4/conf/*/rp_filter
#---- Nie akceptuj pakietów kierowanych źródłem. Routing źródłowy jest rzadko używany do uzasadnienia
Cele wyłącz/proc/sys/net/ipv4/conf/*/accept_source_route
#---- Wyłącz Akceptację przekierowania ICMP, której można użyć do zmiany tabel routingu
Wyłącz/proc/sys/net/ipv4/conf/*/accept_redirects
#---- Ponieważ nie akceptujemy przekierowania, nie wysyłaj też wiadomości przekierowania
Wyłącz/proc/sys/net/ipv4/conf/*/send_redirects
#---- Ignoruj ​​pakiety z niemożliwymi adresami
Wyłącz/proc/sys/net/ipv4/conf/*/log_martians
#---- Chroń przed liczbą sekwencji owijania i pomiar pomiaru czasu podróży w obie strony
Włącz/proc/sys/net/ipv4/tcp_timestamps
#---- Pomoc przeciwko atakom Syn-Flood DOS lub DDOS przy użyciu poszczególnych wyborów początkowych
Numery sekwencji TCP Włącz/proc/sys/net/ipv4/tcp_syncookies
#---- Użyj selektywnej ACK, której można użyć, aby oznaczyć, że brakuje określonych pakietów
Wyłącz/proc/sys/net/ipv4/tcp_sack
modprobe nf_conntrack_ipv4
modprobe nf_nat
# modprobe nf_conntrack_ipv6
# modprobe nf_conntrack_amanda
# modprobe nf_nat_amanda
modprobe nf_conntrack_h323
modprobe nf_nat_h323
modprobe nf_conntrack_ftp
modprobe nf_nat_ftp
# modprobe nf_conntrack_netbios_ns
# modprobe nf_conntrack_irc
# modprobe nf_nat_irc
# modprobe nf_conntrack_proto_dccp
# modprobe nf_nat_proto_dccp
modprobe nf_conntrack_netlink
# modprobe nf_conntrack_pptp
# modprobe nf_nat_pptp
# modprobe nf_conntrack_proto_udplite
# modprobe nf_nat_proto_udplite
# modprobe nf_conntrack_proto_gre
# modprobe nf_nat_proto_gre
# modprobe nf_conntrack_proto_sctp
# modprobe nf_nat_proto_sctp
# modprobe nf_conntrack_sane
modprobe nf_conntrack_sip
modprobe nf_nat_sip
# modprobe nf_conntrack_tftp
# modprobe nf_nat_tftp
# modprobe nf_nat_snmp_basic
#Już możemy zacząć dodawać wybrane usługi do naszego filtra zapory. Pierwsza coś takiego
to interfejs localhost iptables -a wejście -i lo -j akceptuj
#Powiedzieliśmy zaporę, aby nie brał wszystkich przychodzących pakietów z flagami TCP i po prostu je upuść.
iptables -a wejście -p tcp ! -m conntrack --ctState New -j Drop
#Powiedzimy iPtables, aby dodać (-a) regułę do przychodzącego (wejścia)- SSH działa na porcie 50683
Zamiast tego 22.
iptables -a wejście -p tcp -m tcp - -dport 50683 -J Zaakceptuj
iptables -a wejście -p tcp -m tcp -s specyficzny ip - -dport 50683 -j Zaakceptuj
iptables -a wejście -p tcp -m tcp -s specyficzny ip - -dport 50683 -j Zaakceptuj
iptables -a wejście -p tcp -m tcp -s specyficzny ip - -dport 50683 -j Zaakceptuj
iptables -a wejście -p tcp - -dport 50683 -m contrack --ctState nowy -m najnowszy -set
--Nazwa ssh -J akceptuj
iptables -a wejście -p tcp - -dport 50683 -m Ostatnie -update -sekunda 60 -hitcount 4
--rttl --name ssh -J log - -log -prefix "ssh_brute_force"
iptables -a wejście -p tcp - -dport 50683 -m Ostatnie -update -sekunda 60 -hitcount 4
--rttl --Name SSH -J Drop
iptables -a wejście -p tcp - -dport 50683 -m contrack --ctState nowy -m najnowszy -set
--Nazwa ssh
iptables -a wejście -p tcp - -dport 50683 -m contrack --ctState New -J ssh_whitelist
iptables -a wejście -p tcp - -dport 50683 -m contrack --ctState new -m najnowszy -update
--Seconds 60 -HitCount 4 - -Rttl --Name SSH -J ULOG --ULOG -PREFIX SSH_BRU
iptables -a wejście -p tcp - -dport 50683 -m contrack --ctState new -m najnowszy -update
--Seconds 60 -HitCount 4 - -Rttl --Name SSH -J Drop
#Now pozwalam IMAP i SMTP.
-A wejście -p tcp - -dport 25 -J Zaakceptuj
# Pozwala na połączenia pop i pops
-A wejście -p tcp - -dport 110 -J Zaakceptuj
-A wejście -p TCP - -DPORT 995 -J Zaakceptuj
############ IMAP & IMAPS ############
-A wejście -p tcp - -dport 143 -J Zaakceptuj
-A wejście -p tcp - -dport 993 -J Zaakceptuj
########### Mysql ######################
iptables -a wejście -i eth0 -p tcp -m tcp - -dport 3306 -j Zaakceptuj
########## R1soft CDP System ################
iptables -a wejście -p tcp -m tcp -s specyficzny ip - -dport 1167 -j Zaakceptuj
############### towarzyski ###################
iptables -i wejście -m contrack --ctState ustalone, powiązane -j zaakceptuj
### Zezwalaj na ciągłe, blokowe przychodzące nie zdefiniowane ###
IPTABLES -p Wyjście Akceptuj
IPTABLES -p Drop wejściowy
iptables -l -n
IPTABLES-SAVE | Tee /etc /iptables.test.zasady
IPTABLES-RESTORE < /etc/iptables.test.rules
#Service iptables restart