{"id":1589,"date":"2013-08-01T08:02:29","date_gmt":"2013-08-01T07:02:29","guid":{"rendered":"http:\/\/www.javiercarrasco.es\/?p=1589"},"modified":"2013-08-01T08:02:29","modified_gmt":"2013-08-01T07:02:29","slug":"proxy-transparente-con-squid-dhcp-en-ubuntu-13-04-32-bits","status":"publish","type":"post","link":"https:\/\/www.javiercarrasco.es\/?p=1589","title":{"rendered":"Proxy transparente con Squid + DHCP en Ubuntu 13.04 32 bits"},"content":{"rendered":"<p><a href=\"http:\/\/vps-1289c3eb.vps.ovh.net\/wp-content\/uploads\/2013\/07\/Ubuntu1304.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-1594\" alt=\"Ubuntu1304\" src=\"http:\/\/vps-1289c3eb.vps.ovh.net\/wp-content\/uploads\/2013\/07\/Ubuntu1304.png\" width=\"141\" height=\"137\" \/><\/a>Bueno, este mes de julio he dispuesto de m\u00e1s tiempo para poder instalar y configurar en una de las aulas de inform\u00e1tica el ordenador del profesor como <strong>PROXY TRANSPARENTE<\/strong> y servidor <strong>DHCP<\/strong> en <strong>Ubuntu 13.04 32 bits<\/strong>.<\/p>\n<p>Para este caso dispongo de un servidor con dos tarjetas de red, una de ellas ser\u00e1 la que est\u00e9 conectada al <em>router<\/em> que nos da acceso a Internet (<strong>eth0<\/strong>) y la otra estar\u00e1 de cara al aula, la red interna (<strong>eth1<\/strong>).<\/p>\n<p>En primer lugar debemos configurar nuestras interfaces de red, la primera, <strong>eth0<\/strong> se configurar\u00e1 por DHCP desde el <em>router<\/em>, y la segunda, <strong>eth1<\/strong>, tendr\u00e1 una IP est\u00e1tica a nuestra elecci\u00f3n, para mi caso 192.168.0.1, como puerta de enlace la misma y DNS para navegar.<\/p>\n<h2><strong>DHCP<\/strong><\/h2>\n<p>Una vez configuradas las tarjetas de red, empezamos con el DHCP. Para instalar ejecutamos desde una consola el siguiente comando.<\/p>\n<pre>$ sudo apt-get install isc-dhcp-server<\/pre>\n<p>En algunos casos puede ser que funcione <code>dhcp3-server<\/code> (obsoleto) en vez de <code>isc-dhcp-server<\/code>.<\/p>\n<p>Seguidamente debemos especificar la interfaz por la que serviremos las direcciones IP a nuestros clientes, recordar, la interfaz interna. Editamos el fichero <code>\/etc\/default\/isc-dhcp-server<\/code> con nuestro editor favorito y buscamos la opci\u00f3n <strong>INTERFACES<\/strong> para indicar cual ser\u00e1 la nuestra.<\/p>\n<pre>$ sudo gedit \/etc\/default\/isc-dhcp-server<\/pre>\n<p>Dej\u00e1ndolo como se muestra a continuaci\u00f3n.<\/p>\n<pre># Defaults for isc-dhcp-server initscript\n# sourced by \/etc\/init.d\/isc-dhcp-server\n# installed at \/etc\/default\/isc-dhcp-server by the maintainer scripts\n\n#\n# This is a POSIX shell fragment\n#\n\n# Path to dhcpd's config file (default: \/etc\/dhcp\/dhcpd.conf).\n#DHCPD_CONF=\/etc\/dhcp\/dhcpd.conf\n\n# Path to dhcpd's PID file (default: \/var\/run\/dhcpd.pid).\n#DHCPD_PID=\/var\/run\/dhcpd.pid\n\n# Additional options to start dhcpd with.\n#\tDon't use options -cf or -pf here; use DHCPD_CONF\/ DHCPD_PID instead\n#OPTIONS=\"\"\n\n# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?\n#\tSeparate multiple interfaces with spaces, e.g. \"eth0 eth1\".\nINTERFACES=\"eth1\"<\/pre>\n<p>Ahora debemos configurar los par\u00e1metros del servicio DHCP, para eso vamos a <code>\/etc\/dhcp<\/code> y antes de nada hacemos un <em>backup<\/em> de <code>dhcpd.conf<\/code>.<\/p>\n<pre>$ sudo cp dhcpd.conf dhcpd.conf.original<\/pre>\n<p>Y editamos el fichero.<\/p>\n<pre>$ sudo gedit dhcpd.conf<\/pre>\n<p>Lo podemos borrar por completo y a\u00f1adir \u00fanicamente nuestra configuraci\u00f3n, aqu\u00ed dejo la que he utilizado yo para el aula.<\/p>\n<pre>option domain-name \"server-inf01.public\";\noption domain-name-servers ns1.server-inf01.public, ns2.server-inf01.public;\n\ndefault-lease-time 600;\nmax-lease-time 7200;\n\n# AulaInformatica\nsubnet 192.168.0.0 netmask 255.255.255.0 {\n\trange 192.168.0.10 192.168.0.40;\n\toption domain-name-servers tu_DNS1, tu_DNS2;\n\toption domain-name \"inf01.server.public\";\n\toption routers 192.168.0.1;\n\toption broadcast-address 192.168.0.255;\n\tdefault-lease-time 600;\n\tmax-lease-time 7200;\n}<\/pre>\n<p>Guardamos y ya podemos reiniciar el servicio y comprobar.<\/p>\n<pre>$ sudo service isc-dhcp-server restart<\/pre>\n<p>En ocasiones, puede ser que necesitemos hacer <strong>reservas<\/strong> de direcciones IP, asignar la misma IP siempre al mismo equipo. En el mismo fichero de configuraci\u00f3n, <code>\/etc\/squid\/dhcpd.conf<\/code>, podemos a\u00f1adir las siguientes l\u00edneas.<\/p>\n<pre>#Reservas\nhost inf01-13 {\n\thardware ethernet 00:1d:60:96:53:85;\n\tfixed-address 192.168.0.13;\n\toption routers 192.168.0.1;\n\toption domain-name \"inf01.server.public\";\n}<\/pre>\n<p>Deberemos tener este conjunto de l\u00edneas por cada una de las reservas que queramos tener.<\/p>\n<p>Ya tenemos el segundo paso terminado.<\/p>\n<h2><strong>PROXY TRANSPARENTE SQUID<br \/>\n<\/strong><\/h2>\n<p>En primer lugar debemos instalar Squid en nuestra m\u00e1quina, desde un terminal ejecutamos el siguiente comando.<\/p>\n<pre>$ sudo apt-get install squid3<\/pre>\n<p>El siguiente paso ser\u00e1 configurar nuestro Squid, editamos el fichero <code>squid.conf<\/code> que encontraremos en <code>\/etc\/squid3<\/code>.<\/p>\n<pre>$ sudo gedit \/etc\/squid3\/squid.conf<\/pre>\n<p>Deberemos modificar las siguientes opciones.<\/p>\n<pre>http_port 3128<\/pre>\n<p>por esta otra<\/p>\n<pre>http_port 192.168.0.1:3128 transparent<\/pre>\n<p>3128 es el puerto de Squid y debemos indicar la direcci\u00f3n IP del servidor, la que se encuentre en la parte interna.<\/p>\n<p>Si nuestra m\u00e1quina tiene suficiente memoria, le quitamos la almohadilla a la opci\u00f3n <code>cache_men<\/code>, y utilizamos un valor coherente a nuestra m\u00e1quina, en mi caso la he dejado como se muestra.<\/p>\n<pre>cache_mem 512 MB<\/pre>\n<p>Buscamos la opci\u00f3n <code>cache_dir<\/code> y la ajustamos como en la siguiente l\u00ednea, aunque aqu\u00ed los valores de cach\u00e9 depender\u00e1n de nuestras preferencias y m\u00e1quina.<\/p>\n<pre>cache_dir ufs \/var\/spool\/squid3 2048 16 256<\/pre>\n<p>Y activamos las siguientes opciones, para asegurar que ning\u00fan usuario pueda acceder a los recursos gestionados por Squid.<\/p>\n<pre>cache_effective_user proxy\ncache_effective_group proxy<\/pre>\n<p>Descomentamos la opci\u00f3n <code>half_closed_clients<\/code> y la dejamos en <code>off<\/code>, esto permitir\u00e1 a Squid cerrar las peticiones de los clientes que se queden a medias cuando cierran la conexi\u00f3n TCP.<\/p>\n<pre>half_closed_clients off<\/pre>\n<p>Ahora limitamos el tama\u00f1o m\u00e1ximo de los objetos que se guardar\u00e1n en memoria, esto puede ahorrarnos problemas con el tama\u00f1o de la cach\u00e9. Descomentamos la siguiente l\u00ednea y la dejamos en 1024 KB.<\/p>\n<pre>maximum_object_size 1024 KB<\/pre>\n<p>Tambi\u00e9n vamos a indicar cuando debe Squid vaciar la cach\u00e9, esto nos permitir\u00e1 un mejor mantenimiento. Descomentamos las siguientes l\u00edneas.<\/p>\n<pre>cache_swap_low 90\ncache_swap_high 95<\/pre>\n<p>En mi caso dejo los valores que nos dan por defecto. Como \u00faltima modificaci\u00f3n en las opciones de configuraci\u00f3n de Squid, buscamos la opci\u00f3n <code>memory_pools<\/code>, la descomentamos y la ponemos en <code>off<\/code>.<\/p>\n<pre>memory_pools off<\/pre>\n<p>Esta opci\u00f3n, har\u00e1 que Squid libere la memoria RAM que no est\u00e9 utilizando.<\/p>\n<p>Por \u00faltimo, tras la siguiente l\u00ednea,<\/p>\n<pre>#\n# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS\n#<\/pre>\n<p>A\u00f1adiremos la regla para permitir el acceso a Internet de nuestra red interna.<\/p>\n<pre>acl mi_red src 192.168.0.0\/24\nhttp_access allow mi_red<\/pre>\n<p>Y con esto ya podemos reiniciar Squid.<\/p>\n<pre>$ sudo service squid3 restart<\/pre>\n<p><strong>IPTABLES<\/strong><\/p>\n<p>Ya s\u00f3lo nos faltan las IPTABLES, estas son muy duras de entender y no es que las domine, pero podemos encontrar varios <em>scripts<\/em> por <a href=\"http:\/\/www.google.es\/#lr=lang_es&amp;safe=active&amp;tbs=lr:lang_1es&amp;sclient=psy-ab&amp;q=squid3+iptables&amp;oq=squid3+ip&amp;gs_l=hp.3.0.0j0i30l3.62353.64663.2.65877.9.9.0.0.0.0.133.905.6j3.9.0....0...1c.1.22.psy-ab..1.10.959.IkVljHWbldE&amp;pbx=1&amp;bav=on.2,or.r_qf.&amp;bvm=bv.49641647,d.ZWU&amp;fp=1ae0c974c9c08b00&amp;biw=1231&amp;bih=899\" target=\"_blank\" rel=\"noopener\">internet<\/a> que hacen lo que necesitamos.<\/p>\n<p>Yo me he quedado con el siguiente que se adapta bastante a lo que necesito.<\/p>\n<pre>#!\/bin\/sh\n# IP del servidor SQUID\nSQUID_SERVER=\"192.168.0.1\"\n# Interface conectada a Internet\nINTERNET=\"eth0\"\n# Interface interna\nLAN_IN=\"eth1\"\n# Puerto Squid\nSQUID_PORT=\"3128\"\n\n# Limpia las reglas anteriores\niptables -F\niptables -X\niptables -t nat -F\niptables -t nat -X\niptables -t mangle -F\niptables -t mangle -X\n# Carga los modulos IPTABLES para NAT e IP con soporte conntrack\nmodprobe ip_conntrack\nmodprobe ip_conntrack_ftp\necho 1 &gt; \/proc\/sys\/net\/ipv4\/ip_forward\n# Politica de filtro por defecto\niptables -P INPUT DROP\niptables -P OUTPUT ACCEPT\n# Acceso ilimitado a loop back\niptables -A INPUT -i lo -j ACCEPT\niptables -A OUTPUT -o lo -j ACCEPT\n# Permite UDP, DNS y FTP pasivo\niptables -A INPUT -i $INTERNET -m state --state ESTABLISHED,RELATED -j ACCEPT\n# Establece el servidor como router para la red\niptables --table nat --append POSTROUTING --out-interface $INTERNET -j MASQUERADE\niptables --append FORWARD --in-interface $LAN_IN -j ACCEPT\n# acceso ilimiato a la LAN\niptables -A INPUT -i $LAN_IN -j ACCEPT\niptables -A OUTPUT -o $LAN_IN -j ACCEPT\n# Redirige las peticiones de la red interna hacia el proxy\niptables -t nat -A PREROUTING -i $LAN_IN -p tcp --dport 80 -j DNAT --to $SQUID_SERVER:$SQUID_PORT\n# Redirige la entrada al proxy\niptables -t nat -A PREROUTING -i $INTERNET -p tcp --dport 80 -j REDIRECT --to-port $SQUID_PORT\n# Registrar todo\niptables -A INPUT -j LOG\niptables -A INPUT -j DROP<\/pre>\n<p>Pod\u00e9is encontrar el original <a href=\"http:\/\/www.cyberciti.biz\/tips\/linux-setup-transparent-proxy-squid-howto.html\" target=\"_blank\" rel=\"noopener\">aqu\u00ed<\/a>.<\/p>\n<p>El inconveniente est\u00e1 en que las IPTABLES debes ejecutarlas cada vez que arranquemos la m\u00e1quina, por eso crearemos un <em>script<\/em> y haremos que se ejecute siempre al iniciar el equipo.<\/p>\n<p>Copiamos el script en <code>\/etc\/init.d\/<\/code>.<\/p>\n<pre>$ sudo cp iptables_proxy.sh \/etc\/init.d<\/pre>\n<p>Cambiamos el propietario y los permisos del script.<\/p>\n<pre>$ sudo chown root:root iptables_proxy.sh\n$ sudo chmod 700 iptables_proxy.sh<\/pre>\n<p>A continuaci\u00f3n editamos el fichero <code>\/etc\/init.d\/rc.local<\/code>.<\/p>\n<pre>$ sudo gedit \/etc\/init.d\/rc.local<\/pre>\n<p>Y a\u00f1adimos las siguientes l\u00edneas bajo <code>### END INIT INFO<\/code>.<\/p>\n<pre>### END INIT INFO\n\ncd \/etc\/init.d\n.\/iptables_proxy.sh<\/pre>\n<p>Ya podremos reiniciar nuestra m\u00e1quina y comprobar que se ejecuta y realiza su funci\u00f3n correctamente, espero os sirva de ayuda.<\/p>\n<p>Au!!<\/p>\n<p><strong>Fuentes:<\/strong><br \/>\n<a title=\"Sebest\" href=\"http:\/\/www.sebest.com.ar\/?q=node\/55\" target=\"_blank\" rel=\"noopener\">Sebest<\/a><br \/>\n<a title=\"Ubuntu Server Guide\" href=\"http:\/\/ubuntuserverguide.com\/2012\/06\/how-to-setup-squid3-as-transparent-proxy-on-ubuntu-server-12-04.html\" target=\"_blank\" rel=\"noopener\"> Ubuntu Server Guide<\/a><br \/>\n<a title=\"tldp\" href=\"http:\/\/www.tldp.org\/HOWTO\/TransparentProxy.html\" target=\"_blank\" rel=\"noopener\"> tldp.org<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bueno, este mes de julio he dispuesto de m\u00e1s tiempo para poder instalar y configurar en una de las aulas de inform\u00e1tica el ordenador del profesor como PROXY TRANSPARENTE y servidor DHCP en Ubuntu 13.04 32 bits. Para este caso dispongo de un servidor con dos tarjetas de red, una de ellas ser\u00e1 la que [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[30,37,68,115,120,125],"class_list":["post-1589","post","type-post","status-publish","format-standard","hentry","category-cuaderno-linux","tag-comandos","tag-dhcp","tag-iptables","tag-scripts","tag-squid3","tag-ubuntu"],"_links":{"self":[{"href":"https:\/\/www.javiercarrasco.es\/index.php?rest_route=\/wp\/v2\/posts\/1589","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javiercarrasco.es\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javiercarrasco.es\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javiercarrasco.es\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javiercarrasco.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1589"}],"version-history":[{"count":0,"href":"https:\/\/www.javiercarrasco.es\/index.php?rest_route=\/wp\/v2\/posts\/1589\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.javiercarrasco.es\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1589"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javiercarrasco.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1589"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javiercarrasco.es\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1589"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}