Blokowanie stron tylko dla wybranych IP

Serwery i sieci oparte na Slackware, wszelkiego rodzaju usługi, troubleshooting.

Moderatorzy: Moderatorzy, Administratorzy

k0nficjusz
Użytkownik
Posty: 5
Rejestracja: 2008-12-10, 09:21

Blokowanie stron tylko dla wybranych IP

Post autor: k0nficjusz »

Witam,

Ja z takim zapytaniem, czy da rade na IPtable zablokować stronki dla wybranych adresów IP.
Do taj pory robiłem dropa dla wszystkich a wyglądało to tak:

Kod: Zaznacz cały

$IPTABLES -I INPUT -s 195.93.178.2 -j DROP
...
u mnie najczęściej odwiedzana strona zaraz po allegro:P
Dokladnie chce żeby ip np. 10.1.1.1 miał dostęp do wszystkiego, czyli bez tego dropa, a IP 10.1.1.2 miał poblokowane stronki.

Btw. da się to zrobić bez squida?
Ostatnio zmieniony 2008-12-18, 10:52 przez k0nficjusz, łącznie zmieniany 1 raz.
infern
Użytkownik
Posty: 268
Rejestracja: 2006-10-26, 14:38
Lokalizacja: Wrocław

Re: Blokowanie stron tylko dla wybranych IP

Post autor: infern »

Kod: Zaznacz cały

iptables -A FORWARD -s lokal_ip -d IP -j DROP 
Jeszcze dodał bym że to dla portu TCP/80. Nie sprawdzałem, mogę się mylić
Ostatnio zmieniony 2008-12-18, 11:20 przez infern, łącznie zmieniany 1 raz.
Pozdrawiam Tomek
Pajaczek
Użytkownik
Posty: 1439
Rejestracja: 2006-08-03, 13:16
Lokalizacja: Winny Gród

Re: Blokowanie stron tylko dla wybranych IP

Post autor: Pajaczek »

No generalnie tak jak infern napisał (z uzupełnieniem portu, jeśli ma dotyczyć tylko stronek).

Kod: Zaznacz cały

iptables -A FORWARD -s lokal_ip -d IP_strony -p tcp --dport 80 -j DROP
W ogóle to k0nficjusz dziwnie to blokowałeś... pozwalałeś żeby zapytanie wyszło, zostało przez serwer (zdalny) obsłużone, a dopiero odpowiedź ucinałeś. Nie lepiej zablokować już wychodzące zapytanie?

Ps. iptables tylko kawy dobrej nie parzy... ;/
Awatar użytkownika
Outlaw
Administrator
Posty: 2862
Rejestracja: 2004-06-29, 22:23
Lokalizacja: eth0
Kontakt:

Re: Blokowanie stron tylko dla wybranych IP

Post autor: Outlaw »

chyba że przez squida będziesz blokował konkretne adresy www ;)

http://wiki.squid-cache.org/SquidFaq/

hasło ACL ;)
Ostatnio zmieniony 2008-12-18, 11:27 przez Outlaw, łącznie zmieniany 1 raz.
Awatar użytkownika
freak117
Użytkownik
Posty: 250
Rejestracja: 2006-12-13, 21:26
Lokalizacja: z sieci

Re: Blokowanie stron tylko dla wybranych IP

Post autor: freak117 »

k0nficjusz pisze:

Kod: Zaznacz cały

$IPTABLES -I INPUT -s 195.93.178.2 -j DROP
Pajaczek pisze:W ogóle to k0nficjusz dziwnie to blokowałeś... pozwalałeś żeby zapytanie wyszło, zostało przez serwer (zdalny) obsłużone, a dopiero odpowiedź ucinałeś.
Niestety nie jest to prawda. Do łańcucha INPUT trafiają pakiety jeśli są zaadresowane do danego hosta. Jeśli on je tylko przekazuje dalej (forward'uje) to lecą one przez tablicę FORWARD i blokowanie ich w INPUT nic tu nie da (chyba, że chodzi o blokowanie strony na tym wlaśnie serwerze). Poza tym odpowiedź z serwera też leci przez FORWARD a source IP jest już IP serwera obsługującego stronę a nie lokalnego użytkownika.
W3 rulez ;D
Pajaczek
Użytkownik
Posty: 1439
Rejestracja: 2006-08-03, 13:16
Lokalizacja: Winny Gród

Re: Blokowanie stron tylko dla wybranych IP

Post autor: Pajaczek »

freak117 pisze:Niestety nie jest to prawda...
o patrz... ale wtopa ;) nie zwróciłem uwagi na łańcuch ;) (a właściwie zwróciłem, ale w niewłaściwym poście... jakoś mi się utrwaliło FORWARD)... w takim razie tym bardziej dziwnie blokował to połączenie ;p bo taka blokada nie miała prawa działać dla hostów wewnętrznych. Jednak dla samego routera (serwera) takie blokowanie zadziała, choć trochę na opak (od końca), dokładnie tak jak to opisałem.

A jak już się czepiamy to:
freak117 pisze:przez tablicę FORWARD
nie tablicę, tylko łańcuch. Tablicą jest nat/filter/mangle/raw... zaś INPUT/OUTPUT/FORWARD są łańcuchami predefiniowanymi.
Ostatnio zmieniony 2008-12-18, 12:57 przez Pajaczek, łącznie zmieniany 2 razy.
k0nficjusz
Użytkownik
Posty: 5
Rejestracja: 2008-12-10, 09:21

Re: Blokowanie stron tylko dla wybranych IP

Post autor: k0nficjusz »

No dobra to ja troszkę z inne strony podejdę do problemu. Ostawię na bok tamtego firewalla i blokowanie. Skutecznie nieskuteczne ale działało.
Teraz zbytnio nie mam czasu na pisanie od nowa i zaciągnąłem jednego z forum i w nim właśnie mam problem z blokowaniem.

Kod: Zaznacz cały

#!/bin/bash
# scieżka do pliku <i>iptables</i>
         IPT=/usr/sbin/iptables
# scieżka do pliku <i>modprobe</i>
         MOD=/sbin/modprobe
# interfejs zewnętrzny, od strony Internetu - tylko router filtrujacy
         INT_PUB="eth0"
# interfejs wewnętrzny, od strony sieci LAN - tylko router filtrujacy
         INT_LAN="eth1"
# publiczny adres IP przypisany do zewnętrznego interfejsu - tylko router filtrujacy
         IP_PUB="XXX.XXX.XXX.XXX"
# adres IP sieci LAN - tylko router filtrujacy
         IP_LAN="10.1.5.0/16"
		 
		 
# ładowanie modułu ip_tables - wymagany, aby funkcjonował filtr pakietów
         $MOD ip_tables
# ładowanie modułu ip_conntrack - sledzenie połaczeń
         $MOD ip_conntrack
# ładowanie modułu ip_conntrack_ftp - sledzenie połaczeń ftp
         $MOD ip_conntrack_ftp
# ładowanie modułu ip_conntrack_irc - sledzenie połaczeń irc
         $MOD ip_conntrack_irc
# ładowanie modułu iptable_nat - wymagany do funkcjonowania mechanizmu NAT
# (tylko router/firewall NATujacy)
         $MOD iptable_nat
# ładowanie modułu ip_nat_ftp - wsparcie dla FTP przy wykorzystaniu NAT
# (tylko router/firewall NATujacy)
         $MOD ip_nat_ftp

# ładowanie modułu ip_nat_irc - wsparcie dla IRC przy wykorzystaniu NAT
# (tylko router/firewall NATujacy)   
         $MOD ip_nat_irc

# włączenie mechanizmu przeciwko atakom typu SYN-Flood (antiflood syn)
         echo 1 > /proc/sys/net/ipv4/tcp_syncookies
# włączenie mechanizmu antyspoofingu - filtrowanie fałszywych adresów IP (antispoofing)
         echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
# właczenie forwardowania pakietów - tylko dla konfiguracji routera/bramy (dla stacji roboczej ustawiamy wartosc 0)
         echo 1 > /proc/sys/net/ipv4/ip_forward 


		 
# ustawiamy domyslna polityke dla poszegolnych lancuchow
# domyslnie polaczenia przychodzące odrzucamy
         $IPT -P INPUT DROP
# domyslnie wypuszczamy wszystko z naszego firewalla
         $IPT -P OUTPUT ACCEPT
# domyslnie blokujemy przekazywanie pakietow
         $IPT -P FORWARD DROP
# czyscimy istniejace reguly w lancuchach
         $IPT -F INPUT
         $IPT -F OUTPUT
         $IPT -F FORWARD
# czyscimy tablice NAT
         $IPT -F -t nat


# interfejs lokalny traktujemy jako uprzywilejowany
         $IPT -A INPUT -i lo -j ACCEPT
         $IPT -A OUTPUT -o lo -j ACCEPT
         $IPT -A FORWARD -o lo -j ACCEPT


   
# wpuszczamy na obydwa interfejsy tylko nawiązane i spokrewnione połączenia (dla poszczególnych protokołów)
         $IPT -A INPUT -p all -j ACCEPT -m state --state ESTABLISHED,RELATED

# odrzucamy przychodzące na interfejsy zapytania o IDENT i SOCKS z odpowiedzia port nieosiagalny
# gdyż nie mamy takich usług (aby uniknać opóznień w trakcie łaczenia z serwerami IRC i FTP)
         $IPT -A INPUT -p tcp --dport 113 -j REJECT --reject-with icmp-port-unreachable
         $IPT -A INPUT -p tcp --dport 1080 -j REJECT --reject-with icmp-port-unreachable

# pozwalamy na połączenia z firewallem z zaufanej sieci LAN
         $IPT -A INPUT -i $INT_LAN -p all -j ACCEPT -m state --state NEW

# pozostały ruch przychodzący na interfejs zewnętrzny logujemy
         $IPT -A INPUT -i $INT_PUB -j LOG
# pozostały ruch przychodzący na interfejs zewnętrzny odrzucamy, gdyż nie udostępniamy żadnych usług
         $IPT -A INPUT -i $INT_PUB -j DROP


# pozwalamy na wpuszczanie/przekazywanie z zewnatrz do sieci tylko połączeń wczesniej nawiązanych z LAN lub spokrewnionych
# dla wszystkich protokołów
      $IPT -A FORWARD -i $INT_PUB -o $INT_LAN -p all -m state --state ESTABLISHED,RELATED -j ACCEPT


###KTO MA DOSTEP:

WIFI="10.1.5.1"
ADM="10.1.5.2"
  
# wypuszczanie (przekazywanie) połączeń z sieci LAN do Internetu
      $IPT -A FORWARD -i $INT_LAN -o $INT_PUB -s $WIFI -j ACCEPT
      $IPT -A FORWARD -i $INT_LAN -o $INT_PUB -s $ADM -j ACCEPT
      	  
#BLOKOWANE STRONY
	  
$IPT -A FORWARD -s $WIFI -d 193.23.48.134 -p tcp --dport 80 -j DROP

# logujemy pozostały ruch przekazywany
         $IPT -A FORWARD -j LOG
# odrzucamy pozostały ruch przekazywany
         $IPT -A FORWARD -j DROP


# wykonujemy translację adresów NAT (SNAT) dla całej sieci - dla statycznego IP publicznego
      $IPT -t nat -A POSTROUTING -o $INT_PUB -s $IP_LAN -j SNAT --to $IP_PUB
Więc podane przez was polecenie nie działa. Co robię źle?

[ Dodano: 2008-12-19, 08:39 ]
Ok już sobie poradziłem, IPTABLES sprawdzony więc można korzystać jak by ktoś nie miał dużo czasu:)

A blokowanie zapisałem tak

Kod: Zaznacz cały

$iptables -t nat -A PREROUTING -s lokal_ip -p tcp -d strona_ip -j DROP
Ostatnio zmieniony 2008-12-19, 07:08 przez k0nficjusz, łącznie zmieniany 1 raz.
memus
Użytkownik
Posty: 245
Rejestracja: 2005-09-27, 17:17

Re: Blokowanie stron tylko dla wybranych IP

Post autor: memus »

Może już działa ale ja się jednak doczepie :). Tablica nat nie służy do blokowania tak jak to zrobiłeś. Co do FORWARD to zwróć uwagę na kolejność. Najpierw wpuszczasz cały ruch a potem blokujesz konkretne IP. Powinno być odwrotnie.
Ostatnio zmieniony 2008-12-19, 17:35 przez memus, łącznie zmieniany 1 raz.
k0nficjusz
Użytkownik
Posty: 5
Rejestracja: 2008-12-10, 09:21

Re: Blokowanie stron tylko dla wybranych IP

Post autor: k0nficjusz »

Hmm.. dzięki za uwagę przemyślę i w miarę możliwości czasowych poprawię.
Oczywiście pokaże rezultat.

Mam jeszcze jeden problem ponieważ jak wspomnia memus, tablica nat nie służy do blokowania. To był jedyny pomysł na który wpadłem w danej chwili. Może ktoś mi pomoże to poprawić. Będę bardzo wdzięczny.
Pozatym mam jeszcze jeden problem.
Zkładając:

Kod: Zaznacz cały

WIFI="10.1.5.1"
ADM="10.1.5.2" 
USER1="10.1.5.3"
USER2="10.1.5.4"
itd.
Chciałbym stworzyć jedną zmienną

Kod: Zaznacz cały

BLOKOWANI="10.1.5.1 10.1.5.3 10.1.5.12" itd
Niestety nie mogę dodać całej grupy użytkowników do blokowania

Kod: Zaznacz cały

$iptables -t nat -A PREROUTING -s $BLOKOWANI -p tcp -d strona_ip -j DROP 
ponieważ wywali mi błąd zawsze na drugim ip w tym przypadku bedzie 10.1.5.3
Koś ma jakieś sugestie?
Ostatnio zmieniony 2008-12-19, 18:36 przez k0nficjusz, łącznie zmieniany 1 raz.
memus
Użytkownik
Posty: 245
Rejestracja: 2005-09-27, 17:17

Re: Blokowanie stron tylko dla wybranych IP

Post autor: memus »

k0nficjusz pisze:Mam jeszcze jeden problem ponieważ jak wspomnia memus, tablica nat nie służy do blokowania. To był jedyny pomysł na który wpadłem w danej chwili. Może ktoś mi pomoże to poprawić. Będę bardzo wdzięczny.
Napisałem, że problemem jest kolejność FORWARD. Najpierw pozwalasz wszystkich a potem blokujesz. iptables działa tak, że jeżeli już dopasował się do jakiejś reguły to dalsze nie są sprawdzane. Dlatego powinieneś najpierw dać regułkę do blokowania, a potem udostępniania.
k0nficjusz pisze:Chciałbym stworzyć jedną zmienną
Spróbuj ipset czy będzie Ci odpowiadał.
Ostatnio zmieniony 2008-12-19, 20:15 przez memus, łącznie zmieniany 1 raz.
Awatar użytkownika
freak117
Użytkownik
Posty: 250
Rejestracja: 2006-12-13, 21:26
Lokalizacja: z sieci

Re: Blokowanie stron tylko dla wybranych IP

Post autor: freak117 »

k0nficjusz pisze:Chciałbym stworzyć jedną zmienną

Kod: Zaznacz cały

BLOKOWANI="10.1.5.1 10.1.5.3 10.1.5.12" itd
Niestety nie mogę dodać całej grupy użytkowników do blokowania

Kod: Zaznacz cały

$iptables -t nat -A PREROUTING -s $BLOKOWANI -p tcp -d strona_ip -j DROP 
ponieważ wywali mi błąd zawsze na drugim ip w tym przypadku bedzie 10.1.5.3
Koś ma jakieś sugestie?
A może tak:

Kod: Zaznacz cały

for i in $BLOKOWANI; do
   $iptables -A FORWARD -s $i -d ip_strony -p tcp --dport 80 -j DROP
done
W3 rulez ;D
f1y
Użytkownik
Posty: 11
Rejestracja: 2008-12-14, 16:16
Lokalizacja: Gliwice

Re: Blokowanie stron tylko dla wybranych IP

Post autor: f1y »

Zdecydowanie tak:

Kod: Zaznacz cały

for i in ${BLOKOWANI}; do
   $iptables -A FORWARD -s ${i} -d ip_strony -p tcp --dport 80 -j DROP
done
ponieważ ma to działać dla każdego elementu oddzielonego spacją, a wybieranego ze zmiennej BLOKOWANI. Potem wystarczy działać na zmiennej BLOKOWANI dopisując lub kasując numery IP.
"Tylko dwie rzeczy są nieskończone: wszechświat oraz ludzka głupota, choć nie jestem pewien co do tej pierwszej", Albert Einstein.
k0nficjusz
Użytkownik
Posty: 5
Rejestracja: 2008-12-10, 09:21

Re: Blokowanie stron tylko dla wybranych IP

Post autor: k0nficjusz »

Zaraz sprawdzę i powiem co i jak, ale z tego co widać to powinno działać:)
khwll
Użytkownik
Posty: 14
Rejestracja: 2008-11-14, 20:45

Re: Blokowanie stron tylko dla wybranych IP

Post autor: khwll »

k0nficjusz pisze: Chciałbym stworzyć jedną zmienną

Kod: Zaznacz cały

BLOKOWANI="10.1.5.1 10.1.5.3 10.1.5.12" itd
Niestety nie mogę dodać całej grupy użytkowników do blokowania

Kod: Zaznacz cały

$iptables -t nat -A PREROUTING -s $BLOKOWANI -p tcp -d strona_ip -j DROP 
ponieważ wywali mi błąd zawsze na drugim ip w tym przypadku bedzie 10.1.5.3
Koś ma jakieś sugestie?
a nie prościej pomyśleć o grupowaniu adresów IP?
przykładowo:
admini: 10.1.5.16-31
blokowani: 10.1.5.64-127 z maską 26
i regułki staną się prostsze
iptables -I FORWARD -s $BLOKOWANI ....

khwll
ODPOWIEDZ