Добавление статического маршрута в Linux Ubuntu/Debian

Для этого надо открыть файл описания сетевых интерфейсов:

sudo nano /etc/network/interfaces

Здесь найти секцию описания нужного интерфейса, например em1 и в конце секции добавить строчку вида (меняя подсеть, шлюз и имя интерфейса на ваше):

up route add -net 192.168.40.0/24 gw 192.168.30.1 dev em1

Файл должен выглядеть примерно так:

# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto em1
iface em1 inet static
address 192.168.30.2
netmask 255.255.255.0
broadcast 192.168.30.255
gateway 192.168.30.254
#persistent static routes
up route add -net 192.168.40.0/24 gw 192.168.30.1 dev em1

Чтобы изменения вступили в силу, перезапускаем интерфейс:

sudo ifdown em1 && sudo ifup em1

Смотрим текущие маршруты:

route -n

Ссылки:

  1. https://www.networkinghowtos.com/howto/adding-persistent-static-routes-on-ubuntu/#:~:text=To%20set%20up%20a%20static,etc%2Fnetwork%2Finterfaces%20file.&text=The%20route%20will%20get%20set,will%20be%20set%20up%20on.

Подключение репозитория Epel к CentOS 6.x

Подключение репозитория Epel 6.7 к CentOS 6.x. Идем на сайт Эпеля, и скачиваем пакет или скармливаем установщику по URL
 
http://ftp.tlk-l.net/pub/mirrors/fedora-epel/6/i386/repoview/epel-release.html

rpm -Uvh http://ftp.tlk-l.net/pub/mirrors/fedora-epel/6/i386/epel-release-6-7.noarch.rpm
 
UPDATE:
 
Поскольку RHEL6 достигла конца суппорта, то так просто установить уже не получится. Вместо этого нужно вручную создать конфиг репозитория:
 
nano /etc/yum.repos.d/epel.repo
 
С содержимым:
[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=0

После этого делаем yum update

Источники:

  1. https://fedoraproject.org/wiki/EPEL#END_OF_LIFE_RELEASES
  2. https://fedora-archive.ip-connect.info/epel/6/x86_64/Packages/
  3. https://quaded.com/%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%B8%D1%82%D1%8C-%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%B9-epel-%D0%B2-centos-6/

Debian пропадают правила iptables после перезагрузки

На старом сервере под управлением Debian 6 такая беда была – после перезагрузки все добавленные правила iptables исчезали. Что было не особо удобно.

Дабы это побороть, сначала сохраняем правила в файл (путь и имя могут быть любые):

iptables-save > /root/iptables.conf

Добавляем следующую команду в /etc/rc.local для применения правил после ребута:

iptables-restore < /etc/iptables.conf

Лучше добавить полный путь к команде, узнать который можно с помощью

which iptables-restore

Также можно добавить крон – каждый час восстанавливать правила. А то у меня они почему-то даже без ребута исчезали периодически.

Ссылки:

  1. https://unix.stackexchange.com/questions/52376/why-do-iptables-rules-disappear-when-restarting-my-debian-system

Changing hostname on RHEL

For RHEL 6:

1. Change the HOSTNAME line in /etc/sysconfig/network

2. Change the hostname (FQDN and alias) in /etc/hosts

3. Run /bin/hostname new_hostname for the hostname change to take effect immediately.

4. Run /sbin/service syslog restart for syslog to log using the new hostname.

A reboot is not required to change the system hostname.

For RHEL 7:

Method 1 : hostnamectl

Get the current hostname of the system :

hostnamectl status
Static hostname: localhost.localdomain
Icon name: computer
Chassis: n/a
Machine ID: 55cc1c57c7f24ed0b0d352648024cea6
Boot ID: a12ec8e04e6b4534841d14dc8425e38c
Virtualization: vmware
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-123.el7.x86_64
Architecture: x86_64

To set new hostname (butterfly) for the machine :

hostnamectl set-hostname butterfly

Re-login and verify the new hostname :

hostnamectl
Static hostname: butterfly
Pretty hostname: Geeks LAB
Icon name: computer
Chassis: n/a
Machine ID: 55cc1c57c7f24ed0b0d352648024cea6
Boot ID: a12ec8e04e6b4534841d14dc8425e38c
Virtualization: vmware
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-123.el7.x86_64
Architecture: x86_64

Method 2 : nmcli

Get the current hostname :

nmcli general hostname
localhost.localdomain

To change the hostname to butterfly :

nmcli general hostname butterfly

We need to restart the systemd-hostnamed service for the changes to take effect :

service systemd-hostnamed restart

Re-login and verify the hostname change :

hostname
butterfly

Method 3 : nmtui

We can also change the hostname using the nmtui tool :

nmtui

Select the option to “set the hostname” and hit enter

change hostname nmtui

Set the hostname

Restart the systemd-hostnamed service for the changes to take effect.

service systemd-hostnamed restart

Re-login and verify the hostname change.

Method 4 : Edit /etc/hostname

cat /etc/hostname
localhost.localdomain

To change the hostname to “butterfly”, replace the content of the /etc/hostname file with “butterfly”

echo "butterfly" > /etc/hostname
cat /etc/hostname
butterfly

Restart the system and verify.

shutdown -r now

Sources:

  1. https://www.thegeekdiary.com/centos-rhel-7-how-to-change-set-hostname/
  2. https://my-hlam.livejournal.com/34233.html?utm_source=3userpost

Java SE JDK. Скачать в консоли linux

Просто так wget-ом Java SE не скачать, т. к. требуется подтверждение лицензионного соглашения. Но выход есть – с помощью утилиты curl:

curl -LOb "oraclelicense=a" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz

Как удалённо перезагрузить роутер Asus RT-N18U

Для начала убедимся, что включен телнет. На Вкладке Administration -> System включаем Enable Telnet -> Yes. Жмём Apply внизу.

Теперь сам bash-скрипт, который можно подвязать к чему угодно. Например, к звонку по Asterisk:

!/bin/bash
(sleep 3;echo user;sleep 3;echo password;sleep 3;echo reboot;sleep 3;) | telnet router_ip

где нужно вписать свои данные:

  • user – имя пользователя (для входа на веб-морду роутера)
  • password – пароль для веб-морды
  • router_ip – IP адрес роутера.

Работает также и с другими подобными роутерами Asus.

Установка GUI дя Nagios Vshell2

ОС – Unumtu 18.04, но с модификациями подходит для любой ОС

Для начала установим требуемый пакет (предполагается что apache2, php, nagios у вас уже установлены и натсроены):

apt-get install php7.2-intl

Теперь скачиваем архив с оболочкой отсюда:

https://github.com/NagiosEnterprises/nagiosvshell/tree/2.x

На сервер, распаковываем и открываем файл конфигурации:

wget https://github.com/NagiosEnterprises/nagiosvshell/archive/2.x.zip
unzip 2.x.zip
cd nagiosvshell-2.x/
nano config.php

Строки, на которые следует обратить внимание, выделены жирным шрифтом. Значения по-умолчанию указаны для nagios3, установленного через пакетный менеджер. У меня уже был nagios 4, установленный внучную. Необходимые поправки для путей установки, расположения конфигурационного файла сайта и файла пользователей стандартного Nagios GUI дописываем в скобки ” в разделе $custom = array(

<?php
Custom values
#
Add any custom values here. If a value is empty, the default value defined
below is used.
$custom = array(
'targetdir' => '',
'apacheconfdir' => '',
'apacheconffile' => '',
'apacheuser' => '',
'apachegroup' => '',
'etc_conf' => '',
'htpasswd_file' => '',
# See config/vshell.conf for explanations of each value
'vshell_baseurl' => '',
'TTL' => '',
'update_interval' => '',
'nagios_coreurl' => '',
'lang' => '',
);
Default values
#
Do not edit these defaults
$defaults = array();
$defaults['debian'] = array(
'targetdir' => '/usr/local/vshell2',
'apacheconfdir' => '/etc/apache2/sites-enabled',
'apacheconffile' => 'vshell2.conf',
'apacheuser' => 'www-data',
'apachegroup' => 'www-data',
'etc_conf' => 'vshell2.conf',
'htpasswd_file' => '/etc/nagios3/htpasswd.users',
'vshell_baseurl' => 'vshell2',
'nagios_coreurl' => 'nagios3',
'TTL' => '90',
'update_interval' => '90',
'lang' => 'en_GB',
);
$defaults['redhat'] = array(
'targetdir' => '/usr/local/vshell2',
'apacheconfdir' => '/etc/httpd/conf.d',
'apacheconffile' => 'vshell2.conf',
'apacheuser' => 'apache',
'apachegroup' => 'apache',
'etc_conf' => 'vshell2.conf',
'htpasswd_file' => '/etc/nagios/passwd',
'vshell_baseurl' => 'vshell2',
'nagios_coreurl' => 'nagios',
'TTL' => '90',
'update_interval' => '90',
'lang' => 'en_GB',
);

Теперь даём права на запуск и запускаем install.php:

chmod +x install.php
./install.php

Скрипт сделает всё сам. И если все данные были указаны правильно в конфиг-файле, то мы сможем увидить новую оболочку по адресу http://your_server_ip/vshell2

Если видите ошибку 500 или ещё что – лопатим логи apache (/var/log/apache2/error.log) на предмет того что пошло не так.

Linux, команда для траблшутинга загрузки I/O подсистемы

Быстрая заметка. Иногда случается что дисковая I/O подсистема чем-то сильно нагружена и не понятно, каким именно процессом. В определении виновника может помочь следующая команда:

top -b -n 1 | awk '{if (NR <=7) print; else if ($8 == "D") {print; count++} } END {print "Total status D (I/O wait probably): "count}' > topsave.txt

Python скриптинг: как зайти на FTP или FTPS

Бывает нужно что-то скачать/загрузить на удалённый сервер FTP или FTPS (не путать с SFTP) в скрипте на пайтоне.

Подключаем необходимые библиотеки:

from ftplib import FTP_TLS
from ftplib import FTP

Задаём параметры подключения к FTP хосту:

host = "some_ftp.com"
port = 21
username = "username"
password = "password"

Подключаемся к обычному FTP (в примере скачиваем файл на диск):

ftp = FTP(host)
ftp.login(username, password)
try:
    handle = open('/path_to_local_file/filename', 'wb')
    ftp.retrbinary('RETR /path_to_remote_file/filename, handle.write)
    handle.close()
except:
    pass
ftp.quit()

Все команда нужно указывать по спецификации FTP протокола, например такой.

Осовные команды:
RETR – получить файл с FTP в переменную или по хендлеру записать в локальный файл;
LIST – показать список файлов/директорий в указанной или текущей по-умолчанию;
NLST – то же, что и LIST, но возвращает только имена файлов/директорий;
STOR – загрузить с презаписью файл на FTP-сервер;
и другие

Подключение к FTPS выполняется схожим образом:

try:
    handle = open('/path_to_local_file/filename', 'wb')
    ftps = FTP_TLS(host)
    ftps.login(username, password)
    ftps.prot_p()
    ftps.retrbinary('RETR /path_to_remote_file/filename', handle.write)
    ftps.quit()
    handle.close()
except:
    pass

Для работы FTP_TLS нужен пайтон 2.7+, если у вас только 2.6, то придётся сделать одно из следующего:
1. Доустановить пайтон 2.7, например как описано здесь для Oracle Linux 6:

Редактируем /etc/yum.repos.d/public-yum-ol6.repo и убеждаемся, что enabled=1 в следующем параграфе:

[ol6_software_collections]
name=Software Collection Library release 3.0 packages for Oracle Linux 6 (x86_64)
baseurl=http://yum.oracle.com/repo/OracleLinux/OL6/SoftwareCollections/x86_64/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=1

Далее выполняем команды от рута/судо:

yum install scl-utils
yum install python27
source /opt/rh/python27/enable
python --version

Если при запуске скрипта по cron (а скорее всего так и будет) выбивает ошибку вида:

error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory

То необходимо добавить путь к библиотеке в /etc/ld.so.conf и запустить команду ldconfig, которая сама всё пропишет.

или

2. Cкачать дистрибутив пайтона 2.7 отсюда и вытащить фал ftplib.py и положить его в папку со скриптом (если скрипт запускается по cron, то это может не сработать):

wget http://www.python.org/ftp/python/2.7.1/Python-2.7.1.tgz
tar -zxvf Python-2.7.1.tgz Python-2.7.1/Lib/ftplib.py
cp Python-2.7.1/Lib/ftplib.py /path_to_script/

или

3. Заходить на FTPS вызывая bash команды например lftp с помощью модуля subprocess.

Ссылки:

  1. https://docs.python.org/3/library/ftplib.html
  2. https://stackoverflow.com/questions/11573817/how-to-download-a-file-via-ftp-with-python-ftplib
  3. https://stackoverflow.com/questions/20842732/libpython2-7-so-1-0-cannot-open-shared-object-file-no-such-file-or-directory
  4. https://docs.cloudera.com/documentation/enterprise/6/6.0/topics/install_python_27.html

Как разбанить IP в fail2ban

Если вы несколько раз неправильно пытались подключиться к серверу Linux, где настроен fail2ban, то вы будете занесены в черный список и не сможете подключиться заданное на сервере количество времени или вообще навсегда.

Чтобы разбанить IP адрес, нужно на сервере выполнить следующие команды.

Вначале посмотреть цепочки правил (jail):

fail2ban-client status

Результат будет что-то вроде такого:

Status
|- Number of jail: 3
`- Jail list: apache, ssh, apache-modsecurity

Затем в разбаниваем IP в нужной “клетке” (цепочке правил):

fail2ban-client set JAILNAMEHERE unbanip IPADDRESSHERE

В старых версиях Fail2ban может не существовать команды unbanip, тогда вы будете получать ошибку вида:

Invalid command (no set action or not yet implemented)

Здесь придётся перезагрузить “клетку”, что уберёт из неё все баны:

fail2ban-client reload JAILNAMEHERE

Также можно добавить IP в список исключений чтобы он не блокировался, если вы что-то тестируете:

fail2ban-client set sasl addignoreip 198.32.110.100

Посмотреть, какие IP забанены в “клетке” можно с помощью команды:

fail2ban-client status JAILNAMEHERE

Ну и посмотреть список доступных команд:

fail2ban-client -h