Iptables սկսնակների համար


Iptable-ները համարվում են հիմնական պաշտպանական ռեսուրսներից մեկը շատ համակարգի ադմինիստրատորների համար, չնայած այն փոխարինվել է Nftables-ով: Ցանցային լավագույն արտադրողները ներառել են Iptables-ը դեռևս արտադրական միջավայրում գտնվող ապարատում:

Iptables-ը շատ բազմակողմանի է և ընդունում է ուղղակի հրամաններ օգտվողից, ով կարող է բեռնել և բեռնաթափել կանոնները ըստ անհրաժեշտության:

Այս ձեռնարկը ցույց է տալիս ինչպես պաշտպանել վեբ սերվերը, փոխանցել կապերը ներքին IP հասցեներին մեր LAN-ից և առաջարկել հատուկ ծառայություններ միայն սպիտակ ցուցակում նշված IP հասցեներին:

Նշում. Iptables-ի այս ձեռնարկն առաջին անգամ թողարկվել է երկու տարի առաջ և թարմացվել է 23/05/2021-ին՝ բարելավված օրինակներով և ավելի որակյալ սքրինշոթներով:

Ինչպես տեղադրել

Iptable-ները լռելյայն բացակայում են բաշխումներում, որոնք ներառում են Nftables:

Debian-ի վրա հիմնված Linux բաշխումների վրա Iptables-ը տեղադրելու համար գործարկեք հետևյալ հրամանը.

sudo apt update && apt install iptables

HTTP և HTTPS պորտերի բացում

Նախ, եկեք ավելացնենք բոլոր ACCEPT քաղաքականությունները՝ սկսած վեբսերվերից:

Նշում. Եթե կանոններով սկրիպտ եք ստեղծում, կարիք չկա օգտագործել sudo:

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

Ավելացված կանոնները տեսնելու համար գործարկեք «iptables -L»:

Որտեղ:

Iptables = կանչում է ծրագիրը

-A=ավելացնում է կանոն

INPUT=մուտքային տրաֆիկ

-p=արձանագրություն

–ddport=նպատակակետ նավահանգիստ

-j = նշեք «թիրախը»; թիրախը քաղաքականության տեսակն է՝ ԸՆԴՈՒՆԵԼ, ԲԱՑԵԼ, ՄԵՐԺԵԼ (Ներկառուցված)…

Iptables -L=թվարկում է iptables-ի բեռնված բոլոր կանոնները (Iptables -L -v=նույնը` խոսակցությամբ:)

Վերևի օրինակում մենք հրահանգում ենք Iptables-ին ավելացնել TCP արձանագրության միջոցով մուտքային տրաֆիկի կանոն և ընդունվել 80 (http) և 443 (https) նավահանգիստները:

Մենք կարող ենք փոխել միացումն ընդունելու հրամանը միայն կոնկրետ IP-ից՝ ավելացնելով «-s» պարամետրը.

sudo iptables -A INPUT -s 127.0.0.1 -p tcp --dport 80 -j ACCEPT

Որտեղ:

s = աղբյուրը

Դուք կարող եք նաև փորձարկել ձեր firewall-ը nmap-ով.

Նշում․ Վերևում գտնվող օրինակում 443 նավահանգիստը չի ցուցադրվում, քանի որ սերվերը չունի SSL վկայագիր պատշաճ կազմաձևված։

Նշում. Nmap-ի մասին լրացուցիչ տեղեկությունների համար կարող եք կարդալ սա:

Ձեր սերվերի պաշտպանությունը Iptables-ով.

#Open HTTP and HTTPS services.

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

iptables -A INPUT -p tcp --dport 443 -j ACCEPT

#Open SSH Port Service

iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

Որտեղ են նոր պարամետրերը.

-m նշանակում է «համընկնում» և օգտագործվում է Iptables-ի ընդլայնումներ կանչելու համար, ինչպես conntrack-ը, որը iptables-ի հիմնական գործառույթների մաս չէ:

conntrack = Թույլ է տալիս հետևել տեղեկատվություն կապերի վերաբերյալ, ինչպիսիք են կոնկրետ հասցեները կամ, այս դեպքում, կապի վիճակը: Սա պետք է զգույշ օգտագործվի, քանի որ սերվերները որոշ հարձակումներից պաշտպանելու շատ կանոններ օգտագործում են conntrack, մինչդեռ սարքաշարը սահմանափակում է դրա օգտագործումը, և նման սահմանափակումը կարող է օգտագործվել սերվերի ռեսուրսները ծանրաբեռնելու համար:

-ctstate = որոշում է կանոնի համապատասխանության վիճակը. հնարավոր վիճակներն են՝ ՆՈՐ, ՍՏԵՂԾՎԱԾ, ԿԱՊԻՑ և ԱՆՎԱՎԵՐ:

#Protect your SSH Service against brute force attacks by allowing only a specific IP

to access iptables -A INPUT -p tcp -s X.X.X.X --dport 22 -m conntrack --ctstate NEW,

ESTABLISHED -j ACCEPT

#Protect your SSH Service against brute force attacks by limiting connection attempts
Iptables -A INPUT -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j 22-test

Iptables -A 22-test -m recent --name CONNECTIONS --set --mask 255.255.255.255 --rsource

Iptables -A 22-test -m recent --name CONNECTIONS --rcheck --mask 255.255.255.255

--rsource --seconds 30 --hitcount 3 -j 22-protection

Iptables -A 22-test -j ACCEPT

Iptables -A 22-protection -j DROP

Որտեղ:

Առաջին տողում մեր կանոնն ասում է «-m conntrack –ctstate NEW», ինչը նշանակում է, եթե կապը նոր է, ապա անցեք «22-թեստ» կանոնին:

Երկրորդ տողում ասվում է, որ netmask 255.255.255.255 փաթեթները կոչվում են ՄԻԱՑՈՒՄՆԵՐ:

Երրորդ տողում ասվում է, որ եթե ՄԻԱՑՈՒՄՆԵՐը 30 վայրկյանի ընթացքում ավելի քան 3 անգամ է, ապա firewall-ը շարունակում է կիրառել 22-պաշտպանություն շղթան: Չորրորդ տողում ասվում է, որ եթե ՄԻԱՑՈՒՄՆԵՐԸ 30 վայրկյանում 3 անգամ չտեսնեն, դրանք կարող են ընդունվել:

Հինգերորդ տողում, որը պատկանում է 22-պաշտպանության շղթային, ասում է, որ թողեք ՄԻԱՑՈՒՄՆԵՐ, եթե 30 վայրկյանի ընթացքում դրանք ավելի քան 3 անգամ են թվում:

Այժմ, վերջացնելու համար, եկեք հրաժարվենք բոլոր չհաստատված մուտքային կապերից և թույլ տանք բոլոր ելքային երթևեկությունը.

iptables -P OUTPUT ACCEPT

iptables -P INPUT DROP

P վերաբերում է շղթայական քաղաքականությանը. հիշեք, որ թիրախը քաղաքականությունն է, ԸՆԴՈՒՆԵԼ, ԲԱՑԵԼ, ՄԵՐԺԵԼ: Այս դեպքում մենք ասում ենք, որ ելքային տրաֆիկի լռելյայն քաղաքականությունը ընդունելն է, իսկ մուտքային տրաֆիկի կանխադրված քաղաքականությունը մերժումն է, քանի դեռ նախորդ կանոններում այլ բան չենք նշել: Սա շատ հիմնական firewall-ն է, որը չի ներառում կանոններ բազմաթիվ գրոհների համար, ուսուցման նպատակով և ոչ արտադրության համար. Հոդվածի վերջում ես կցում եմ firewall-ը, որն օգտագործել եմ սերվերի վրա արտադրության համար. այն ունի յուրաքանչյուր կանոն բացատրող մեկնաբանություններ:

ՄԻԱՑՈՒՄ ՀԱՏՈՒԿ ՊԱՇՏՈՎ ՀԱՏՈՒԿ IP ՀԱՍՑԵ

Սա նաև շատ օգտակար է աշխատասեղանի օգտագործողների համար, ովքեր ցանկանում են կապ հաստատել որոշակի սարքի միջոցով. այն կարող է օգտակար լինել նույնիսկ խաղացողների համար; սովորաբար, մենք դա անում ենք երթուղիչի կարգավորումներից, բայց ենթադրենք, որ երթուղիչ սարքը աշխատում է Iptables-ով:

iptables -A PREROUTING -t nat -p tcp -d X.X.X.X --dport 8080 -j DNAT --to-destination Y.Y.Y.Y:80

iptables -A POSTROUTING -t nat -p tcp -j SNAT --to-source X.X.X.X

Վերոնշյալ կանոնները կանչում են NAT (Ցանցային հասցեի թարգմանություն)՝ TCP արձանագրության միջոցով X.X.X.X հասցեին միացումներ սահմանելու համար, իսկ 8080 նավահանգիստը կվերահղվի դեպի Y.Y.Y.Y հասցե, պորտ 80: Երկրորդ կանոնը սահմանում է, որ պատասխանները պետք է ուղարկվեն սկզբնաղբյուր հասցեին (X.X.X.X): Մենք կարող ենք օգտագործել այս կանոնները՝ թույլ տալու մուտք գործել IP տեսախցիկ, միացնել առցանց խաղերը արտաքին ցանցերով և այլն:

Այս ձեռնարկը նախատեսված էր սկսնակներին ծանոթացնելու Iptables-ին և բացատրում է միայն սահմանափակ թվով հիմունքներ: Ստորև կարող եք տեսնել լավ ծրագրված firewall-ի նմուշ, որն օգտագործվում է արտադրական սերվերի համար. այն ներառում է որոշ կանոններ, որոնք մենք արդեն տեսել ենք DDoS-ի կանխարգելման ավելի բարդ կանոնների վերաբերյալ, ի թիվս այլ տեսակի հարձակումների:

Բոնուս՝ արտադրության firewall-ի նմուշ

iptables -F

#---- Enable bad error message protection

enable /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

#---- Turn on reverse path filtering. Safer, but breaks asymmetric routing and/or IPSEC

enable /proc/sys/net/ipv4/conf/*/rp_filter

#---- Don't accept source routed packets. Source routing is rarely used for legitimate

purposes disable /proc/sys/net/ipv4/conf/*/accept_source_route

#---- Disable ICMP redirect acceptance which can be used to alter your routing tables

disable /proc/sys/net/ipv4/conf/*/accept_redirects

#---- As we don't accept redirects, don't send Redirect messages either

disable /proc/sys/net/ipv4/conf/*/send_redirects

#---- Ignore packets with impossible addresses

disable /proc/sys/net/ipv4/conf/*/log_martians

#---- Protect against wrapping sequence numbers and aid round trip time measurement

enable /proc/sys/net/ipv4/tcp_timestamps

#---- Help against syn-flood DoS or DDoS attacks using particular choices of initial

TCP sequence numbers enable /proc/sys/net/ipv4/tcp_syncookies

#---- Use Selective ACK which can be used to signify that specific packets are missing

disable /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

#Now we can start adding selected services to our firewall filter. The first such thing

is a localhost interface iptables -A INPUT -i lo -j ACCEPT

#We told the firewall to take all incoming packets with tcp flags NONE and just DROP them.
iptables -A INPUT -p tcp ! -m conntrack --ctstate NEW -j DROP

#We tell iptables to add (-A) a rule to the incoming (INPUT)- SSH works on port 50683

instead 22.

iptables -A INPUT -p tcp -m tcp --dport 50683 -j ACCEPT

iptables -A INPUT -p tcp -m tcp -s specific ip --dport 50683 -j ACCEPT

iptables -A INPUT -p tcp -m tcp -s specific ip --dport 50683 -j ACCEPT

iptables -A INPUT -p tcp -m tcp -s specific ip --dport 50683 -j ACCEPT

iptables -A INPUT -p tcp --dport 50683 -m conntrack --ctstate NEW -m recent --set

--name SSH -j ACCEPT

iptables -A INPUT -p tcp --dport 50683 -m recent --update --seconds 60 --hitcount 4

--rttl --name SSH -j LOG --log-prefix "SSH_brute_force "

iptables -A INPUT -p tcp --dport 50683 -m recent --update --seconds 60 --hitcount 4

--rttl --name SSH -j DROP

iptables -A INPUT -p tcp --dport 50683 -m conntrack --ctstate NEW -m recent --set

--name SSH

iptables -A INPUT -p tcp --dport 50683 -m conntrack --ctstate NEW -j SSH_WHITELIST

iptables -A INPUT -p tcp --dport 50683 -m conntrack --ctstate NEW -m recent --update

--seconds 60 --hitcount 4 --rttl --name SSH -j ULOG --ulog-prefix SSH_bru

iptables -A INPUT -p tcp --dport 50683 -m conntrack --ctstate NEW -m recent --update

--seconds 60 --hitcount 4 --rttl --name SSH -j DROP

#Now I allow imap,and smtp.
-A INPUT -p tcp --dport 25 -j ACCEPT

# Allows pop and pops connections

-A INPUT -p tcp --dport 110 -j ACCEPT

-A INPUT -p tcp --dport 995 -j ACCEPT

############ IMAP & IMAPS ############

-A INPUT -p tcp --dport 143 -j ACCEPT

-A INPUT -p tcp --dport 993 -j ACCEPT

########### MYSQL ###################

iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT

########## R1soft CDP System ###############

iptables -A INPUT -p tcp -m tcp -s specific ip --dport 1167 -j ACCEPT

############### outgoing ###################

iptables -I INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

### Allow ongoing, block incoming not defined ###

iptables -P OUTPUT ACCEPT

iptables -P INPUT DROP

iptables -L -n

iptables-save | tee /etc/iptables.test.rules

iptables-restore < /etc/iptables.test.rules

#service iptables restart