Está en la página 1de 20

COMANDOS

COMANDO FUNCION
date Muestra el día y la hora del sistema
cal Muestra un calendario
who Quien esta conectado en el sistema
whoami Muestra el nombre del usuario
man Muestra una ayuda detallada del comando
clear Borra la pantalla
alias Asigna un nombre a la ejecución de uno o varios comandos
con sus respectivas opciones y argumentos
unalias Elimina el alias especificado
uname Muestra información sobre el sistema operativo
passwd Cambia la contraseña del usuario
history Muestra los comandos utilizados
exit Termina la sesión del usuario
ls Muestra información sobre ficheros y directorios
pwd Muestra la ruta absoluta del directorio donde nos encontramos
mkdir Crea directorio
cd Cambia de directorio
rmdir borra directorios si están vacios
rm Borra ficheros y directorios
cp Copia uno o varios ficheros en otro fichero o en un directorio
mv mueve uno o varios ficheros en otro fichero o en un directorio
file Muestra el tipo de fichero
du Muestra el espacio que ocupa el fichero o directorio
df Muestra el espacio libre en los dispositivos de almacenamiento
y en las particiones montadas
cat Muestra el contenido de los ficheros que se pasen como
argumentos
head Muestra las 10 primeras filas de los ficheros que se le indiquen
tail Muestra las 10 ultimas filas de los ficheros que se le indiquen
wc Muestra el numero de lineas, palabras, caracteres y bytes de
los ficheros que se le indiquen, o el tamaño de la linea mas
larga
more Muestra el contenido de los ficheros pero de forma paginada
less Igual que more pero podemos movernos con las flechas del
cursor
sort Muestra en orden ascendente el contenido de los ficheros que
se le pasen por parámetro
ln Crea un enlace a un fichero o directorio
cut Muestra solo ciertas líneas verticales de los ficheros que se le
pasen como argumento
grep muestra
whereis Localiza los ficheros ejecutables o binarios
which Muestra la ruta absoluta del archivo/s que se le pase/n como
argumento/s
locate Busca archivos dentro del sistema de archivos. Solo puede
hacer búsquedas por nombre de archivo
find Busca ficheros en un arbol de directorios. Muestra el nombre
de los archivos encontrados que se corresponden con cierto
conjunto de criterios
su Cambia de usuario o nos permite ser root
sudo Para ejecutar comandos como si fuesemos root
Adduser Añade usuarios
deluser Borrar usuarios
addgroup Añadir grupo
delgroup Borrar grupo
usermod Modificar usuario
groupmod Modificar grupo
Chown Cambia el propietario de un archivo. También puede cambiar el
grupo
Chgrp Cambia el grupo de un archivo

Ultimo comando y ultimo código producido


echo $_ (ultimo parámetro)

echo $? (ultimo código producido, 0 salió correcto)


Muestra el sumatorio de ficheros por mes

sed "1d" temp.dat | tr -s " " | sort -t" " -k6 | cut -d" " -f6 | uniq -c

Numero de ficheros con los mismos permisos


ls -l /etc | sed "1d" | tr -s " " | sort -t" " -k1 | cut -d" " -f1 | uniq -c

Hacer un fichero inmutable


sudo chattr +i inmutable.txt 

Visualizar un numero de línea de un fichero


sed -n 3p kk.txt

Eliminar una línea de un fichero


sed ‘1d’ kk.txt 
Eliminar de la 8 a las 12
sed ‘8,12d’ kk.txt
la última
sed ‘$d’ kk.txt
Modificar líneas
sed ‘s/cadena1/cadena2/’ fichero
si queremos sustituir todas las apariciones de esa cadena
sed ‘s/cadena1/cadena2/g’ fichero
si queremos que esto último ocurra solo en las líneas que lleven la
palabra Sr
sed ‘/Sr/s/cadena1/cadena2/g’ fichero
Sr puede ser una expresión regular Sr.*
Si es a un rango de líneas ‘5,16s/……’ lo contrario ‘5,16!s/…..’

Ver líneas que NO contengan una palabra


sed ‘/algo/d’ fichero
y al revés, que la contengan
sed ‘/algo/!d’ fichero

Número de ficheros sh en el sistema


sudo find / -name *.sh | wc -l

Mayusculas a Minusculas
usuario=`echo $user|tr [:upper:] [:lower:]`
tr A-Z a-z

Quitar espacios en blanco


usuario=`echo $user|tr –d [:space:]`
tr –d “ “
quitar otro carácter  tr –d ‘:’ etc

Sustituir caracteres
user=`echo $user | sed 'y/ÁáÉéÍíÓóÚú/AaEeIiOoUu/'`

TODO JUNTO
echo $user | tr áéíóú aeiou | tr -d " " | tr A-Z a-z

quitar tabulaciones (solo deja un espacio en blanco)


tr –s “ “

Coger primer campo (para el segundo $2 y así sucesivamente)


du -sh | awk '{ print $1 }'

Eliminar líneas en blanco (es decir que empiezan por $) y comentarios


(empiezan por #)

egrep -v '^(#|$)'

grep –E -v '^(#|$)'

eliminar líneas en blanco de un fichero


grep . fich1.txt > fich2.txt

Quitar comentarios en un fichero


grep -v "#" fich2.txt
Primeras líneas
head –num fichero
Últimas líneas
tail –numero fichero

Random entre 0 y 9
Num=$((RANDOM % 10))

Ordenar fichero por campo


cat /etc/group | sort –t”:” k3n (k3nr reverse)

ordenar columna de fichero


cat /etc/group | cut -d":" -f3 | sort –n (-nr reverso)
Tamaño de archivos en un directorio
du –bsh * #tamaño en Kbytes y bytes de los archivos de un directorio
Ordenados de menor a mayor en bytes
du -bs * | sort -n
du –sh  devuelve el tamaño en megas, kb humanizable

Comando cut con cadenas


alberto@alberto-VirtualBox:~/scripts$ numero=3452
alberto@alberto-VirtualBox:~/scripts$ echo $numero | cut -c 1
3
alberto@alberto-VirtualBox:~/scripts$ echo $numero | cut -c 2
4
alberto@alberto-VirtualBox:~/scripts$ echo ${#numero}
4

Procesos
 ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  1 13:10 ?        00:00:01 /sbin/init 3 splash
por usuario (pongo el espacio para filtrar apariciones en el proceso)
ps -ef | grep "alberto "

FIND

Para buscar en el directorio root (/) archivos (-type) con más de 9 megas (-
size): (directorios –d)

find / -type f -size +9M

por usuario

find $HOME –user nombreUser

Ocultos

find . -name “.*”


Vacios

find / -type f –empty (o –size 0) (size numero bytes, +numero kb, +nºM
megas)

Para buscar todos los archivos con extensión .txt (-iname) abiertos (-atime)
en los últimos dos días:

find / -iname '*.txt' -atime -2

Para buscar todos los archivos modificados o creados (-mtime) en los últimos
dos días:

find / -type f -mtime -2

Para buscar archivos con permisos (-perm) de escritura, lectura y ejecución:

find / -type f -perm 0777

Para buscar un archivo de nombre texto.txt en el directorio activo y un nivel


más abajo (subdirectorio):

find -maxdepth 2 -name texto.txt

FILTROS o TUBERIAS
Las tuberías o filtros se utilizan en una línea de comandos para conectar la
salida estándar de un comando con la entrada estándar de otro. Para ello se
utiliza el carácter “|”.
ls –li | cut –d” “ –f1,2,4

REDIRECCIONAMIENTOS
Cualquier proceso tiene una entrada estándar, stdin, y dos salidas, la salida
estándar, stdout, y la salida de errores, stderr.
Normalmente la entrada estándar, es el teclado y la salida estándar, es la
pantalla. Pero si produce un error la salida por pantalla corresponderá a la
salida de errores
Sin embargo podemos cambiar la entrada o salidas estándar y de errores, por
un fichero, por lo que habrá que usar redireccionamientos.
- “<” redirecciona la entrada estándar sustituyéndola por el archivo que
se le indique
- “>” redirecciona la salida de un proceso al fichero que se le indique,
borrando la información que el fichero contenía.
- “>>” redirecciona la salida de un proceso al fichero que se le indique,
pero añadiéndola al final del fichero, por lo que no borra el contenido.
- “2>” redirecciona la salida de errores de un proceso al fichero que se
le indique, borrando la información que el fichero contenía.
- “2>>” redirecciona la salida de errores un proceso al fichero que se le
indique, pero añadiéndola al final del fichero, por lo que no borra el
contenido.
USUARIOS y GRUPOS
- /etc/passwd: contiene en cada una de sus lineas información sobre
los usuarios. Separados por :
- /etc/shadow: contiene las contraseñas de cada usuarios encriptadas.
- /etc/group: fichero donde se encuentran los grupos definidos en el
sistema
- /etc/gshadow: se guardan las contraseñas de los grupos del sistema
- /etc/skel: directorio que contiene el contenido del directorio de los
nuevos usuarios que se vayan añadiendo al sistema.

PERMISOS
-rwxrwxrwx
drwxrwxrwx
1º tipo de archivo o directorio
2,3,4 permisos para el propietario del archivo o directorio
5,6,7 permisos para el grupo al que pertenece el propietario del archivo o
directorio
8,9,10 permisos para el resto de usuarios
r (read) lectura
w (write) escritura
x (execution) ejecución

chmod para modificar permisos sobre archivos o directorios


1 tiene permiso
0 no tiene permiso
propietario grupo otros
111 110 100
rwx rw- r—
7 6 4
0 000
1 001
2 010
3 011
4 100
5 101
6 110
7 111

SHELL SCRIPTS

VARIABLES
Variable local:
variable=”valor”

mostrar:
echo $variable

Convertir variable local en variable de entorno:


export variable “ó” export variable=”valor”

VARIABLES DE ENTORNO MÁS USADAS


HOME: ruta de nuestro directorio personal
USER: nombre de usuario
SHELL: ruta del interprete de ordenes que se está ejecutando
HOSTNAME: nombre asignado al equipo
TERM: tipo de terminal
LOGNAME: nombre del usuario que ejecuta la shell
PATH: rutas en las que el intérprete busca las ordenes a ejecutar cuando no
especificas donde están.
PWD: directorio de trabajo actual
OLDPATH: guarda el último directorio donde estuvimos

COMANDOS IMPORTANTES
set: muestra las variables locales y las de entorno
env: muestra las variables de entorno
export: exporta una variable local al entorno
unset: elimina una variable
echo: para mostrar una cadena de texto por pantalla, que puede ser el valor de
una variable si lleva el $ delante

SCRIPTS EN LINUX
Es una archivo de texto plano que contiene órdenes o comandos para realizar
una o varias tareas.
Comienzan con la cadena:
#!/bin/bash

Ejemplo:
nano borra.sh
#!/bin/bash
#borra la pantalla
clear
#muestra la fecha
date

Guardar fichero.
Asignar permisos de ejecución: chmod +x borra.sh
Ejecutarlo: ./borra.sh

VARIABLES
Existen unas variables específicas para ser utilizadas dentro de los shell
scripts:

Variable Función
$0 Nombre del shell script
$1,$2…. Parámetros o argumentos posicionales que se introducen
$n desde la linea de comandos
$# Numero de parámetros o argumentos posicionales
$* Variable que recoge el valor de todos los argumentos
$? Valor devuelto por el ultimo comando ejecutado
$$ PID del shell script

Si no queremos introducir los valores desde la linea de comandos, sino que


queremos que el script nos vaya pidiendo los datos de forma interactiva,
debemos usar el comando read: lee un valor por teclado y lo asigna a una
variable
Sintaxis: read nombre_variable

Estructuras de control
Las estructuras de control las usaremos para que, dependiendo de un
determinado valor de una variable o resultado de una condicion, se ejecuten
unos comandos u otros, o bien para que se ejecuten unos comandos un
número determinado de veces, según las expresión que usemos

if-then-fi
if [ condicion ]
then
comando/s
fi

if-then-else-fi
if [ condicion ]
then
comando/s
else
comando/s
fi

if-then-elif-then-else-fi
if [ condicion ]
then
comando/s
elif [ condicion ]
then
comando/s
else
comando/s
fi

case-in-esac
case $variable in
expre1) comando/s;;
expre2) comando/s;;
expre3) comando/s;;
......
*) comando/s;;
esac
Ejemplo de case:
#!/bin/bash
echo MENU DE OPCIONES
echo 1º borrar la pantalla. escribe: borra
echo 2º muestra la fecha. escribe: fecha
echo 3º listar el contenido del directorio. escribe: lista
echo 4º ver las variables de entorno. escribe: entorno
echo si no se cumple ninguna muestra un mensaje
read opcion
case $opcion in
        "borra")clear;;
        "fecha")date;;
        "lista")ls;;
        "entorno")env;;
        *)echo No has elegido ninguna opcion permitida;;
esac

for-in-do-done
for $variable in valores
do
comando/s
done

#!/bin/bash
for i in $( ls ); do
echo item: $i
done
#!/bin/bash
for ((i=100;i<=115;i+=1)); do
echo $i
sleep 1
echo $i > /dev/ttyS1
done
#!/bin/bash
for i in `seq 1 10`;
do
echo $i
done

while-do-done
while [condicion]
do
comando/s
done

Recorrer parámetros
while [ $# -ne 0 ]
do
opera $fichero $1
shift
done
Para leer un de un fichero externo línea a línea
while read line
do
…..
done < fichero.txt

Expresiones condicionales
Para evaluar el valor devuelto por la condición usaremos las siguientes
expresiones dentro de los corchetes [] que representan al comando test, que
realiza la misma función.

Condicion Devuelve verdadero o trae si…..


-f $variable Variable es un fichero
-d $variable Variable es un directorio
-r $variable Tiene permisos de lectura
-w $variable Tiene permisos de escritura
-x $variable Tiene permisos de ejecución
-L $variable Es un enlace simbolico
-e $variable Es un archivo que existe
$var1 –nt var1 es mas reciente que var2
$var2
$var1 –ot var1 es mas antiguo que var2
$var2
-z $variable Variable es una cadena vacia
-n $variable Variable no es una cadena vacia
$var1 = $var2 var1 es una cadena igual a var2
$var1 != $var2 var1 no es igual a var2
-eq Igual
-ne No igual
-lt Menor
-le Menor o igual
-gt Mayor
-ge Mayor o igual
-a ó && AND
-o ó || OR
! NOT
-f $variable Para comprobar si existe un fichero

Cadenas
Descomponer ruta y coger archivo solo  basename path
Fichero=ejemplo.txt
nombre=${fichero%%.*} ejemplo
ext=${fichero##*.} txt
Asignación
nom=valor
Mostrar contenido
echo $nom
tamaño
echo ${#nom}
eliminar espacios en blanco
nombre=`echo $nombre | tr -d ' '`
Cambiar acentos y mayúsculas
nom_user=`echo $nom_user | sed 's/á/a/' | sed 's/é/e/' | sed 's/í/i/' | sed
's/ó/o/' | sed 's/ú/u/'`
#une cadenas y cambia mays por mins
nom_user=`echo $nom1$apell1$apell2 | tr [:upper:] [:lower:]`

Por ejemplo, en la cadena  string=abcABC123ABCabc :


echo ${string:0}  : abcABC123ABCabc
echo ${string:0:1}  : a (primer caracter)
echo ${string:7} :  23ABCabc
echo ${string:7:3}  : 23A (3 caracteres desde posición 7)
echo ${string:7:-3}  : 23ABCabc (desde posición 7 hasta el final)
echo ${string: -4}  : Cabc (atención al espacio antes del menos)
echo ${string: -4:2}  : Ca (atención al espacio antes del menos)
Borrar subcadena
Hay diferentes formas de borrar subcadenas de una cadena:
${cadena#subcadena}  : borra la coincidencia más corta de subcadena desde
el principio de cadena
${cadena##subcadena}  : borra la coincidencia más larga de subcadena desde
el principio de cadena
Por ejemplo, en la cadena  string=abcABC123ABCabc :
echo ${string#a*C}  : 123ABCabc
echo ${string##a*C}  : abc
Reemplazar subcadena
También existen diferentes formas de reemplazar subcadenas de una cadena:
${cadena/buscar/reemplazar}  : Sustituye la primera coincidencia
de buscar con reemplazar
${cadena//buscar/reemplazar}  : Sustituye todas las coincidencias
de buscar con reemplazar
Por ejemplo, en la cadena  string=abcABC123ABCabc :
echo ${string/abc/xyz}  : xyzABC123ABCabc.
echo ${string//abc/xyz}  : xyzABC123ABCxyz.

Funciones

Las funciones son trozos de código que se ejecutarán cada vez que las
llamemos. Al llamar a una función podemos enviarle parámetros, al igual que
cuando llamamos a un shell script desde la linea de comandos.
Para definir una función usaremos el siguiente código:
function
se utiliza para definir una función
Declaración:
function nombre
{
Comando/s
}
Llamada a la función:
nombre_de_la_funcion

Actividad:
Cambia el valor de la variable PATH para que incluya tu directorio personal. A
continuación crea un shell script, param.sh, que muestre los parámetros que ha
recibido, cuantos parámetros son, el nombre del shell script y el PID del
proceso.
PATH=$PATH ”

param.sh
#!/bin/bash
echo “parametros: $*”
echo “numero de parámetros: $#”
echo “nombre del script: $0”
echo “PID: $$”

$? Nos devuelve el resultado del último comando, 0 si fue bien, 1 o mas si dio
error

Actividad
Crea una shell script, fich.sh que te pregunte el nombre de un fichero. Si el
fichero existe, te debe mostrar información sobre el en formato largo. Si no
existe o no es un fichero te mostrara un mensaje de error

#!/bin/bash
echo Escribe el nombre del fichero
read fichero
if [ -f $fichero ];then
ls –l $fichero
else
echo el fichero $fichero no existe o no es un fichero
fi

Actividad
Crea un shell script, fichodir.sh, que reciba una serie de parámetros por la linea
de comandos, los muestre y te diga si son ficheros o directorios
Ayuda
-d $variable : para comprobar si es un directorio

#!/bin/bash
if [ $# -eq 0 ]; then
echo No me vaciles y pon algun parametros
else
while [ $# -ne 0 ]
do
if [ -f $1 ];then
echo “$1 es un fichero”
elif [ -d $1 ]; then
echo “$1 es un directorio”
else
echo “$1 no es ni fichero ni directorio”
fi
shift
done
fi

Crea un shell script, reciente.sh que te pregunte el nombre de un fichero. Si


existe, para cada entrada del directorio personal, te dirá si es mas reciente o no
que el fichero que has escrito

#!/bin/bash
echo –e “escribe el nombre de un fichero: \c”
read fichero
#recorre todos los componentes de un directorio y los va asignando a var
for var in *
do
if [ $var –nt $fichero ];then
echo “$var es mas reciente”
fi
done
Scripts del sistema
Cuando el sistema arranca, se ejecutan una serie de shell scripts cuya función
es ejecutar ciertos comandos iniciales y asignar valores a las variables de
entorno necesarias. Al salir del sistema, se ejecutan otros shell scripts cuya
función es dejar el sistema preparado para la próxima vez que se inicie sesión.

Script de inicio de sesión

Al arrancar el sistema o cada vez que el usuario inicia sesión comienza a


ejecutarse una shell que leerá los archivos /etc/environment, /etc/profile,
/etc/bash.bashrc.
A continuación se ejecutará el archivo $HOME/.profile y $HOME/bashrc sirven
para configurar ciertos parámetros de su cuenta.

Script de fin de sesión

Cuando salimos del sistema el fichero que lee el shell bash es .bash_logout.
Podemos utilizarlo para incluir comandos que queremos que se ejecuten
cuando salimos.

Servicios de inicio del sistema


Los servicios del sistema son procesos que se ejecutan en segundo plano a la
espera de ser llamados por el usuario para ofrecerle la funcion o utilidad para la
que estan programados.
Inicio
A la hora de arrancar el sistema existen unas configuraciones de arranque para
los sistemas linux. Son configuraciones ya prepadas, pero que pueden ser
modificadas, si es necesario, por el administrador o superusuario. Esas
configuraciones son los runlevels o niveles de arranque o ejecución.
Existen 8 niveles diferentes. Cada nivel con su funcion son los siguientes:
Nivel Funcion
0 Apagar el equipo
1 Arrancar en modo monousuario como root
2 Arrancar el sistema en modo multiusuario sin soporte de red
3 Arrancar el sistema en modo multiusuario con soporte de red
4 Arrancar el sistema en modo multiusuario con soporte de red
5 Arrancar el sistema en modo multiusuario con soporte de red y
entorno grafico
6 Reiniciar el equipo
S Es igual que el nivel 1

Servicios
Los scripts que se encargan de arrancar y parar los servicios o reiniciarlos se
encuentran en el directorio /etc/init.d . los parámetros que se le pueden pasar
dependen del script, pero normalmente son start, stop, restart y status

Parada
Para apagar el sistema sin que cause ningun problema al apagarse utilizamos
los comandos:
halt o poweroff -> apagan
reboot –> reinicia
shutdown -> para (-h) y reinicia (-r) se debe añadir now (ahora) o (numero)
minutos

Instalacion y gestion de paquetes


En entorno comando y en distribuciones ubuntu:
Comando sudo apt-get:
 install paquete: instala el paquete
 remove paquete: desinstala el paquete
 update: actualiza los repositorios
 upgrade: actualiza el sistema

Comando apt-cache
El comando apt-cache trabaja con la caché de los paquetes de APT
buscando información. Simplemente muestra información sobre los paquetes,
así que lo pueden usar usuarios normales.

Comando apt-cdrom
El comando apt-cdrom permite añadir un CD o DVD al fichero
/etc/apt/sources.lst
Comando dpkg (para instalar paquetes si lo tenemos descargado)
 dpkg –l : lista todos los paquetes instalados

OTROS TIPOS DE PAQUETES


Paquetes tgz: contienen el código fuente del programa con los archivos
necesarios para compilar e instalar el programa mediante los comandos tar,
para empaquetar y gzip o bzip para comprimir. El paquete está en un tipo de
fichero .tar.gz o .tar.bz2.
Una vez desempaquetado y descomprimido, el paquete se instala desde el
directorio donde están las fuentes del programa, con los siguientes comandos:
./configure
make
make install

Comandos para comprimir en modo comando


Ficheros gz
Comprimir
gzip –r fichero
descomprimir
gzip –d fichero.gz
gunzip fichero.gz
ver el contenido
gzip –c fichero.gz

Ficheros bz2
Comprimir
bzip2 fichero
Descomprimir
bzip2 –d fichero.bz2

Ficheros zip
Ficheros rar
Ficheros tar
Empaquetar ficheros o directorios
empaquetar
tar –vcf archivo.tar fich1 fich2 ….
Desempaquetar
tar –xvf archivo.tar

Ficheros tar.gz (tgz)


Empaquetar y comprimir
tar –czvf archivo.tgz directorio
desempaquetar y descomprimir
tar –xzvf archivo.tgz
ver el contenido
tar –tzvf archivo.tgz

Paquetes rpm
rpm: instala, desinstala y actualiza paquetes rpm
Programación de tareas

Por usuario
 crontab –e  editar
 crontab –l  listar
 crontab –r  borrar
Programar una tarea es planificar que dicha tarea se ejecute en un
instante determinado o cada cierto tiempo de forma periódica. Para ello se
pueden utilizar los siguientes comandos:
at: permite planificar la ejecución de tareas
cron, anacron, crontab: permite planificar ordenes o procesos de forma
periódica en el tiempo o ver los procesos planificados.
Ficheros:
/etc/crontab (el genérico, hay que poner usuario)
Campo Funcion Valores
Minuto Minuto en que se ejecutara el comando 0-59
Hora Hora en que se ejecutara el comando 0-23
Dia Dia del mes en que se ejecutara el 1-31
comando
Mes Mes en que se ejecutara el comando 1-12
Dia de la Dia de la semana en que se ejecutara el 0-6
semana comando
Usuario Usuario que ejecuta el comando Nombre del
usuario
Comando Comando o script a ejecutar Comando o
script

A las 12:30 de todos los días de la semana excepto el domingo los


meses impares
m h dom mon dow user command
30 12 * 1,3,5,7,9,11 1-6 root /etc/kk.sh

Un script llamado /etc/ll.sh por usuario root, a todas las horas en punto y a y
media, el primer, undecimo y vigesimo primero dia de cada mes, de todos los
meses menos agosto.
m h dom mon dow user command
00,30 * 1,11,21 1-7,9-12 * root /etc/ll.sh

Un script llamado /etc/rr.sh por usuario root, todos los primeros, decimos y
vigesimos dias de cada mes que sean lunes o domingo, a las 3:13 de la
mañana.
m h dom mon dow user command
13 3 1,10,20 * 0-1 root /etc/rr.sh

Rendimiento del sistema


Comando top -> para ver los procesos que hay corriendo
RED
Fichero de configuración interfaz de red  /etc/network/interfaces
Fichero configuración DNS  /etc/hosts

Actualizar cambios
/etc/init.d/networking restart

Asignar IP
ifconfig eth0 192.168.1.23 netmask 255.255.255.0 up

puerta de enlace
route add –net 0/0 gw 192.168.1.1 eth

ifconfig eth0 up
ifconfig eth0 down

IPTABLES
Iptables puede manejar varias tablas. Las más importantes son:
1. Filter. Es la tabla predeterminada que permite el filtrado de las
comunicaciones. La tabla Filter está compuesta por tres pilas.
a. INPUT. Referencia el tráfico de entrada
b. OUTPUT. Referencia el tráfico de salida
c. FORWARD. Referencia el tráfico que el router reenvía a otros
equipos.
2. NAT. El servicio que permite dar acceso a internet a una red interna.
Esta tabla permite definir el tipo de comunicaciones entre la red externa
y las redes internas. La tabla NAT tiene dos pilas.
a. POSTROUTING. Permite establecer las comunicaciones desde la
red interna al exterior. Por ejemplo, para hacer que la red interna
tenga internet.
b. PREROUTING. Permite establecer las comunicaciones desde la
red externa a la red interna. Por ejemplo, se utiliza para que
desde el exterior se tenga acceso a un servidor interno.

Comandos básicos
 Ver el estado de la tabla predeterminada (filter).
iptables –L
 Si queremos ver el estado de la tabla NAT.
iptables –t nat –L
 Añadir una regla para que el cortafuegos realice una acción sobre un
tráfico predeterminado
iptables –A <parámetros> -j <acción>
 Quitar una regla del cortafuegos
iptables –D <parámetros> -j <acción>
 Limpiar la tabla de cortafuegos
iptables –F
 Limpiar la tabla de NAT
iptables –t nat –F
 Establecer por defecto una acción determinada sobre una pila.
iptables –P <cadena> <acción>
Por ejemplo, si quiere que por defecto el router deniegue todo el tráfico
de la pila FORWARD  iptables –P FORWARD DROP
Acciones sobre la tabla Filter
 -j ACCEPT  acepta el tráfico
 -j DROP  elimina el tráfico
 -j REJECT  rechaza el tráfico e informa al equipo de origen
 -j LOG –log-prefix “IPTABLES_L”  registra el tráfico que cumple los
criterios en /var/log
Acciones en la tabla NAT
 -j MASQUERADE  hace enmascaramiento del tráfico (NAT) de forma
que la red interna sale al exterior con la dirección externa del router.
 -j DNAT –to <ip>  se utiliza para que desde el exterior se tenga acceso
a un servidor que se encuentra en la red interna.
Parámetros para especificar las reglas de iptables
Element Sintaxis Ejemplo Descripción
o
Interfaz -i <interfaz> -i eth0 Interfaz de entrada
-o <interfaz> -o eth1 Interfaz de salida
Dirección -s <dir_red> -s 10.0.0.0/24 Red de origen
-d <dir_red> -d 0/0 Red de destino
-p <tipo> -p TCP Tipo de protocolo.
Opciones: TCP,
UDP, ICMP.
Puerto --dport <puerto> -p TCP --dport 80 Indica el puerto de
destino. Ejemplo http
(80/TCP)
--sport <puerto> -p UDP –sport 53 Indica el puerto de
origen. Ejemplo DNS
(53/UDP)
Estado -m state –state -m state --state Indica el estado de la
<tipo> ESTABLISHED conexión. Los
posibles estados
son: NEW, INVALID,
RELATED y
ESTABLISHED
Acción -j <acción> -j ACCEPT Indica la acción que
se va a realizar con
un determinado
tráfico. Las posibles
acciones son:
ACCEPT, DROP,
REJECT, LOG,
DNAT y
MASQUERADE

De esta forma puedes "jugar" con los parámetros de una determinada regla
para poder especificar la acción que se aplica. A continuación, puedes ver tres
reglas, para permitir el tráfico que reenvía el router, que van desde la más
general a la más específica:
iptables -A FORWARD -j ACCEPT. Permite todo el tráfico.
iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT. Permite sólo el tráfico de
la red interna 192.168.0.0/24.
iptables -A FORWARD -s 192.168.0.0/24 -p TCP –dport 80 -j ACCEPT. Permite
sólo el tráfico de la red interna 192.168.0.0/24 en el puerto 80.
Si deseas bloquear comunicaciones por su país de origen te recomiendo que
visites la página web ipinfodb.com.

Una vez configurado el cortafuegos para guardar la configuración ejecuta:


# iptables-save >/etc/iptables.rules

Donde el fichero /etc//iptables.rules guarda la configuración de iptables. Si lo


deseas puedes modificarlo directamente y cargar su configuración ejecutando:
# iptables-restore < etc/iptables.rules

Finalmente, modificamos el fichero /etc/network/interfaces y escribimos al final:


pre-up iptables-restore </etc/iptables.rules

Enmascaramiento de la red local


iptables –t nat –A POSTROUTING –s 192.168.1.0/24 –o eth0 –j
MASQUERADE

Cerrar los accesos indeseados desde el exterior


iptables –A INPUT –s 0.0.0.0/0 –p tcp –dport 1:1024 –j DROP
iptables –A INPUT –s 0.0.0.0/0 –p udp –dport 1:1024 –j DROP

Eliminar una regla


Primero averiguamos el número que hace en la cadena (INPUT, OUTPUT,
FORWARD con iptables –L)
Iptables –D (INPUT/OUTPUT/FORWARD) nº

Reenvío de paquetes desde una interfaz local (eth1) a una red pública
(eth0)
iptables –a FORWARD –s eth1 –o eth0 –j ACCEPT

si es de conexiones existentes
iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j
ACCEPT

Permitir (ACCEPT) todo el tráfico entrante (INPUT) desde (-s) cualquier


dirección (0/0) la red local (eth1) y desde el retorno del sistema (lo) hacia (-d)
cualquier destino (0/0):
iptables –A INPUT–i eth0 –s 0.0.0.0/0 –d 0.0.0.0/0 –j ACCEPT
iptables –A INPUT–i lo –s 0.0.0.0/0 –d 0.0.0.0/0 –j ACCEPT

https://www.youtube.com/watch?v=gkALH_iuaeIfirewall interno en el que se


pueden añadir reglas
1º limpiamos las reglas existentes:
iptables -F
2º cadenas importantes:
INPUT  paquetes de entrada
FORWARD paquetes redirigidos
OUTPUT  paquetes de salida

Reglas generales:
Impedir que entre ningún paquete
iptables –P INPUT DROP (aceptar todos con ACCEPT)
Impedir que salga ningún paquete
iptables –P OUTPUT DROP (aceptar todos con ACCEPT)
Reenviar
iptables –P FORWARD DROP (ACCEPT)

Bloqueamos todo el tráfico entrante por defecto


iptables –P INPUT DROP
Pero acepto el telnet porque si no, no puedo conectarme desde IOs xDD
iptables –A INPUT –s 0/0 –p tcp –dport 23 –j ACCEPT
Aceptar TODO de nuestra red local
iptables –A INPUT –s 192.168.1.0/24 –j ACCEPT
-A añadir
INPUT en la cadena INPUT
-s (source) origen, nuestra red local
-j jump (salta a) ACCEPT aceptar

Borrar una regla de la cadena input ( la numero 1)


iptables –D INPUT 1

Aceptar TODO el tráfico que venga a el puerto 5160 tcp (OJO, puerto de
destino)
iptables –A INPUT –s 0.0.0.0/0 –p tcp –dport 5160 –j ACCEPT (se podría
ahorrar el –s 0.0.0.0/0 porque aceptamos todo)

Impedir entrar por ssh


iptables –A INPUT –p tcp –dport 22 –j DROP
Cerrar del 1 al 24
iptables –A INPUT –p tcp –dport 1:1024 –j DROP
Recibir tráfico de fuera SOLO si yo lo genero
iptables –A INPUT –m state –state ESTABLISHED,RELATED –j ACCEPT
//seguimos sin poder navegar porque no lo iniciamos nosotros, nos saltamos el
paso uno de las 3 vias (tcp)
input –A OUTPUT –m state –state NEW,ESTABLISHED,RELATED –j ACCEPT

También podría gustarte