Skip to content
# usage prog hostname
from socket import gethostbyname
hostname = sys.argv[1]
ip = gethostbyname(hostname)
print("%s"%(ip,))

file:///usr/share/doc/python3-docs/html/library/socket.html

other functions

python3-docs

DNS

dns es protocolo binario

Dns utiliza el paquete bind , que este contiene el servicio named y a dicho servicio se puede interactuar en caliente con el comando rndc.

Algunas opciones de named.

named -c config-file
named -d debug-level [0-15]
named -f -g  logs en foreground   convinado con debug level puede ayudar
named -L /dev/sdtderr
named -u (user)  por defecto named

Configuración

/etc/named/
/var/named/

Utilidades para resoluciones de dns.

dnf install -y bind-utils

nslookup y host por defecto no miran el archivo /etc/hosts

dig yahoo.es +short
# poner por defecto salida corta
~/.digrc
+short
dig -x 8.8.8.8 @server

Documentación oficial

Al instalar el paquete bind, este descarga toda su documentación

doc original
/usr/share/doc/bind/Bv9ARM.html
/usr/share/doc/bind/Bv9ARM.pdf
ejemplos
/usr/share/doc/bind/shample

Estadísticas

Generar estadísticas del trafico del dns

Siempre que este la siguiente opción en /etc/named.conf

...
    statistics-file "/var/named/data/named_stats.txt";
...
systemctl start named # con el servicio activo
rndc stats    # activar estadisticas

observar resultado en el archivo indicado cat /var/named/data/named_stats.txt

acl

Definir un alias a una o varias series de ip

acl aula {10.200.243.0/24;};
options {
    listen-on port 53 { 127.0.0.1; 10.200.243.209; };
    directory     "/var/named";
    dump-file     "/var/named/data/cache_dump.db";
    statistics-file "/var/named/data/named_stats.txt";
    memstatistics-file "/var/named/data/named_mem_stats.txt";
    allow-query     { localhost; aula; };

Reenvío forwarder

forward only;
forwarders {10.1.1.200;};    
recursion yes;

La opción de forward , con only mandara automáticamente las peticiones al servidor externo sin intentarlas resolver el mismo, se puede añadir first opción por defecto y si no encuentra respuesta exteriormente busca en las zonas internas.

Barrar cache

rndc flush

Zonas

Un fichero de zona es una lista de resource-records. que llega a ser una lista de resoluciones ip-dominio y viceversa.

En el archivo named.conf se definen dos zonas la directa y la inversa:

# directa
zone "lacasitos.com" IN {
    type master;
    file "lacasitos.com.zone";
}
# inversa
zone "243.200.10.in-addr.arpa" IN {
    type master;
    file "lacasitos.com.rev.zone";
}

Importante: Zona directa se define con el dominio principal, esta se encargara de resolver dominios a ip. mientras que la zona inversa se define con la ip del servidor del revés hasta el octeto cambiante seguido de in-addr.arpa, esta zona se encarga de las resoluciones ip a dominio.

los archivos de zona si se definen con ruta parcial se devén encontrar en el directorio establecido por directory "/var/named"; .

Las lineas de archivos de zona se definen por los elementos name, ttl, record class, record type, record data si no se especifica un campo se recoge el definido global mente al inicio del archivo o el de la linea anterior.

  • name
  • TTL tiempo de vida
  • record class clase de registro
  • record type tipo de registro SOA, A, AAAA, CNAME, PTR, MX ...
  • record data los datos de registro podrán consistir de uno o mas elementos de información dependiendo de el tipo de registro.

Como mínimo un archivo de zona debe especificar el inicio de autoridad (SOA) con el nombre de servidor maestro la dirección de correo de la persona responsable y la lista de argumentos de tiempo de caducidad.

# origin    class    type    server-fqdn                 mail                    arguments
@            IN        SOA        jorge.lacasitos.com.    mailhost.lacasitos.com. ( 0 1D 1H 1W    3H )

lacasitos.com.zone

; file  lacasitos.com
$ORIGIN lacasitos.com.
$TTL 1D
@    IN    SOA    jorge.lacasitos.com.    mailhost.lacasitos.com. (
                    0    ; serial
                    1D    ; refresh
                    1H    ; retry
                    1W    ; expire
                    3H )    ; minimum

; DNS NS Records
@        IN        NS        jorge.lacasitos.com.

; DND A records
marc    IN        A        10.200.243.208
jorge    IN        A        10.200.243.209
pau        IN        A        10.200.243.210
supertux    IN    CNAME    jorge

Características de archivo

  • El punto final especifica que es un nombre completo en el caso de no estar se le añadirá el dominio seguidamente.
  • @ IN NS jorge.lacasitos.com.= @ IN NS jorge
  • @ IN NS jorge.lacasitos.com = @ IN NS jorge.lacasitos.com.lacasitos.com.
  • Si no se define $ORIGIN se cogerá el valor del nombre de zona
  • La @ es substituye por el valor de ORIGIN
  • El nombre del servidor a de estar definido tanto en el SOA, NS, A .

El archivo de zona inversa los registros SOA y NS serán exactamente iguales, y añadiremos la lista de resoluciones inversas con el octeto/s faltan-te en el nombre de la zona seguido de su dominio.

lacasitos.com.rev.zone

; file zone 243.200.10
$TTL 1D
@    IN SOA    jorge.lacasitos.com. mailhost.lacasitos.com. (
                    0    ; serial
                    1D    ; refresh
                    1H    ; retry
                    1W    ; expire
                    3H )    ; minimum

; DNS NS records
@    NS    jorge.lacasitos.com.

; DNS PTR records
208    IN    PTR        marc.lacasitos.com.
209    IN    PTR        jorge.lacasitos.com.
210    IN    PTR        pau.lacasitos.com.

backup zonas

Se puede hacer un backup de zonas y visualizar las zonas con:

rndc dumpdb -zones
less /var/named/data/cache_dump.db
  • Este archivo puede variar de localización según el parámetro dump-file en el archivo named.conf.

O a una sola zona con:

# directa
named-compilezone -o backup_zona.txt informatica.escoladeltreball.org informatica.escoladeltreball.org.zone 
# inversa
named-checkzone -o backup_zona.txt 200.10.in-addr.arpa informatica.escoladeltreball.org.rev.zone  

Generate

En ocasiones tenemos muchos registros muy similares y repetitivos, con generate podemos ahorrar de escribir múltiples registros y escribir solo uno.

$ORIGIN informatica.escoladeltreball.org.
$TTL 1D
@    IN    SOA    jorge.informatica.escoladeltreball.org.    adminmail.informatica.escoladeltreball.org. 0 1D 1H 1W 3H 

; DNS NS Records
@        IN        NS        jorge.informatica.escoladeltreball.org.

; DND A records
jorge    IN        A        10.200.243.209

; Eestacions aula N2H  (30 ordinadors)
h01 IN A 10.200.242.201
h02 IN A 10.200.242.202
h03 IN A 10.200.242.203
...

Es lo mismo que:

$ORIGIN informatica.escoladeltreball.org.
$TTL 1D
@    IN    SOA    jorge.informatica.escoladeltreball.org.    adminmail.informatica.escoladeltreball.org. 0 1D 1H 1W 3H 

; DNS NS Records
@        IN        NS        jorge.informatica.escoladeltreball.org.

; DND A records
jorge    IN        A        10.200.243.209

; Eestacions aula N2H  (30 ordinadors)
$GENERATE 1-30 h${0,2,d} IN A 10.200.242.2${0,2,d}

Sintaxis :$GENERATE range lhs[ttl] [class]type rhs[comment]

  • range acepta saltos en la secuencia 2-10/2 suma de dos en dos

${offset[,width[,base]]}

Por defecto la generación es ${0,0,d} es decir {0 valores a sumar o restar, 0 longitud del valor, base decimal}.

Http

una transmision consiste en 2 mensajes

primera linea especial seguida de 0 o mas cabeceras

GET /path/file HTTP/1.0 metodo get es siempre sin cuerpo, final de linea es cd y rf \r\n

curl -s -D /dev/stderr http://seat.es > /dev/null
HTTP/1.1 301 Moved Permanently
Date: Tue, 19 Nov 2019 10:57:53 GMT
Location: https://www.seat.es/
Content-Length: 228
Content-Type: text/html; charset=iso-8859-1
Set-Cookie: TS0177e393=012f656eaa20722a90edef1d916342e21c1021f54ea8f278cfb73d1720c7998c2394aea1eb5368826345d7be0f88e1232fd6f8f377; Path=/

/usr/share/doc/python3-docs/html/index.html

Directorios

/usr/share/httpd/manual/index.html # manual
/etc/httpd/conf/httpd.conf # configuración
/etc/httpd/modules  # modulos instalados
/var/www/html # directorio publicación por defecto

logs

sudo tail -f /etc/httpd/logs/error_log
sudo tail -f /etc/httpd/logs/access_log

Configuración

include a directorio en el home

apachectl -t verifica ficheros de configuración

execcgi quitar si no quiero ejecutables

Alias

https://httpd.apache.org/docs/2.4/es/mod/mod_alias.html

https://httpd.apache.org/docs/2.4/es/mod/core.html#options

Alias "/python" "/usr/share/doc/python3-docs/html"
<Directory "/usr/share/doc/python3-docs/html">
    Options +Indexes -ExecCGI -FollowSymLinks
    Require all granted
</Directory>

Userdir

https://httpd.apache.org/docs/2.4/es/mod/mod_userdir.html#userdir

https://httpd.apache.org/docs/2.4/es/howto/public_html.html

<IfModule mod_userdir.c>
    UserDir  "public_html"
    UserDir enabled isx47787241
</IfModule>

<Directory "/home/users/inf/hisx2/isx47787241/public_html">
    AllowOverride FileInfo AuthConfig Limit Indexes
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    Require method GET POST OPTIONS
</Directory>

verificar que tenemos los permisos de acceso, almenos 711 hasta el home. y el directorio public_html 755.

Ya podemos acceder desde localhost/~jorge

Para evitar poner la tilde, usar la expresión regular siguiente en la configuración.

RewriteEngine on 
RewriteRule  ^/personal/([a-z0-9]+)         /~$1    [R]

Includes

https://httpd.apache.org/docs/2.4/es/mod/mod_include.html

Alias "/data" "/home/users/inf/hisx2/isx47787241/public_data"
<Directory "/home/users/inf/hisx2/isx47787241/public_data">
    AddType text/html .html
    AddOutputFilter INCLUDES;DEFLATE .html
    Options +Indexes -ExecCGI -FollowSymLinks +IncludesNoExec
    Require all granted
</Directory>
public_data
├── head.html
└── index.html

index.html

 <!--#include file="head.html" --> 
 <!--#fsize file="head.html" -->
 <p>hola mundo</p>
 <pre> <!--#printenv --> </pre> 

VirtualHost

https://httpd.apache.org/docs/current/mod/core.html#virtualhost

https://httpd.apache.org/docs/2.4/vhosts/examples.html

Virtualhost permite servir diferentes paginas desde un mismo host, esto lo hace mirando que tipo de servername le llega en la url, y desde ahí, distribuye la pagina adecuada.

Añadir a /etc/hosts o dns la ip de virtual host y el alias.

...
192.168.88.2    jorge.com 

añadir sede virtual al archivo /etc/httpd/conf/httpd.conf

# sede virtal
<VirtualHost 192.168.88.2:80>
    ServerName jorge.com
    DocumentRoot "/home/debian/apache/vhost"
</VirtualHost>

# permisos de acceso al directorio
<Directory "/home/debian/apache/vhost">
    Options +Indexes -ExecCGI -FollowSymLinks
    Require all granted
</Directory>

Indexes

La opción Indexes permite en el caso de no encontrar un archivo index.html mostrar la página como si fuera un ftp. Es necesario comentar o renombrar el archivo /etc/http/conf.d/welcom.conf ya que por defecto, si no encuentra la página index.html lo redirige a la página de muestra apache2.

<Directory "/home/users/inf/hisx2/isx47787241/public_data">
    AddType text/html .html
    AddOutputFilter INCLUDES;DEFLATE .html
    Options +Indexes -ExecCGI -FollowSymLinks +IncludesNoExec
    Require all granted
</Directory>

Directorio de ejecutables

ExecCGI permite ejecutar archivos y ScriptAlias define un directorio de ejecutables.

# conf directorio ejecutable
ScriptAlias "/a" "/home/users/inf/hisx2/isx47787241/apache/scripts"
<Directory "/home/users/inf/hisx2/isx47787241/apache/scripts">
    Options +ExecCGI
    AddHandler cgi-script .sh .py
    Require all granted
</Directory>

Mezcla

directorio donde se mezclan archivos ejecutbles con normales html.

Alias "/app" "/home/users/inf/hisx2/isx47787241/apache/app1"
<Directory "/home/users/inf/hisx2/isx47787241/apache/app1">
    Options +Indexes +ExecCGI -FollowSymLinks
    AddHandler cgi-script .sh 
    Require all granted
</Directory>

http-referer

get acaba en cr lf y post en cos body

tipo mime de post CONTENT_TYPE=application/x-www-form-urlencoded

get

curl --silent --dump-header /dev/stderr http://www.escoladeltreball.org > /dev/null

post

clear;curl --silent --dump-header --data -d @filename http://localhost/app2/script/dump.py

Auth usuarios

Generar archivo de contraseñas de usuarios.

htpasswd -b -c passwd pepe contrasena
Adding password for user pepe
htpasswd -b  passwd pepe2 contrasena
Adding password for user pepe2

configuración directorio

Alias "/data" "/home/users/inf/hisx2/isxXXXXXXX/public_data"
<Directory "/home/users/inf/hisx2/isxXXXXXXX/public_data">
    Options +Indexes -ExecCGI -FollowSymLinks
    Authtype Basic
    AuthName "Acces a usuarios"
    AuthBasicProvider file
    AuthUserFile /home/users/inf/hisx2/isxXXXXXXX/apache/passwd
    Require valid-user
</Directory>

Auto detectar idioma

Con esta configuración el navegador recogerá el index.html con el idioma predefinido por el mismo.

idiomas
├── index.html.en
├── index.html.es
└── index.html.ca

Las opciones que hacen funcioar esto son +MultiViews, LanguagePriority, ForceLanguagePriority

Alias "/idiomas" "/home/debian/apache/idiomas"
<Directory "/home/debian/apache/idiomas">
    LanguagePriority en ca es
    ForceLanguagePriority Fallback
    Options -Indexes -ExecCGI -FollowSymLinks +MultiViews
    Require all granted
</Directory>

Likes

el enlace img llama a un script para ejecutar algo antes de mistrarte la imagen

apache.conf

Alias "/like" "/home/users/inf/hisx2/isx47787241/apache/like"
<Directory "/home/users/inf/hisx2/isx47787241/apache/like">
    AddType text/html .html
    Options +Indexes +ExecCGI -FollowSymLinks -IncludesNoExec
    Require all granted
</Directory>

index.html

<p>hola like</p>
<img src='/cgi-bin/dump.sh'/>

dump.sh

#!/usr/bin/bash
echo $REMOTE_ADDR >> /var/likes/bigdata
echo 'Content-Type: image/png; charset=UTF-8'
echo
cat /home/users/inf/hisx2/isx47787241/Descargas/index.png
#!/usr/bin/bash
echo $REMOTE_ADDR >> /var/likes/bigdata
echo 'Status: 302'
echo 'Location: https://upload.wikimedia.org/wikipedia/commons/1/13/Facebook_like_thumb.png'
echo