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

Некоторые команды управления postfix MTA

Посмотреть активные настройки Postfix:
postconf -d
Посмотреть сколько сообщений в очереди:
mailq | grep Requests
Посмотреть конкретно что в очереди:
mailq
Пнуть очередь на немедленную доставку:
postsuper -r ALL; postfix flush
Пнуть конкретное письмо по ID:
postsuper -r ID
Удалить письмо по ID:
postsuper -d ID
Удаление группы писем от определенного FROM (на примере MAILER-DAEMON):
FreeBSD:
mailq | grep 'MAILER-DAEMON' | awk '{print $1}' | xargs -I{} -n1 postsuper -d {}
Linux:
mailq | grep 'MAILER-DAEMON' | awk '{print $1}' | xargs -I{} -n1 /usr/sbin/postsuper -d {}
Удаление группы писем от определенного FROM в статусе REQUIRE:
mailq | grep 'MAILER-DAEMON' | awk '{print $1}' | tr -d '*' | xargs -I{} -n1 postsuper -d {}

Исключение пакетов из операции в yum (RHEL)

Итогда нужнообновить пакеты, не трогая при этом например ядро или еще миллион охожих ситуаций, где надо исключить пакет из обработки.
Есть два способа.
1) Единоразово – когда запускаете yum, использовать опцию –exclude:
yum –exclude=package* update
yum –exclude=php* update
yum –exclude=*rrd* update
yum –exclude=kernel*,*snmp,perl* update
2) Добавить необходимые пакеты в исключения в конфигурационном файле /etc/yum.conf :
exclude=php* kernel*
Выглядеть это будет примерно так:
[main]
cachedir=/var/cache/yum
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
distroverpkg=redhat-release
tolerant=1
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
exclude=php* kernel*
Теперь эти пакеты исключатся из обработки любыми командами yum.