Archives de catégorie : Debian

Sysctl

# /etc/sysctl.conf
# Increase inotify availability
fs.inotify.max_user_watches = 524288
 
# Settings for NFS
sunrpc.tcp_slot_table_entries = 128
sunrpc.udp_slot_table_entries = 128
 
# Improve the device I/O perfomance
vm.swappiness = 1
vm.vfs_cache_pressure = 50
 
# Decrease TCP Fin timeout (default=60)
net.ipv4.tcp_fin_timeout = 30
 
# Decrease TCP Keep Alive Time (Default=7200)
net.ipv4.tcp_keepalive_time = 60
 
# Set SynAck Retries to 3 (Default=5 or 180 seconds)
net.ipv4.tcp_synack_retries = 3
 
# Don't cache ssthresh from previous connection
net.ipv4.tcp_no_metrics_save = 1
 
# Disable ECN
net.ipv4.tcp_ecn = 0
 
# Enable rp_filter
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
 
# Enable SYN cookies (yum!)
# http://cr.yp.to/syncookies.html
net.ipv4.tcp_syncookies = 1
 
# Setting this value is useful even if your server does not receive this kind of connection,
# because it can still be protected from a DoS (syn-flood) attack.
net.ipv4.tcp_max_syn_backlog = 4096
 
# Limit of socket listen() backlog, known in userspace as SOMAXCONN. Defaults to 128.
net.core.somaxconn               = 2048
 
# Maximum number of packets, queued on the input side, when the interface receives packets faster than kernel can process them.
# Applies to non-NAPI devices only. The default value is 1000.
net.core.netdev_max_backlog      = 8192
 
# Reuse time wait socket
net.ipv4.tcp_tw_reuse            = 1
 
# Some routers send invalid responses to broadcast frames, and each one generates a
# warning that is logged by the kernel. These responses can be ignored:
net.ipv4.icmp_ignore_bogus_error_responses = 1
 
# Disable source route
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
 
# Disable redirects
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
 
# Disable secure redirects
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
 
# Ignore ICMP broadcasts
net.ipv4.icmp_echo_ignore_broadcasts = 1
 
# When the kernel panics, automatically reboot in 3 seconds
kernel.panic = 3
 
# netfilter use only
# Conntrack max
#net.ipv4.netfilter.ip_conntrack_max = 1048576
#net.netfilter.nf_conntrack_max      = 1048576
# Conntrack ttl (sec, 4h here)
#net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 14400
#net.netfilter.nf_conntrack_tcp_timeout_established      = 14400
 
#Log Suspicious Martian Packets
net.ipv4.conf.all.log_martians = 1
 
#packets forwarding 
#net.ipv4.ip_forward=1
#net.ipv6.conf.all.forwarding=1
 
# IPv6
net.ipv6.conf.all.disable_ipv6 = 1
#net.ipv6.conf.eth0.disable_ipv6 = 1
#net.ipv6.conf.eth1.disable_ipv6 = 0
 
#net.ipv6.conf.all.accept_source_route = 0
#net.ipv6.conf.all.accept_redirects = 0

Sysctl

Prise en compte des modifications effectuées

sysctl -p 

Affiche des options en cours

sysctl -a | less

Exemple d’une modification à chaud dans le sysctl.conf

sysctl -w net.ipv4.netfilter.ip_conntrack_max=262144

Afin de tester si la valeur est prise :

sysctl net.ipv4.netfilter.ip_conntrack_max

Ne pas oublier de faire la modification dans le fichier en dur (/etc/sysctl.conf) !

Dpkg et Apt

Liste de paquets utiles

  • lynis ( remplace RKhunter )
  • htop
  • iotop
  • net-tools
  • apticron
  • sudo
  • tripwire

Dpkg

Purge des configurations

Purge des restes de configuration pour des paquets supprimés.

apt-get remove --purge $(sudo dpkg -l | grep "^rc" | awk '{print $2}' | tr '\n' ' ')

ou

dpkg --list |grep "^rc" | cut -d " " -f 3 | xargs sudo dpkg --purge

Retrait d’une architecture

Retrait de l’architecture i386

dpkg --remove-architecture i386

Liste des paquets

dpkg -l

Reconfiguration d’un paquet

dpkg-reconfigure postfix 

Détails d’un paquet installé

dpkg -s nginx

Upgrade PHP5 en dotdeb

for i in `dpkg --list php5\* |grep ^ii|cut -d' ' -f3`; do echo -n "$i=5.5.27-1~dotdeb+7.1 "; done; echo

Apt

Installation / Retrait / Purge d’un paquet

Détails d’un paquet non installé

apt-cache show etcd

Installation du paquet nginx

apt-get install nginx

Suppression du paquet nginx

apt-get remove nginx

Suppression avec purge des fichiers de configuration

apt-get remove --purge nginx

Auto suppression des paquets inutiles en terme de dépendances

apt-get autoremove

Fixer les dépendances cassées

apt-get install -f

Interdire l’installation d’un paquet

vim /etc/apt/preferences.d/01exim4 

Ajout de :

Package: exim4-base
Pin: release o=Debian
Pin-Priority: -1

suivi d’un

apt-get update
apt-get install rkhunter

Rkhunter ne s’installera plus accompagner d’Exim4.

Si on a installé gnome3 via son méta-paquet : typiquement en sélectionnant l’environnement graphique à linstallation, Exim4 est compris dedans. Pour installer uniquement gnome ( attention il est livré avec quasi rien ). Ne pas choisir d’environnement graphique à l’install et faire ultérieurement

apt-get install gnome-core

Recherche d’un paquet

Recherche dans tout les éléments

apt-cache search nmap

Recherche uniquement dans les noms de paquets

apt-cache search -n nmap

Installation de mise à jour automatique

voir https://wiki.debian.org/UnattendedUpgrades

Apticron

Afin d’être prévenu par mail de mise à jour apt :

apt-get install apticron

Configuration réseaux

Fichier type IPv4

/etc/network/interfaces

allow hotplug eth0
auto eth0
iface eth0 inet static|dhcp
      address 192.168.0.10
      netmask 255.255.255.0
      network 192.168.0.0
      broadcast 192.168.0.255
      gateway 192.168.0.254

Si le paquet resolvconf est installé on peut également définir les serveurs DNS directement dans le fichier interfaces.

dns-nameservers 9.9.9.9 8.8.8.8

Fichier type IPv6

/etc/network/interfaces IPv6 peut être configuré automatiquement en utilisant l’auto-configuration sans état (stateless address autoconfiguration ou SLAAC)

iface ens192 inet6 auto

en mode manuel

iface ens192 inet6 static
      address 2a02:8400:701::1
      netmask 64
      gateway fe80::7fde:23a1:e985:babc

on s’assurera que si on utilise une stack exclusivement IPv6, d’avoir des DNS accessible en IPv6, ceux de Google par exemple.

/etc/resolv.conf

nameserver 2001:4860:4860::8888

Affichage de la Table de routage IPv6 du noyau

route -6

Mise en place du Bonding « Classique »

vérification du module pour le noyau

   ls /lib/modules/`uname -r`/kernel/drivers/net/bonding/bonding.ko

install du paquet ifenslave ( asservissement des interfaces )

   apt-get install ifenslaveX.X

Création du fichier chargement du module au démarrage

  vim /etc/modprobe.d/aliase-bond.conf

Ajout de

alias (netdev-bond0 | bond0 ) bonding
options bonding mode=0 miimon=100 downdelay=200 updelay=200

netdev-bond0 ou bond0 dépend de la version du module et donc de celle du noyau si dans les log du boot kernel ( dmesg ) on a CAP_NET_ADMIN ⇒ netdev-bond0

Création de l’interface de bonding : bond0

dans /etc/network/interfaces

auto bond0
  iface bond0 inet static
  address 192.168.21.136
  netmask 255.255.255.0
  network 192.168.21.0
  gateway 192.168.21.254
  broadcast 192.168.0.255
  up /sbin/ifenslave bond0 eth0 eth1
  down /sbin/ifenslave -d bond0 eth0 eth1

Les autres interfaces n’ont pas besoin d’être défini.

/etc/init.d/networking restart

ou

ifup bond0

ifconfig doit retourner les ethX en slave

exemple :

bond0 Link encap:Ethernet HWaddr 00:1f:c6:d8:d4:a8
inet adr:172.20.20.10 Bcast:172.20.20.255 Masque:255.255.255.0
UP BROADCAST RUNNING **MASTER** MULTICAST MTU:1500 Metric:1
RX packets:32506 errors:66 dropped:0 overruns:66 frame:0
TX packets:22624 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:0
RX bytes:9979752 (9.5 MiB) TX bytes:13087796 (12.4 MiB)
eth0 Link encap:Ethernet HWaddr 00:1f:c6:d8:d4:a8
UP BROADCAST RUNNING **SLAVE** MULTICAST MTU:1500 Metric:1
RX packets:16185 errors:32 dropped:0 overruns:32 frame:0
TX packets:11338 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:1000
RX bytes:4967477 (4.7 MiB) TX bytes:6571562 (6.2 MiB)
eth1 Link encap:Ethernet HWaddr 00:1f:c6:d8:d4:a8
UP BROADCAST RUNNING **SLAVE** MULTICAST MTU:1500 Metric:1
RX packets:16321 errors:34 dropped:0 overruns:34 frame:0
TX packets:11286 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:1000
RX bytes:5012275 (4.7 MiB) TX bytes:6516234 (6.2 MiB)

Infos sur les modes

Mode 0 : Bonding Mode: load balancing (round-robin) + agrégation

Mode 4 : FT + LB + agrégation seulement si le switch gère le 802.ad

Mode 1 : inutile

Affichage infos

Récupération des informations par cat /proc/net/bonding/bond0 qui donne :

Ethernet Channel Bonding Driver: v3.4.0-1 (October 7, 2008)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth1
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth1
MII Status: up
Speed: 100 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:15:17:bf:25:65
Slave Interface: eth2
MII Status: down
Speed: 100 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:22:19:5e:29:fa
Currently Active Slave: eth1

Currently Active Slave: eth1 : indique l’interface utilisée actuellement (en mode active-backup)

Force le changement de master

En mode active-backup (au moins), on peut forcer le changement d’interface master et donc pouvoir manipuler l’autre interface sans problème.

Exemple pour passer eth0 en master sur bond0 :

ifenslave -c bond0 eth0

Mise en place du Bonding avec vlan

Installation du paquet

apt-get install ifenslave

vim /etc/modprobe.d/aliase-bond.conf

alias bond0 bonding
options bonding mode=1 miimon=100 downdelay=200 updelay=200

note : si le mode 4 donne

[lun. janv. 15 18:30:17 2018] bond0: Warning: No 802.3ad response from the link partner for any adapters in the bond

en changer pour le mode 1 par exemple.

le fichier /etc/network/interfaces

auto bond0
  iface bond0 inet manual
  up /sbin/ifenslave bond0 enp6s0 enp7s0
  down /sbin/ifenslave -d bond0 enp6s0 enp7s0

auto bond0.4

 iface bond0.4 inet static
   address 10.15.1.1
   netmask 255.255.0.0
   network 10.15.0.0
   gateway 10.15.255.254
   dns-nameservers 10.15.0.1 10.15.0.2
   vlan-raw-device bond0

Ajout du module 802.1Q au démarrage

echo "8021q" >> /etc/modules

reboot et vérification

# ifconfig
bond0     Link encap:Ethernet  HWaddr 00:25:b5:10:0a:0b
          inet6 addr: fe80::225:b5ff:fe10:a0b/64 Scope:Link
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
          RX packets:736 errors:0 dropped:264 overruns:0 frame:0
          TX packets:174 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:260589 (260.5 KB)  TX bytes:19393 (19.3 KB)

bond0.4   Link encap:Ethernet  HWaddr 00:25:b5:10:0a:0b
          inet addr:10.4.1.1  Bcast:10.4.255.255  Mask:255.255.0.0
          inet6 addr: fe80::225:b5ff:fe10:a0b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:269 errors:0 dropped:0 overruns:0 frame:0
          TX packets:157 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:213718 (213.7 KB)  TX bytes:16211 (16.2 KB)

enp6s0    Link encap:Ethernet  HWaddr 00:25:b5:10:0a:0b
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:472 errors:0 dropped:2 overruns:0 frame:0
          TX packets:169 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:236956 (236.9 KB)  TX bytes:18753 (18.7 KB)

enp7s0    Link encap:Ethernet  HWaddr 00:25:b5:10:0a:0b
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:264 errors:0 dropped:266 overruns:0 frame:0
          TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:23665 (23.6 KB)  TX bytes:640 (640.0 B)

Gestion des Vlan rapide

Nécessite le paquet vlan

modprobe 8021q
vconfig add enp6s0 4
ip addr add 15.4.1.1/16 dev enp6s0.4
ip link set up enp6s0
ip link set up enp6s0.4
ip route add default via 15.4.255.254

Optimisation réseau

Tuning pour ne pas surcharger la machine en sockets

echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle

Wifi WPA2

Dans /etc/network/interfaces

allow-hotplug wlan0
auto wlan0
   iface wlan0 inet static
     wireless-essid essid_name
     address 192.168.66.1
     netmask 255.255.255.0
     gateway 192.168.66.254
     pre-up wpa_supplicant -B w -D wext -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
     post-down killall -q wpa_supplicant
   

Dans /etc/wpa_supplicant/wpa_supplicant.conf

   ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
   update_config=1
   
   network={
     ssid="essid_name"
     proto=WPA RSN
     scan_ssid=1
     key_mgmt=WPA-PSK
     pairwise=CCMP TKIP
     group=CCMP TKIP
     psk=431ae1044ea0c00d6cc4653430508c13ca01f298b0102fefab6984e8b6174749
   }

ou

country=FR
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
   ssid="essidname"
   proto=RSN
   scan_ssid=1
   key_mgmt=WPA-PSK
   pairwise=CCMP TKIP
   group=CCMP TKIP
   psk=431ae1044ea0c00d6cc4653430508c13ca01f298b0102fefab6984e8b6174749
}

Génération de la Pre-shared key ci-dessus

wpa_passphrase essid_name thisisthepassword

Connaitre son IP public en CLI

curl ipconfig.me

Commandes Système

Find

Répertoires

find . -type d -exec chmod 750 {} \; 

Fichiers

find . -type f -exec chmod 640 {} \;    

Trouver les setuid

find / -user root -perm -4000 -exec ls -ldb {} \; > test

Fichiers modifiés depuis les 60 derniers jours

find /var/www/site.com -mtime -60 -type f -ls

Shell php c99 et r57

find /var/www/ -name \*.php -type f -print0 | xargs -0 grep c99|57

Liste les fichiers de plus de 100Mo

find /var/log/ -size +100M -exec ls -lh {} \;

Suppression de fichiers

Suppression de fichier avec caractère bizarre (non imprimable).

  ls -il donne l'inode
  find . -inum 1048786 -exec rm -i {} \;

Connaitre son bios via /dev/mem

sudo dd if=/dev/mem bs=32k skip=31 count=1 | strings -n 8 | grep -i bios

Visudo Alias

Utiliser les alias dans le visudo :

User_Alias AUT = username1, username2 , usernameX
AUT     ALL=NOPASSWD: /etc/init.d/nginx restart

~/.bashrc

Ajout de commandes dans le PATH

export PATH=$PATH:/sbin:/usr/local/sbin:/opt/mysql

Ajout de couleur au shell

PS1='\[\033[01;32m\]\u@\h\[\033[01;34m\]:\w$\[\033[00m\]'  vert
PS1='\[\033[01;31m\]\u@\h\[\033[01;34m\]:\w#\[\033[00m\]'  rouge

Alias

alias fw4='shorewall check && shorewall restart'
alias fw6='shorewall6 check && shorewall6 restart'
alias n='nano'
alias log='tailf /var/log/syslog'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'

Avoir les dates et heures dans l’historique.

export HISTTIMEFORMAT="[%F %T] ~~~ "

Donnera :

915  [2016-03-11 15:37:44] ~~~ ls
916  [2016-03-11 15:37:45] ~~~ cd git/
917  [2016-03-11 15:37:58] ~~~ cd cfengine/
918  [2016-03-11 15:38:03] ~~~ cd files/
919  [2016-03-11 15:38:06] ~~~ cd app_monitoring_zabbix/
920  [2016-03-11 15:38:11] ~~~ cd scripts/
export HISTTIMEFORMAT="%d/%m/%y %T "

Donnera :

484  15/01/18 22:31:08 nano /etc/nginx/nginx.conf
485  15/01/18 22:31:29 service nginx configtest
486  15/01/18 22:31:33 service nginx restart

Sauvegarde MBR et ToC

dd if=/dev/sda of=~/mbr_sda.img bs=512 count=1
sfdisk -d /dev/sda > ~/table_partitions_sda_$(date +%Y%m%d).dmp

Génération de mot de passe

 openssl rand -base64 32

Recherche man page

Recherche des man page commençant par pv

man -k ^pv

donne :

pvchange (8)         - change attributes of a physical volume
pvck (8)             - check physical volume metadata
pvcreate (8)         - initialize a disk or partition for use by LVM
pvdisplay (8)        - display attributes of a physical volume
pvmove (8)           - move physical extents
pvremove (8)         - remove a physical volume
pvresize (8)         - resize a disk or partition in use by LVM2
pvs (8)              - report information about physical volumes
pvscan (8)           - scan all disks for physical volumes

Strace

Commande strace permettant d’attacher tous les process en sorti du grep, très pratique dans le cas où on peut sortir un serveur de production.

ps auxw | grep sbin/apache | awk '{print"-p " $2}' | xargs strace -f

Permet de sortir des stats sur les appels systèmes réalisés pour tous les process en sorti du grep

ps auxw | grep sbin/apache | awk '{print"-c -p " $2}' | xargs strace -f

Il est possible de retrouver le file descriptor lié aux syscall facilement par la commande :

ls -lh /proc/*/fd | grep "numéro du file descriptor"

Compression multitread

Une URL avec une étude comparative des solutions de compression utilisant le multithreading.

http://www.linuxtricks.fr/wiki/compresser-en-multithreading-sous-linux

Tar n’est pas multithread

L’avantage d’utiliser ce type de solution est le gain de temps sur une compression massive.

Installation

 apt-get install pigz 

Utilisation

Un exemple d’utilisation placé dans un cron

 0 3 * * 1,4 find /var/lib/syslog/ -type f \( ! -name "*.gz" ! -name "*.bz2" \) -ctime +3 -exec pigz -f {} + 

Lorsque le cron est lancé, il ignore les fichiers déjà compressés, compresse les fichiers datant de plus de +3*24H avec pigz, ici la présence du xarg permet de ne pas lancer la commande x fois le nombre de fichiers sur la sortie du find.

Pour information, la solution pigz utilise 8 cores CPU par défaut.

Petit retour d’expérience sur une compression monothread (bzip2) : 1,5 jours d’execution pour 5To de data pour 4h via une compression multithread (pigz).

Voir un cas d’usage dans un script de sauvegarde ici backup

Debian < 8.x

/etc/init.d/nfs-common stop
/etc/init.d/nfs-common start
/etc/init.d/nfs-common restart

ou

service nginx stop|start|restart|configtest 

retrait d’un daemon au démarrage

insserv -r bind9
update-rc.d -f bind9 remove

Debian > 8.x Systemctl

Activer ou désactiver un service

systemctl disable bind9
systemctl enable ssh

Lancement d’un service

systemctl start nginx
systemctl stop nginx

Voir le temps de start d’une machine

systemd-analyze blame
systemd-analyze time

Générer un graph

systemd-analyze plot > plot.svg
eog plot.svg 

Gestion NTP

configuration dans /etc/systemd/timesyncd.conf

[Time]
NTP=10.4.0.1 10.4.0.2
FallbackNTP=ntp.ubuntu.com

Gestion du processus

systemctl status systemd-timesyncd.service
systemctl start systemd-timesyncd.service
systemctl enable systemd-timesyncd.service

Contrôle

timedatectl
  
Local time: mer. 2018-01-17 14:34:04 CET
Universal time: mer. 2018-01-17 13:34:04 UTC
RTC time: mer. 2018-01-17 13:34:04
Time zone: Europe/Paris (CET, +0100)
Network time on: yes
NTP synchronized: yes
RTC in local TZ: no

Bind de Macros

Installation :

apt-get install xbindkeys
apt-get install xvkbd
xbindkeys --defaults > /home/user1/.xbindkeysrc

Exemple de configuration :

Dans /home/user1/.xbindkeysrc :

"xvkbd -xsendevent -text "find . -type f -cmin -70""
  control+F2

Relancer le process

killall xbindkeys
xbindkeys

La combinaison des touches CTRL+F2 sortira la commande : find . -type f -cmin -70

Ubuntu LTS status

Cette commande permet de connaitre avec précision la date limite de support de la distribution et de ses paquets.

ubuntu-support-status
Support status summary of 'srv-test-01':

You have 505 packages (95.8%) supported until avril 2021 (5y)
You have 2 packages (0.4%) supported until avril 2019 (3y)
You have 10 packages (1.9%) supported until janvier 2023 (5y)

You have 0 packages (0.0%) that can not/no-longer be downloaded
You have 10 packages (1.9%) that are unsupported

Problem with defaults entries

Dans les log ou dans les mails, ceci peut la ligne de log ci-dessous, lorsque qu’on utilise une authentification externe.

srv-01 : Jun 29 14:27:43 : user : problem with defaults entries ; TTY=pts/0 ; PWD=/home/user ; 

Résolution : dans /etc/nsswitch remplacer :

sudoers:        files sss     
 
par  sudoers:        files

Ceci n’empêche pas un groupe de l’AD définit en tant que sudo user de fonctionner.

Correction du bug Homedir pour user AD

echo "session required pam_mkhomedir.so skel=/etc/skel/ umask=0022" | sudo tee -a /etc/pam.d/common-session