RSS

Walka ze spamem: kolejne rozdanie

Liczba odsłon: 166

Od po­cząt­ku ad­mi­ni­stro­wa­nia włas­nym ser­we­rem sta­wia­łem na wal­kę ze spa­mem. Zwalcza­łem za­rów­no spam pa­syw­ny, po­le­ga­ją­cy na ska­no­wa­niu za­war­toś­ci stron WWW w po­szu­ki­wa­niu adre­sów pocz­ty elek­tro­nicz­nej oraz po­tenc­jal­nych sła­bych punk­tów, jak i spam ak­tyw­ny, czy­li zwyk­łe wy­sy­ła­nie nie­chcia­nych ko­men­ta­rzy oraz wia­do­moś­ci pocz­to­wych. Kilkanaś­cie dni te­mu wpro­wa­dzi­łem ko­lej­ne za­bez­pie­cze­nie.

Spam pocz­to­wy był do­tych­czas lik­wi­do­wa­ny przez mój ser­wer tyl­ko na pod­sta­wie treś­ci. Wymaga to nie­ustan­ne­go ob­ser­wo­wa­nia, czy przy­pad­kiem nie po­ja­wi­ły się no­we wa­rian­ty wi­ru­sów. Jeżeli uzu­peł­nię na czas słow­nik za­bro­nio­nych fraz, fa­la spa­mu od­bi­ja się od ser­we­ra i nie szko­dzi mi. Jeżeli jed­nak nie mo­gę te­go zro­bić od ra­zu, po kil­ku dniach mo­je skrzyn­ki pocz­to­we za­peł­nia­ją się śmie­cia­mi.

Gdyby za­sto­so­wać do spa­mu za­sa­dę Pareto, mog­li­byś­my po­sta­wić te­zę, że za wy­sy­ła­nie więk­szoś­ci spa­mu mo­że od­po­wia­dać względ­nie nie­wiel­ka gru­pa naj­bar­dziej ak­tyw­nych kom­pu­te­rów na­le­żą­cych do bot­ne­tów. Zabloko­wa­nie 20% bot­ne­tu mo­że spo­wo­do­wać od­cię­cie 80% spa­mu. Jeżeli raz trwa­le odet­nie się na­daw­cę spa­mu, ża­den no­wy ro­dzaj spa­mu i wi­ru­sów przez nie­go na­da­wa­ny nie do­trze do ser­we­ra do­ce­lo­we­go.

Moja no­wa blo­ka­da po­le­ga właś­nie na trwa­łym blo­ko­wa­niu ko­mu­ni­kac­ji IP z kom­pu­te­ra­mi, któ­re choć raz na­da­ły w moim kie­run­ku spam. Blokowana jest tyl­ko ko­mu­ni­kac­ja bez­po­śred­nia, za­tem na­wet je­że­li za­blo­ku­ję kom­pu­ter o zmien­nym ad­re­sie IP, nie prze­szko­dzi to przy­szłe­mu in­ne­mu dzier­żaw­cy te­go adre­su prze­sy­ła­nie do mnie pocz­ty „nor­mal­ną” dro­gą, czy­li za po­śred­nic­twem ze­wnętrz­ne­go ser­we­ra SMTP. Uniemożli­wiam na­to­miast człon­kom bot­ne­tów wy­sy­ła­nie mi spa­mu (co jest rea­li­zo­wa­ne bez­po­śred­nim po­łą­cze­niem SMTP na port 25/tcp) oraz pró­by pro­wa­dze­nia ata­ków, mię­dzy in­ny­mi na usłu­gi HTTP oraz SSH.


Niektó­rzy mo­gą być cie­ka­wi, jak za­im­ple­men­to­wa­łem no­we za­bez­pie­cze­nie od stro­ny tech­nicz­nej. Oczywiś­cie wy­ko­rzy­sta­na zo­sta­ła za­po­ra sie­cio­wa iptables ser­we­ra, jed­nak za­pi­sy­wa­nie każ­dej re­gu­ły ręcz­nie nie wcho­dzi­ło w ra­chu­bę. Tego ty­pu roz­wią­za­nia mu­szą być łat­we w ob­słu­dze, moż­li­wie oszczęd­ne oraz mak­sy­mal­nie od­por­ne na ewen­tu­al­ne błę­dy.

Pierwszy po­mysł po­le­gał na za­pi­sa­niu li­sty adre­sów IP i od­po­wia­da­ją­cych im ma­sek (by umoż­li­wić blo­ko­wa­nie ca­łych pul adre­sów) w ba­zie da­nych. Odpowied­nia ta­be­la by­ła­by pros­ta w stwo­rze­niu, jed­nak wpro­wa­dza­nie do niej da­nych wy­ma­ga­ło­by opra­co­wa­nia ze­sta­wu for­mu­la­rzy lub przy­naj­mniej na­rzę­dzia uru­cha­mia­ne­go z wier­sza po­le­ceń. Na to nie mia­łem cza­su, szcze­gól­nie bio­rąc pod uwa­gę eks­pe­ry­men­tal­ny cha­rak­ter za­bez­pie­cze­nia.

Zwycię­żył za­tem prag­ma­tyzm. Lista adre­sów jest za­pi­sa­na w zbio­rze tek­sto­wym, a do­da­ję je ręcz­nie z po­zio­mu kon­so­li sys­te­mu. Zbiory tek­sto­we są chy­ba naj­cu­dow­niej­szym wy­na­laz­kiem in­for­ma­ty­ki: moż­na je na wie­le spo­so­bów ana­li­zo­wać i sca­lać z wie­lu źró­deł, a prze­de wszyst­kim łat­wo po­rów­ny­wać i wer­sjo­no­wać za po­mo­cą na­rzę­dzi ta­kich jak diff czy git. Równie łat­wo prze­twa­rza je po­wło­ka bash, któ­rej skrypt po­słu­żył do ge­ne­ro­wa­nia li­sty po­le­ceń iptables two­rzą­cych łań­cuch za­po­ry sie­cio­wej filt­ru­ją­cy no­we po­łą­cze­nia klien­tów.

Człowiek jed­nak zaw­sze chce wię­cej. Przy szyb­kim uzu­peł­nia­niu li­sty łat­wo o po­wtór­ne do­da­nie już blo­ko­wa­ne­go adre­su IP lub przy­pad­ko­we do­da­nie adre­su, któ­ry nie po­wi­nien być nig­dy blo­ko­wa­ny (szcze­gól­nie włas­ne­go…). Rolą kom­pu­te­rów zaś jest chro­nić czło­wie­ka przed je­go po­mył­ka­mi, gdy tyl­ko jest to moż­li­we. Skrypt ge­ne­ru­ją­cy re­gu­ły za­po­ry sor­tu­je za­tem wszyst­kie adre­sy i usu­wa du­pli­ka­ty, ra­por­tu­jąc ich ist­nie­nie, by moż­na by­ło je usu­nąć z da­nych źród­ło­wych. Sprawdza też, czy na liś­cie blo­ko­wa­nych adre­sów nie po­ja­wia­ją się po­zyc­je wpi­sa­ne do od­ręb­nej li­sty adre­sów „bez­piecz­nych”. Jeżeli tak, po­mi­ja wpi­sy i zgła­sza prob­lem w kon­so­li. Na ko­niec za­po­ra jest re­kon­fi­gu­ro­wa­na — ad­mi­ni­stra­to­ro­wi po­zos­ta­je tyl­ko wpi­sać has­ło kon­ta root.

Ktoś mógł­by za­py­tać, czy uzu­peł­nia­nie li­sty nie mog­ło­by prze­bie­gać auto­ma­tycz­nie. Owszem, ale po­wo­do­wa­ło­by to wię­cej prob­le­mów niż oszczęd­noś­ci. Na blo­ko­wa­nie za­słu­gu­ją bo­wiem je­dy­nie kom­pu­te­ry, któ­re nig­dy nie po­win­ny wy­sy­łać pocz­ty elek­tro­nicz­nej, za­in­fe­ko­wa­ne wi­ru­sa­mi i na­le­żą­ce do bot­ne­tów. Tymcza­sem część spa­mu po­cho­dzi z „le­gal­nych” ser­we­rów pocz­ty elek­tro­nicz­nej, w szcze­gól­noś­ci ob­słu­gi­wa­nych przez fir­my hos­tin­go­we. Czasem są to wia­do­moś­ci z py­ta­niem o za­in­te­re­so­wa­nie ofer­tą, teore­tycz­nie wy­sy­ła­ne zgod­nie z pra­wem. Hołduję jed­nak za­sa­dzie, że żad­na fir­ma nie po­win­na do mnie wy­sy­łać pocz­ty bez py­ta­nia. Wycinam za­tem ta­ki nie­chcia­ny spam wed­ług treś­ci, po­zo­sta­wia­jąc jed­nak na przy­szłość częś­cio­wo otwar­tą dro­gę ko­mu­ni­kac­ji.


Blokowa­nie wszel­kiej ko­mu­ni­kac­ji z kom­pu­te­ra­mi wy­sy­ła­ją­cy­mi spam ma wie­le za­let. Przede wszyst­kim, ogra­ni­cze­niu ule­ga wy­ko­rzys­ta­nie łą­cza sie­cio­we­go: nie mu­szę ode­brać wia­do­moś­ci by stwier­dzić, że jest ona spa­mem lub wi­ru­sem. Zmniejsza też sku­tecz­ność spa­me­rów, gdyż pro­gram wy­sy­ła­ją­cy spam mu­si przez kil­ka lub kil­ka­naś­cie se­kund pró­bo­wać – bez­sku­tecz­nie – po­łą­czyć się z moim ser­we­rem SMTP. Blokada zmniej­sza też sto­pień od­dzia­ły­wa­nia no­wych form spa­mu, utrud­nia­jąc je­go do­tar­cie do mo­men­tu, gdy za­blo­ku­ję go cał­ko­wi­cie od­po­wied­ni­mi re­gu­ła­mi. Uniemożli­wiam też prze­pro­wa­dze­nie bar­dziej wy­ra­fi­no­wa­nych ata­ków (na przy­kład prób wła­ma­nia lub wy­ko­rzys­ta­nia lu­ki w za­bez­pie­cze­niach) za po­mo­cą te­go sa­me­go bot­ne­tu, któ­ry słu­żył do wy­sy­ła­nia spa­mu.

Oczywiś­cie, blo­ka­dy ma­ją też kil­ka wad. Duża licz­ba re­guł za­po­ry sie­cio­wej zmniej­sza jej wy­daj­ność. Przypadko­wo mo­gę też za­blo­ko­wać so­bie ko­mu­ni­kac­ję z ser­we­ra­mi, któ­re nie po­win­ny być blo­ko­wa­ne — i to na­wet mi­mo za­bez­pie­czeń, o któ­rych wspo­mi­na­łem. Ponadto, zna­jo­mość no­wych ro­dza­jów spa­mu i wi­ru­sów mo­że być przy­dat­na i cza­sem le­piej być na pierw­szej linii ata­ku, by móc się przy­go­to­wać na ko­lej­ne, sku­tecz­niej­sze fa­le.


Obecnie w moim fil­trze znaj­du­je się po­nad 1300 adre­sów IP. Codziennie zwięk­sza ona obję­tość o oko­ło 50 wpi­sów. Zdaję so­bie spra­wę, że spo­śród blis­ko czte­rech mi­liar­dów moż­li­wych adre­sów IP więk­szość po­win­na tra­fić na tę li­stę, a ręcz­ne uzu­peł­nia­nie li­sty to wiel­ka, a mo­że bez­na­dziej­na pra­ca. Jednak już te­raz zauwa­żam po­zy­tyw­ne skut­ki moich dzia­łań w po­sta­ci zna­czą­co mniej­szej licz­by po­łą­czeń z ser­we­rem SMTP.