Raspberry Pi
Descargar imagen
$ cd ~/Descargas && wget -c https://downloads.raspberrypi.org/raspbian_full_latest
Instalar imagen
# fdisk -l
# dd bs=4M if=2017-11-29-raspbian-stretch.img of=/dev/sd@ conv=fsync
Configuración con cable HDMI
Necesitaremos el cable HDMI y arrancar con una pantalla en inicio, después podremos hacer todo desde SSH y prescindir de la pantalla
Haremos las siguientes adaptaciones a nuestro gusto:
cambiar:
idioma
teclado
hora
nombre host Rpi
desactivar bluetooth
desactivar wifi
ip fija eth0
Ninguna casilla marcada
IPv4 Address 192.168.1.200
Router 192.168.1.1
DNS Servers 127.0.0.1
SSH
En router
Application / Application list
TCP and UDP con todos los puertos a 29001
Application / Port Forwarding (Application list)
192.168.1.200 -- SSH
En RPI cambiar puerto ssh
$ sudo nano /etc/ssh/sshd_config
Añadir Port 29001
$ sudo service restart ssh
Cambiar usuario por defecto de RPI
$ sudo passwd root
$ sudo nano /etc/ssh/sshd_config
PermitRootLogin yes
Una vez que hemos puesto la clave de root, salimos de la terminal y volvemos a iniciar sesión pero cuando nos pida el usuario pondremos root y la clave del usuario root. Una vez que estemos en el sistema como root tecleamos el siguiente comando:
$ usermod -l pacanis pi -md /home/pacanis
Lo que hace este comando es renombrar el usuario y mover todo el contenido del /home/ del usuario actual al nuevo /home/ del nuevo usuario. De esta forma habremos cambiado el nombre del usuario de forma limpia
Una vez que hayamos hecho esto, nos logueamos con el nuevo usuario pacanis y la clave que tuviera el usuario anterior, y procedemos a deshabilitar (borramos la clave) el usuario root por seguridad.
$ groupmod -n pacanis pi
$ sudo nano /etc/ssh/sshd_config
Comentar PermitRootLogin yes
$ sudo passwd -l root
Cambia la contraseña de usuario actual (pacanis) la contraseña por defecto es ‘raspberry’
$ passwd
$ passwd root
Más información aquí
Actualizar
# aptitude update && aptitude dist-upgrade && aptitude clean && rpi-update
Nextcloud
puerto 26001
DUCKDNS
$ mkdir duckdns
$ cd duckdns
$ nano duck.sh
/home/pacanis/Seguridad/RPI/duckdns.txt
$ chmod 700 duck.sh
Crontab PI
$ crontab -e
# Cada 5 minutos actualizamos IP
*/5 * * * * ~/duckdns/duck.sh >/dev/null 2>&1
Ejecutamos
$ ./duck.sh
Comprobamos que aparece OK
$ cat duck.log
Probamos conexión desde PC
$ ssh -p 29001 pi@nombre.duckdns.org
Eliminar todo rastro de sudo o sudo
# nano /etc/sudoers
y comentar con # las lineas que contengan root o sudo
#root ALL=(ALL:ALL) ALL
#%sudo ALL=(ALL:ALL) ALL
# nano /etc/sudoers.d/010_pi-nopasswd
y comentar con # las lineas que contengan root
#pi ALL=(ALL) NOPASSWD: ALL
exit
Generar claves SSH
PI
Generar claves ssh y copiarlas en PC
$ ssh-keygen -t rsa
$ ssh-copy-id pacanis@192.168.1.2
PC
Generar claves ssh y copiarlas en PI
$ ssh-keygen -t rsa
$ ssh-copy-id -p 29001 pi@192.168.1.200
VPN
ROUTER
application / Application list
UDP con todos los puertos a 27001
Application / Port Forwarding (Application list)
192.168.1.200 -- VPN
PI
$ curl -L https://install.pivpn.io | bash
puerto 27001
pacanis.duckdns.org
DNS OpenDNS
$ pivpn add
paco
ana
nestor
pc
portatil
Los usuarios creados estarán aquí /home/NUESTRO_USUARIO/ovpns
# nano /etc/dnsmasq.conf
listen-address=127.0.0.1, 192.168.1.200, 10.8.0.1
# service restart dnsmasq
# service restart openvpn
Copiamos el ovpn en PC
# scp /home/pi/ovpns/*.ovpn pacanis@192.168.1.2:/home/pacanis/Seguridad/VPN
Mas información aquí y aquí
Pi-hole
$ curl -sSL https://install.pi-hole.net | bash
reseteamos contraseña
$ sudo pihole -a -p
http://192.168.1.200/admin
Permitimos que Pi-Hole filtre la publicidad también en VPN (puerto de VPN)
# ifconfig tun0
inet 10.8.0.1 netmask 255.255.255.0 destination 10.8.0.1
# nano /etc/openvpn/server.conf
cambiar
push "dhcp-option DNS 208.67.220.220"
por
push "dhcp-option DNS 10.8.0.1"
# nano /etc/openvpn/client-common.txt
remote pacanis.duckdns.org 27001
# pihole -a hostrecord pacanis.duckdns.org 192.168.1.200
# service restart dnsmasq
# service restart openvpn
Mas información aquí
Bloqueo publicidad con fichero HOST
cp /etc/hosts /etc/hosts.back
wget -O /etc/hosts https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews/hosts
cat /etc/hosts.back >> /etc/hosts
Editamos crontab
Más información aquíhttps://lignux.com/bloqueando-toda-la-publicidad-con-el-fichero-hosts/
Crontab ROOT
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# Cada 15 minutos reiniciamos bot
*/15 * * * * /root/scripts/reiniciar_bot.sh
# Cada día actualizamos (00:00 AM)
@daily /root/scripts/actualizacion.sh
# En cada reboot generamos log
@reboot /root/scripts/log_reinicio.sh
#
# Extras
#
# Cada lunes apaga de 00:15 a 06:30
#15 0 * * 1 shutdown -r 06:30
# Cada semana actualizamos lista de hosts
#@weekly wget -O /etc/hosts https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews/hosts; cat /etc/hosts.back >> /etc/hosts
crontab -l
UFW
# Activamos
ufw enable
# Permitimos tráfico NAT
nano /etc/default/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"
# Permitir ipv4 forward
nano /etc/ufw/sysctl.conf
net.ipv4.ip_forward=1
# Permitimos todo el tráfico de salida
ufw default allow outgoing
# Negamos todo el tráfico de entrada
ufw default deny incoming
# HTTP
ufw allow 80
# HTTPS
ufw allow 443
# NFS
ufw allow 111
ufw allow 2049
# SAMBA
ufw allow 137/udp
ufw allow 138/udp
ufw allow 139/tcp
ufw allow 445/tcp
# Nextcloud
ufw allow 26001
# VPN
ufw allow 27001/udp
# Transmission
ufw allow 28001
# SSH
ufw allow 22
ufw allow 29001
# Toda la red interna VPN
ufw allow from 10.8.0.0/24
# Toda la red interna
ufw allow from 192.168.1.0/24 to 192.168.1.200
# Activar un registro de logs, que se almacenarán en /var/log/ufw.log
ufw logging on
# Verificamos las reglas
ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), allow (routed)
New profiles: skip
To Action From
-- ------ ----
80 ALLOW IN Anywhere
443 ALLOW IN Anywhere
111 ALLOW IN Anywhere
2049 ALLOW IN Anywhere
137/udp ALLOW IN Anywhere
138/udp ALLOW IN Anywhere
139/tcp ALLOW IN Anywhere
445/tcp ALLOW IN Anywhere
26001 ALLOW IN Anywhere
27001/udp ALLOW IN Anywhere
28001 ALLOW IN Anywhere
22 ALLOW IN Anywhere
29001 ALLOW IN Anywhere
Anywhere ALLOW IN 10.8.0.0/24
192.168.1.200 ALLOW IN 192.168.1.0/24
80 (v6) ALLOW IN Anywhere (v6)
443 (v6) ALLOW IN Anywhere (v6)
111 (v6) ALLOW IN Anywhere (v6)
2049 (v6) ALLOW IN Anywhere (v6)
137/udp (v6) ALLOW IN Anywhere (v6)
138/udp (v6) ALLOW IN Anywhere (v6)
139/tcp (v6) ALLOW IN Anywhere (v6)
445/tcp (v6) ALLOW IN Anywhere (v6)
26001 (v6) ALLOW IN Anywhere (v6)
27001/udp (v6) ALLOW IN Anywhere (v6)
28001 (v6) ALLOW IN Anywhere (v6)
22 (v6) ALLOW IN Anywhere (v6)
29001 (v6) ALLOW IN Anywhere (v6)
# Con esto desactivamos
ufw disable
# Con esto activamos
ufw enable
# Con esto borramos las reglas
ufw reset
# Con esto reiniciamos servicio
service restart ufw
# Verificamos intrusiones
tail -n 20 /var/log/ufw.log
# Limpiamos fichero de mensajes
cat /dev/null > /var/log/ufw.log
$ cd ~/Descargas && wget -c https://downloads.raspberrypi.org/raspbian_full_latest
Instalar imagen
# fdisk -l
# dd bs=4M if=2017-11-29-raspbian-stretch.img of=/dev/sd@ conv=fsync
Configuración con cable HDMI
Necesitaremos el cable HDMI y arrancar con una pantalla en inicio, después podremos hacer todo desde SSH y prescindir de la pantalla
Haremos las siguientes adaptaciones a nuestro gusto:
cambiar:
idioma
teclado
hora
nombre host Rpi
desactivar bluetooth
desactivar wifi
ip fija eth0
Ninguna casilla marcada
IPv4 Address 192.168.1.200
Router 192.168.1.1
DNS Servers 127.0.0.1
SSH
En router
Application / Application list
TCP and UDP con todos los puertos a 29001
Application / Port Forwarding (Application list)
192.168.1.200 -- SSH
En RPI cambiar puerto ssh
$ sudo nano /etc/ssh/sshd_config
Añadir Port 29001
$ sudo service restart ssh
Cambiar usuario por defecto de RPI
$ sudo passwd root
$ sudo nano /etc/ssh/sshd_config
PermitRootLogin yes
Una vez que hemos puesto la clave de root, salimos de la terminal y volvemos a iniciar sesión pero cuando nos pida el usuario pondremos root y la clave del usuario root. Una vez que estemos en el sistema como root tecleamos el siguiente comando:
$ usermod -l pacanis pi -md /home/pacanis
Lo que hace este comando es renombrar el usuario y mover todo el contenido del /home/ del usuario actual al nuevo /home/ del nuevo usuario. De esta forma habremos cambiado el nombre del usuario de forma limpia
Una vez que hayamos hecho esto, nos logueamos con el nuevo usuario pacanis y la clave que tuviera el usuario anterior, y procedemos a deshabilitar (borramos la clave) el usuario root por seguridad.
$ groupmod -n pacanis pi
$ sudo nano /etc/ssh/sshd_config
Comentar PermitRootLogin yes
$ sudo passwd -l root
Cambia la contraseña de usuario actual (pacanis) la contraseña por defecto es ‘raspberry’
$ passwd
$ passwd root
Más información aquí
Actualizar
# aptitude update && aptitude dist-upgrade && aptitude clean && rpi-update
Nextcloud
puerto 26001
DUCKDNS
$ mkdir duckdns
$ cd duckdns
$ nano duck.sh
/home/pacanis/Seguridad/RPI/duckdns.txt
$ chmod 700 duck.sh
Crontab PI
$ crontab -e
# Cada 5 minutos actualizamos IP
*/5 * * * * ~/duckdns/duck.sh >/dev/null 2>&1
Ejecutamos
$ ./duck.sh
Comprobamos que aparece OK
$ cat duck.log
Probamos conexión desde PC
$ ssh -p 29001 pi@nombre.duckdns.org
Eliminar todo rastro de sudo o sudo
# nano /etc/sudoers
y comentar con # las lineas que contengan root o sudo
#root ALL=(ALL:ALL) ALL
#%sudo ALL=(ALL:ALL) ALL
# nano /etc/sudoers.d/010_pi-nopasswd
y comentar con # las lineas que contengan root
#pi ALL=(ALL) NOPASSWD: ALL
exit
Generar claves SSH
PI
Generar claves ssh y copiarlas en PC
$ ssh-keygen -t rsa
$ ssh-copy-id pacanis@192.168.1.2
PC
Generar claves ssh y copiarlas en PI
$ ssh-keygen -t rsa
$ ssh-copy-id -p 29001 pi@192.168.1.200
VPN
ROUTER
application / Application list
UDP con todos los puertos a 27001
Application / Port Forwarding (Application list)
192.168.1.200 -- VPN
PI
$ curl -L https://install.pivpn.io | bash
puerto 27001
pacanis.duckdns.org
DNS OpenDNS
$ pivpn add
paco
ana
nestor
pc
portatil
Los usuarios creados estarán aquí /home/NUESTRO_USUARIO/ovpns
# nano /etc/dnsmasq.conf
listen-address=127.0.0.1, 192.168.1.200, 10.8.0.1
# service restart dnsmasq
# service restart openvpn
Copiamos el ovpn en PC
# scp /home/pi/ovpns/*.ovpn pacanis@192.168.1.2:/home/pacanis/Seguridad/VPN
Mas información aquí y aquí
Pi-hole
$ curl -sSL https://install.pi-hole.net | bash
reseteamos contraseña
$ sudo pihole -a -p
http://192.168.1.200/admin
Permitimos que Pi-Hole filtre la publicidad también en VPN (puerto de VPN)
# ifconfig tun0
inet 10.8.0.1 netmask 255.255.255.0 destination 10.8.0.1
# nano /etc/openvpn/server.conf
cambiar
push "dhcp-option DNS 208.67.220.220"
por
push "dhcp-option DNS 10.8.0.1"
# nano /etc/openvpn/client-common.txt
remote pacanis.duckdns.org 27001
# pihole -a hostrecord pacanis.duckdns.org 192.168.1.200
# service restart dnsmasq
# service restart openvpn
Mas información aquí
Bloqueo publicidad con fichero HOST
cp /etc/hosts /etc/hosts.back
wget -O /etc/hosts https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews/hosts
cat /etc/hosts.back >> /etc/hosts
Editamos crontab
Más información aquíhttps://lignux.com/bloqueando-toda-la-publicidad-con-el-fichero-hosts/
Crontab ROOT
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# Cada 15 minutos reiniciamos bot
*/15 * * * * /root/scripts/reiniciar_bot.sh
# Cada día actualizamos (00:00 AM)
@daily /root/scripts/actualizacion.sh
# En cada reboot generamos log
@reboot /root/scripts/log_reinicio.sh
#
# Extras
#
# Cada lunes apaga de 00:15 a 06:30
#15 0 * * 1 shutdown -r 06:30
# Cada semana actualizamos lista de hosts
#@weekly wget -O /etc/hosts https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews/hosts; cat /etc/hosts.back >> /etc/hosts
crontab -l
UFW
# Activamos
ufw enable
# Permitimos tráfico NAT
nano /etc/default/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"
# Permitir ipv4 forward
nano /etc/ufw/sysctl.conf
net.ipv4.ip_forward=1
# Permitimos todo el tráfico de salida
ufw default allow outgoing
# Negamos todo el tráfico de entrada
ufw default deny incoming
# HTTP
ufw allow 80
# HTTPS
ufw allow 443
# NFS
ufw allow 111
ufw allow 2049
# SAMBA
ufw allow 137/udp
ufw allow 138/udp
ufw allow 139/tcp
ufw allow 445/tcp
# Nextcloud
ufw allow 26001
# VPN
ufw allow 27001/udp
# Transmission
ufw allow 28001
# SSH
ufw allow 22
ufw allow 29001
# Toda la red interna VPN
ufw allow from 10.8.0.0/24
# Toda la red interna
ufw allow from 192.168.1.0/24 to 192.168.1.200
# Activar un registro de logs, que se almacenarán en /var/log/ufw.log
ufw logging on
# Verificamos las reglas
ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), allow (routed)
New profiles: skip
To Action From
-- ------ ----
80 ALLOW IN Anywhere
443 ALLOW IN Anywhere
111 ALLOW IN Anywhere
2049 ALLOW IN Anywhere
137/udp ALLOW IN Anywhere
138/udp ALLOW IN Anywhere
139/tcp ALLOW IN Anywhere
445/tcp ALLOW IN Anywhere
26001 ALLOW IN Anywhere
27001/udp ALLOW IN Anywhere
28001 ALLOW IN Anywhere
22 ALLOW IN Anywhere
29001 ALLOW IN Anywhere
Anywhere ALLOW IN 10.8.0.0/24
192.168.1.200 ALLOW IN 192.168.1.0/24
80 (v6) ALLOW IN Anywhere (v6)
443 (v6) ALLOW IN Anywhere (v6)
111 (v6) ALLOW IN Anywhere (v6)
2049 (v6) ALLOW IN Anywhere (v6)
137/udp (v6) ALLOW IN Anywhere (v6)
138/udp (v6) ALLOW IN Anywhere (v6)
139/tcp (v6) ALLOW IN Anywhere (v6)
445/tcp (v6) ALLOW IN Anywhere (v6)
26001 (v6) ALLOW IN Anywhere (v6)
27001/udp (v6) ALLOW IN Anywhere (v6)
28001 (v6) ALLOW IN Anywhere (v6)
22 (v6) ALLOW IN Anywhere (v6)
29001 (v6) ALLOW IN Anywhere (v6)
# Con esto desactivamos
ufw disable
# Con esto activamos
ufw enable
# Con esto borramos las reglas
ufw reset
# Con esto reiniciamos servicio
service restart ufw
# Verificamos intrusiones
tail -n 20 /var/log/ufw.log
# Limpiamos fichero de mensajes
cat /dev/null > /var/log/ufw.log