Iptables սկսնակների համար
Iptable-ները համարվում են հիմնական պաշտպանական ռեսուրսներից մեկը շատ համակարգի ադմինիստրատորների համար, չնայած այն փոխարինվել է Nftables-ով: Ցանցային լավագույն արտադրողները ներառել են Iptables-ը դեռևս արտադրական միջավայրում գտնվող ապարատում:
Iptables-ը շատ բազմակողմանի է և ընդունում է ուղղակի հրամաններ օգտվողից, ով կարող է բեռնել և բեռնաթափել կանոնները ըստ անհրաժեշտության:
Այս ձեռնարկը ցույց է տալիս ինչպես պաշտպանել վեբ սերվերը, փոխանցել կապերը ներքին IP հասցեներին մեր LAN-ից և առաջարկել հատուկ ծառայություններ միայն սպիտակ ցուցակում նշված IP հասցեներին:
Նշում. Iptables-ի այս ձեռնարկն առաջին անգամ թողարկվել է երկու տարի առաջ և թարմացվել է 23/05/2021-ին՝ բարելավված օրինակներով և ավելի որակյալ սքրինշոթներով:
Ինչպես տեղադրել
Iptable-ները լռելյայն բացակայում են բաշխումներում, որոնք ներառում են Nftables:
Debian-ի վրա հիմնված Linux բաշխումների վրա Iptables-ը տեղադրելու համար գործարկեք հետևյալ հրամանը.
HTTP և HTTPS պորտերի բացում
Նախ, եկեք ավելացնենք բոլոր ACCEPT քաղաքականությունները՝ սկսած վեբսերվերից:
Նշում. Եթե կանոններով սկրիպտ եք ստեղծում, կարիք չկա օգտագործել sudo:
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» պարամետրը.
Որտեղ:
s = աղբյուրը
Դուք կարող եք նաև փորձարկել ձեր firewall-ը nmap-ով.
Նշում․ Վերևում գտնվող օրինակում 443 նավահանգիստը չի ցուցադրվում, քանի որ սերվերը չունի SSL վկայագիր պատշաճ կազմաձևված։
Նշում. Nmap-ի մասին լրացուցիչ տեղեկությունների համար կարող եք կարդալ սա:
Ձեր սերվերի պաշտպանությունը Iptables-ով.
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 = որոշում է կանոնի համապատասխանության վիճակը. հնարավոր վիճակներն են՝ ՆՈՐ, ՍՏԵՂԾՎԱԾ, ԿԱՊԻՑ և ԱՆՎԱՎԵՐ:
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 INPUT DROP
P վերաբերում է շղթայական քաղաքականությանը. հիշեք, որ թիրախը քաղաքականությունն է, ԸՆԴՈՒՆԵԼ, ԲԱՑԵԼ, ՄԵՐԺԵԼ: Այս դեպքում մենք ասում ենք, որ ելքային տրաֆիկի լռելյայն քաղաքականությունը ընդունելն է, իսկ մուտքային տրաֆիկի կանխադրված քաղաքականությունը մերժումն է, քանի դեռ նախորդ կանոններում այլ բան չենք նշել: Սա շատ հիմնական firewall-ն է, որը չի ներառում կանոններ բազմաթիվ գրոհների համար, ուսուցման նպատակով և ոչ արտադրության համար. Հոդվածի վերջում ես կցում եմ firewall-ը, որն օգտագործել եմ սերվերի վրա արտադրության համար. այն ունի յուրաքանչյուր կանոն բացատրող մեկնաբանություններ:
ՄԻԱՑՈՒՄ ՀԱՏՈՒԿ ՊԱՇՏՈՎ ՀԱՏՈՒԿ IP ՀԱՍՑԵ
Սա նաև շատ օգտակար է աշխատասեղանի օգտագործողների համար, ովքեր ցանկանում են կապ հաստատել որոշակի սարքի միջոցով. այն կարող է օգտակար լինել նույնիսկ խաղացողների համար; սովորաբար, մենք դա անում ենք երթուղիչի կարգավորումներից, բայց ենթադրենք, որ երթուղիչ սարքը աշխատում է Iptables-ով:
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-ի նմուշ
#---- 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