Sposób na Prima Aprills dla Rodziny – OpenWrt i Squid

openwrt_squid

0. Co to OpewnWrt i Squid

OpenWRT to otwarty system(Linux), publikowany na licencji GPL, budowany dla domowych routerów(urządzenia wbudowane), związku z czym obsługuje ogromną liczbę architektur Table of Hardware. Tworzony z myślą o uwolnieniu potencjału, który jest ograniczany przez oryginalny soft na urządzeniach typu SOHO. Praktycznie możemy go zainstalować na każdym dostępnym routerku na rynku 🙂

Squid funkcje serwera pośredniczącego

0.1. Cel

W dniu pierwszego kwietnia:

  • Wszystkie strony po http(80) w pewnych przedziałach czasowych mają tylko otwierać wybrane przez nas strony internetowe 🙂 /li>

0.2. Użyte Oprogramowanie do zadania

  • OpenWrt Chaos Calmer 15.05.1
  • Proxmox Virtual Environment 4.2-2
  • TigerVNC Viewer 64-bit v1.7.1
  • Perl 5.20.2
  • crontab

1. Przygotowanie sprzętu lub środowiska

Zrobimy to na dwa sposobu:

  • Na żywca 🙂 Uwielbiam ten zwrot 🙂 ( chodzi o wspinaczkę zboczuchy )
  • Wirtualnie, gdy na przykład, nie chcemy w tej chwil mieszać na routerku, a chcemy sprawdzić czy to w ogóle działa 🙂 .

Opcja 1 – OpenWrt na routerku WRT

[TODO]

Opcja 2 – OpenWrt na proxmoxie ( wirtualizacja )

Akurat jestem z tych osób, które nie przepadają za kolorowym web GUI, wiec bedę przedstawiał jak to zrobić z konsoli. A więc logujemy sie po ssh do naszego serwera proxmox( platforma wirtualizacyjna) i zaczynam od stworzenia dysku i maszyny wirtualnej:

# ściągamy iso openwrt cd /var/lib/vz/template/iso wget https://downloads.openwrt.org/chaos_calmer/15.05/x86/generic/openwrt-15.05-x86-generic-combined-ext4.img.gz gunzip openwrt-15.05-x86-generic-combined-ext4.img.gz # przygotujemy dysk lvcreate -L 2G -n vm-202-disk-1-raw Data-Storage dd if=openwrt-15.05-x86-generic-combined-ext4.img of=/dev/Data-Storage/vm-202-disk-1-raw # tworzymy maszyne i ją stawiamy qm create 202 --balloon 256 --memory 256 --ostype l24 --ide1 /dev/Data-Storage/vm-202-disk-1-raw --net0 bridge=vmbr0,e1000=11:34:33:32:31:32 --net1 bridge=vmbr1,e1000=12:34:33:32:31:32 qm start 202

Do pełnego szczęścia potrzebujemy dostępu do ekranu, potrzebujemy przekierowania qm vncproxy
# Na serwerze apt-get install openbsd-inetd echo "59004 stream tcp nowait root" >> /etc/inetd.conf /etc/init.d/openbsd-inetd restart # Połączenie się z maszyną przez vnc vncviewer ip_proxmoxa:59004 # akceptujemy certy # podajemy nazwa_uzytkownika@pam i hasło

łola 🙂
openwrt 15.5 welcome motd

2. Instalacja i konfiguracja

Okey, zakładamy ze mamy juz dostęp do urządzenia po www lub przez vnc. Pierwsze co musimy zrobić to ustawić hasło(passwd). Po tym możemy przejść do dalszego działania, logując sie po ssh (root/hasło).

Każdy routerk na openWRT domyślnie na wanie ma odpalony server dhcpcd i wycięty ruch po www z storny wanu.
Jeśli takiej konfiguracji nie oczekujemy, musimy to zmienić:

W moim przypadku. W celu dodania statycznego adresu ip na wanie edytujemy pliki i dodajemy:
vim /etc/config/network

config interface 'wan' option ifname 'eth1' option proto 'static' option ipaddr '123.123.12.246' option netmask '255.255.255.0' option gateway '123.123.12.254'

I włączenie www dla świata od strony wanu dodajemy regułę:
vim /etc/config/firewall
config rule option name Allpw-80-for-wan option src wan option proto tcp option dest_port 80 option target ACCEPT option family ipv4
/etc/config/firewall

I restarujemy usługę firewall i network:

echo "nameserver 8.8.8.8" >> /etc/resolv.conf /etc/init.d/network reload /etc/init.d/firewall reload

2.1 Instalacja Squida i konfiguracja

Instalujemy przez menadżera pakietów potrzebne zabawki:

opkg update opkg install ca-certificates opkg install squid opkg install perl perlbase-cpan

Nadpisujemy plik konfiguracji squida:
/etc/squid/suquid.conf

acl localnet src 192.168.1.0/24 http_access allow localnet http_access allow localhost http_port 3128 transparent url_rewrite_program /etc/squid/rewrite.pl
squid.conf

Tworzymy skrypt do podmiany URL w perlu:
/etc/squid/rewrite.pl

#!/usr/bin/perl use Time::Local; $| = 1; @months = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ); @days = qw(Sun Mon Tue Wed Thu Fri Sat Sun); #($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(); while (<>) { my @elems = split; my $url = $elems[0]; ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(); $min = $min+0; # hej perl, trakuj to jak int if ( $min gt 21 && $min lt 23 ) { if ($url =~ m/.*radiomaryja\.pl.*/ ) { print "$url\n"; }else { print "http://www.radiomaryja.pl\n"; } }elsif ( $min gt 11 && $min lt 13 ){ if ($url =~ m/.*policja\.pl.*/ ) { print "$url\n"; }else { print "http://www.policja.pl\n"; } }else { print "$url\n" } }
rewrite.pl

Tworzymy skrypt do uruchomienia i wyłączenia squida po 24h, który bedzie uruchamiany z crontaba
/root/squid.sh

#!/bin/ash echo "strating squid" /etc/init.d/squid start iptables -t nat -I PREROUTING -i br-lan -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128 echo "sleeping for 24h" sleep $((60*60*24)) echo "stoping squid" iptables -t nat -D PREROUTING -i br-lan -p tcp -m tcp --dport 80 -j REDIRECT --to- ports 3128 /etc/init.d/squid stop
squid.sh

Dodajemy regułkę do crona, która będzie wywoływała skrypt raz rocznie pierwszego kwietnia.

chmod +x squid.sh /etc/init.d/cron start echo "1 0 1 4 * /root/squid.sh 1> /dev/null" >> /etc/crontabs/root

3. Finał

Delikwent chce otworzyć stronę onet.pl, a tu radio maryja go wita 🙂
squid-fake-onet.pl

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

This site uses Akismet to reduce spam. Learn how your comment data is processed.