Изменение значения по умолчанию в MySQL столбцах

Приведу пример указания или изменения значения по умолчанию в MySQL столбце.
Посмотрим список таблиц в базе данных:

SHOW TABLES;

Посмотрим структуру интересующей нас таблицы:

DESCRIBE internet_main;

Допустим колонка activate имеет тип date и значение по умолчанию 0000-00-00, а мы хотим сделать 3000-01-01, то выполним sql запрос:

ALTER TABLE internet_main ALTER activate SET DEFAULT '3000-01-01';

Можно также удалить значение по умолчанию:

ALTER TABLE internet_main ALTER activate DROP DEFAULT;

Или вернуть как было:

ALTER TABLE internet_main ALTER activate SET DEFAULT '0000-00-00';

В строгом режиме MySQL может не дать установить значение 0000-00-00, поэтому можно временно отключить строгий режим:

SET sql_mode = '';

Как включить или отключить Proxy ARP в Linux

Посмотрим статус Proxy ARP (1 — включен, 0 — отключен):

cat /proc/sys/net/ipv4/conf/all/proxy_arp

Можно посмотреть на конкретном сетевом интерфейсе (где eth0 — имя сетевого интерфейса):

cat /proc/sys/net/ipv4/conf/eth0/proxy_arp

Включить Proxy ARP можно так:

sudo su
echo 1 > /proc/sys/net/ipv4/conf/all/proxy_arp
echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp

Или так:

sudo sysctl net.ipv4.conf.all.proxy_arp=1
sudo sysctl net.ipv4.conf.eth0.proxy_arp=1
sudo sysctl -p

Для выключения Proxy ARP команды аналогичны, нужно лишь указать 0 вместо 1.

Сделанные выше изменения сбросятся после перезапуска системы, чтобы этого не произошло, откроем файл /etc/sysctl.conf в любом текстовом редакторе:

sudo nano /etc/sysctl.conf

И укажем:

net.ipv4.conf.all.proxy_arp=1
net.ipv4.conf.eth0.proxy_arp=1

При необходимости можно посмотреть приходящие ARP пакеты через tcpdump:

sudo tcpdump -n -i eth0 -e arp

Установка и настройка accel-ppp (IPoE) для ABillS

На тесте выполню установку accel-ppp в Ubuntu Server 16.04 LTS для ABillS.

Если необходимо, то создаем vlan интерфейсы как я писал тут — Добавление vlan в Ubuntu для ABillS

Переключимся на root пользователя:

sudo su

Установим необходимые компоненты:

apt-get update
cd /usr/src
apt-get install make cmake libcrypto++-dev libssl-dev libpcre3 libpcre3-dev git lua5.1 liblua5.1-0-dev
apt-get install linux-headers-`uname -r`

Смотрим какая есть последняя версия accel-ppp и скачиваем её с https://sourceforge.net/projects/accel-ppp/files/
Если accel-ppp будет обслуживать не большое количество клиентов, то можно скачать свежий исходный код из git в котором могут встретится баги.

Распаковываем скачанный архив:

tar -xvf accel-ppp-1.11.2.tar.bz2

Соберем и установим accel-ppp (VLAN_MON_DRIVER можно не устанавливать если на сервере не используются VLAN):

mkdir accel-ppp-build
cd accel-ppp-build
cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DKDIR=/usr/src/linux-headers-`uname -r` -DRADIUS=TRUE -DSHAPER=TRUE -DLOG_PGSQL=FALSE -DLUA=TRUE -DBUILD_IPOE_DRIVER=TRUE -DBUILD_VLAN_MON_DRIVER=TRUE ../accel-ppp-1.11.2
make
make install

Подключим модуль и проверим:

insmod /usr/src/accel-ppp-build/drivers/ipoe/driver/ipoe.ko
lsmod | grep ipoe

Приступим к ручной настройке.
Создадим скрипт автозапуска:

nano /etc/init.d/accel-ppp

Добавим в него содержимое:

#!/bin/sh
# /etc/init.d/accel-ppp: set up the accel-ppp server
### BEGIN INIT INFO
# Provides:          accel-ppp
# Required-Start:    $networking
# Required-Stop:     $networking
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
### END INIT INFO

set -e

PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/sbin;
ACCEL_PPTPD=`which accel-pppd`
. /lib/lsb/init-functions

if test -f /etc/default/accel-ppp; then
    . /etc/default/accel-ppp
fi

if [ -z $ACCEL_PPPTD_OPTS ]; then
  ACCEL_PPTPD_OPTS="-c /etc/accel-ppp.conf"
fi

case "$1" in
  start)
        log_daemon_msg "Starting accel-ppp server" "accel-pppd"
        if [ x`lsmod |awk /ipoe/'{print $1}'` = x ]; then
          insmod /usr/src/accel-ppp-build/drivers/ipoe/driver/ipoe.ko
        fi
        if start-stop-daemon --start --quiet --oknodo --exec $ACCEL_PPTPD -- -d -p /var/run/accel-pppd.pid $ACCEL_PPTPD_OPTS; then
            log_end_msg 0
        else
            log_end_msg 1
        fi
  ;;
  restart)
        log_daemon_msg "Restarting accel-ppp server" "accel-pppd"
        if [ x`lsmod |awk /ipoe/'{print $1}'` = x ]; then
          insmod /usr/src/accel-ppp-build/drivers/ipoe/driver/ipoe.ko
        fi
        start-stop-daemon --stop --quiet --oknodo --retry 180 --pidfile /var/run/accel-pppd.pid
        if start-stop-daemon --start --quiet --oknodo --exec $ACCEL_PPTPD -- -d -p /var/run/accel-pppd.pid $ACCEL_PPTPD_OPTS; then
            log_end_msg 0
        else
            log_end_msg 1
        fi
  ;;

  stop)
        log_daemon_msg "Stopping accel-ppp server" "accel-pppd"
        start-stop-daemon --stop --quiet --oknodo --retry 180 --pidfile /var/run/accel-pppd.pid
        log_end_msg 0
  ;;

  status)
    do_status
  ;;
  *)
    log_success_msg "Usage: /etc/init.d/accel-ppp {start|stop|status|restart}"
    exit 1
    ;;
esac

exit 0

Сделаем исполняемым и добавим а автозапуск:

chmod +x /etc/init.d/accel-ppp
update-rc.d accel-ppp defaults

Создадим файл lua

nano /etc/accel-ppp.lua

Добавим в него:

function username(pkt)
return pkt:hdr('chaddr')
end

Создадим файл ротации логов:

nano /etc/logrotate.d/accel-ppp

Добавим в него:

/var/log/accel-ppp/*.log {
      rotate 7
      daily
      size=100M
      compress
      missingok
      sharedscripts
      postrotate
              test -r /var/run/accel-pppd.pid && kill -HUP `cat /var/run/accel-pppd.pid`
      endscript
}

Откроем в редакторе словари:

nano /usr/local/share/accel-ppp/radius/dictionary
nano /usr/local/freeradius/etc/raddb/dictionary

Добавим в конце:

ATTRIBUTE DHCP-Router-IP-Address 241 ipaddr
ATTRIBUTE DHCP-Mask              242 integer
ATTRIBUTE L4-Redirect      243 integer
ATTRIBUTE L4-Redirect-ipset      244 string
ATTRIBUTE DHCP-Option82          245 octets

# Limit session traffic
ATTRIBUTE Session-Octets-Limit 227 integer
# What to assume as limit - 0 in+out, 1 in, 2 out, 3 max(in,out)
ATTRIBUTE Octets-Direction 228 integer
# Connection Speed Limit
ATTRIBUTE PPPD-Upstream-Speed-Limit 230 integer
ATTRIBUTE PPPD-Downstream-Speed-Limit 231 integer
ATTRIBUTE PPPD-Upstream-Speed-Limit-1 232 integer
ATTRIBUTE PPPD-Downstream-Speed-Limit-1 233 integer
ATTRIBUTE PPPD-Upstream-Speed-Limit-2 234 integer
ATTRIBUTE PPPD-Downstream-Speed-Limit-2 235 integer
ATTRIBUTE PPPD-Upstream-Speed-Limit-3 236 integer
ATTRIBUTE PPPD-Downstream-Speed-Limit-3 237 integer
ATTRIBUTE Acct-Interim-Interval 85 integer
ATTRIBUTE Acct-Input-Gigawords    52      integer
ATTRIBUTE Acct-Output-Gigawords   53      integer

Откроем файл конфигурации accel-ppp:

nano /etc/accel-ppp.conf

И добавим содержимое (подстроим под свои нужды, изменим имена сетевых интерфейсов, IP nas, radius secret, для каждого раздаваемого пула в разделе ipoe указывается шлюз и маска, например gw-ip-address=10.0.0.1/24, но если от radius передаются attr-dhcp-router-ip и attr-dhcp-mask, то они будут в приоритете):

#ABillS
[modules]
log_file
radius
ipoe
ippool
shaper
sigchld
#pppd_compat

[core]
log-error=/var/log/accel-ppp/core.log
thread-count=2

[radius]
dictionary=/usr/local/share/accel-ppp/radius/dictionary
#nas-identifier=accel-ipoe
nas-ip-address=192.168.1.1
server=127.0.0.1,radsecret,auth-port=1812,acct-port=1813,req-limit=50,fail-timeout=0,max-fail=10,weight=1
dae-server=192.168.1.1:3799,radsecret
verbose=1
attr-tunnel-type=NAS-Identifier
gw-ip-address=192.168.1.1

[ipoe]
verbose=1
username=lua:username
lua-file=/etc/accel-ppp.lua
lease-time=600
max-lease-time=660
renew-time=300
attr-dhcp-client-ip=Framed-IP-Address
attr-dhcp-router-ip=DHCP-Router-IP-Address
attr-dhcp-mask=Framed-IP-Netmask
gw-ip-address=10.0.0.1/24
proxy-arp=1
shared=1
ifcfg=1
mode=L2
start=dhcpv4
interface=eth0
#agent-remote-id=accel-ppp
attr-dhcp-opt82=DHCP-Option82

#[ip-pool]
#gw-ip-address=192.168.0.1/24
#attr=Framed-Pool
#192.168.0.2-254,name=pool1

[client-ip-range]
#10.0.0.0/8

[dns]
dns1=8.8.8.8
dns2=8.8.4.4

[log]
log-file=/var/log/accel-ppp/accel-ppp.log
log-emerg=/var/log/accel-ppp/emerg.log
log-fail-file=/var/log/accel-ppp/auth-fail.log
copy=1
color=1
#per-user-dir=per_user
#per-session-dir=per_session
#per-session=1
level=100

[shaper]
attr=Filter-Id
#down-burst-factor=0.1
#up-burst-factor=1.0
#latency=50
#mpu=0
#mtu=0
#r2q=10
quantum=1500
#moderate-quantum=1
#hightspeed shaper
ifb=ifb0
cburst=1534
#up-limiter=htb
down-limiter=htb
#low speed shaper
up-limiter=police
#down-limiter=tbf
#leaf-qdisc=sfq perturb 10
#leaf-qdisc=fq_codel [limit PACKETS] [flows NUMBER] [target TIME] [interval TIME] [quantum BYTES] [[no]ecn]
#rate-multiplier=1
#fwmark=1
attr-down=PPPD-Downstream-Speed-Limit
attr-up=PPPD-Upstream-Speed-Limit
verbose=10

[pppd-compat]
#ip-up=/etc/ppp/ip-up
#ip-down=/etc/ppp/ip-down
#radattr-prefix=/var/run/radattr
verbose=1

[cli]
verbose=100
telnet=127.0.0.1:2000
tcp=127.0.0.1:2001
password=radsecret

[snmp]
master=0
agent-name=accel-ppp

[connlimit]
limit=10/min
burst=3
timeout=60

Запустим accel-ppp:

sudo /etc/init.d/accel-ppp restart

Можно также воспользоваться скриптом быстрой настройки:

cd /usr/abills/misc/
./autoconf PROGRAMS=accel_ppp

Проверить запущен ли accel_ppp можно так:

/etc/init.d/accel-ppp status
netstat -tulpn | grep accel-ppp
netstat -tulpn | grep :67

Осталось добавить в ABills сервер доступа («Настройки» — «Сервера доступа»).
Например:

IP: 127.0.0.1
Название (a-zA-Z0-9_): NAME
Тип: accel-ipoe Linux accel-ipoe
Alive (sec.): 600
Управление
IP: 127.0.0.1
SSH: 2001
POD/COA: 3799
Пользователь: admin
Пароль (PoD,RADIUS Secret,SNMP): secretpass (также указан в /etc/accel-ppp.conf)

Если нужны дополнительные операции при старте и завершении сессий, то можно расскомментировать pppd_compat и написать скрипты:

sudo nano /etc/ppp/ip-up
sudo nano /etc/ppp/ip-down

Если нужны функции скрипта shaper_start.sh, то сделаем файл исполняемым и добавим в автозапуск:

chmod +x /etc/init.d/shaper_start.sh
update-rc.d shaper_start.sh defaults
/etc/init.d/shaper_start.sh status
/etc/init.d/shaper_start.sh start

И пропишем параметры в файле /etc/rc.conf, например:

abills_shaper_enable="YES"
#abills_ipn_if="ens2f1"
abills_shaper_if="ens2f1"
abills_nat_enable="172.16.11.11:192.168.2.0/24"
abills_nas_id="1"
abills_ipn_nas_id="1"
...

Смотрите также мои статьи:
Скрипты ip-up и ip-down с ipset для Accel-ppp
Как включить или отключить Proxy ARP в Linux
Сборка и установка accel-ppp

Как запустить MySQL сервер на конкретных IP

Подходящим решением которое я нашел для запуска MySQL сервера на конкретных IP адресах, это запустить его на всех и потом отфильтровать подключаемых клиентов через iptables.

Для теста я использовал Ubuntu Server 16.04.5 LTS, который имел более 200 внешних белых IP и был высоконагруженным.

MySQL сервер был установлен так:

sudo apt-get install mysql-server mysql-client
mysql -V
mysql  Ver 14.14 Distrib 5.7.23, for Linux (x86_64) using  EditLine wrapper

К MySQL серверу нужен был доступ от localhost и нескольких адресов в интернете.
Поэтому я запустил MySQL сервер на всех IP, закомментировав «bind-address» в конфигурации:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
#bind-address = 127.0.0.1
#skip-networking
sudo service mysql restart

Создал пользователей для хостов с которых будут выполнятся подключения, более детально смотрите в моей статье — Как создать пользователя MySQL и настроить права доступа

Потом через iptables разрешил подключения только с нужных IP:

/sbin/iptables -A INPUT -s 127.0.0.1 -p tcp --destination-port 3306 -j ACCEPT
/sbin/iptables -A INPUT -s 192.168.1.5 -p tcp --destination-port 3306 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 3306 -j DROP

Правило DROP должно быть только последним, если нужно еще добавить IP в iptables, то удалим DROP и в конце снова добавим:

/sbin/iptables -D INPUT -p tcp --dport 3306 -j DROP
/sbin/iptables -A INPUT -s 192.168.5.33 -p tcp --destination-port 3306 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 3306 -j DROP

Кстати, на тесте при попытке указать несколько адресов в bind-address, MySQL запускался только на последнем:

bind-address = 192.168.1.11
bind-address = 127.0.0.1

Как вариант, у меня возникает еще такая идея, запустить MySQL только на 127.0.0.1 (bind-address = 127.0.0.1), через iptables переадресовать на любой внешний IP, ну и потом правилами выше можно еще ограничить доступ):

sudo sysctl -w net.ipv4.conf.all.route_localnet=1
sudo iptables -t nat -A PREROUTING -i enp0s3 -p tcp -d 192.168.1.11 --dport 3306 -j DNAT --to-destination 127.0.0.1:3306

Смотрите также мои статьи:
IPTables правила для MySQL
Установка и настройка MySQL сервера на Ubuntu

Включение и отключение режима Гибернация в Windows

Приведу пример на Windows 10, на других версиях по сути аналогично.
Сначала откроем командную строку (cmd) от имени администратора и посмотрим какие режимы в данный момент поддерживаются, а также поддерживается ли режим Гибернации:

powercfg –a

Если поддерживается, то для его включения выполним команду:

powercfg /h on

Выключить режим Гибернация можно так:

powercfg /h off

Чтобы добавить выбор режима Гибернация в меню Пуск, откроем Панель управления\Оборудование и звук\Электропитание, слева выберем «Действия кнопок питания», в открывшемся окне «Системные параметры» нажмем «Изменение параметров, которые сейчас не доступны», поставим галочку на «Режим гибернации» и нажмем «Сохранить изменения».

Готово.

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

powercfg.cpl

Кстати можно сгенерировать отчет о диагностике эффективности энергопотребления:

powercfg -energy -duration 60 -output D:\energy-report.html

Смотрите также мою статьи:
Как запланировать завершение работы Windows
Включение и выключение тестового режима в Windows 7

Скрипты ip-up и ip-down с ipset для Accel-ppp

Приведу пример скриптов которые я раньше использовал, в список allowip добавлялись IP адреса которым разрешен интернет, а в denyip которые переадресовывались на http страницу с информацией о негативном депозите.

Скрипт ip-up:

#!/bin/sh
# ip-up
IFNAME=$1
IP=$5
AWK=/usr/bin/awk
DEBUG=0

if [ -f /var/run/radattr.$IFNAME ]; then
  FILTERS=`${AWK}  '/Filter-Id/ {print $2}'  /var/run/radattr.${IFNAME}`
fi;

if [ w${FILTERS} = wNEG_DEPOSIT ] ; then
   /sbin/ipset add denyip $IP -exist
  if [ w${DEBUG} != w ] ; then
    echo "$(date '+%Y/%m/%d %H:%M') --- UP neg filter User: ${USER_NAME} Filter: ${FILTERS} IF: ${IFNAME} IP: $IP" >> /tmp/neg
  fi;
  exit;

else
  if [ "${DEBUG}" != "" ] ; then
    echo "$(date '+%Y/%m/%d %H:%M') --- UP User: ${USER_NAME} Filter: ${FILTERS} IF: ${IFNAME} IP: $IP" >> /tmp/allow
  fi;

  /sbin/ipset add allowip $IP -exist
fi;

Скрипт ip-down:

#!/bin/sh
# ip-down
IFNAME=$1
IP=$5
AWK=/usr/bin/awk
DEBUG=0

if [ -f /var/run/radattr.$IFNAME ]; then
   FILTERS=`${AWK}  '/Filter-Id/ {print $2}'  /var/run/radattr.$IFNAME`
   USER_NAME=`${AWK}  '/User-Name/ {print $2}'  /var/run/radattr.${IFNAME}`
fi;

# Filters
if [ w${FILTERS} = wNEG_DEPOSIT ] ; then
    /sbin/ipset del denyip $IP -exist
   if [ w${DEBUG} != w ] ; then
     echo "$(date '+%Y/%m/%d %H:%M') --- Down neg filter User: ${USER_NAME} Filter: ${FILTERS} IF: ${IFNAME} IP: $IP" >> /tmp/neg
   fi;
   exit;
else
  if [ "${DEBUG}" != "" ] ; then
    echo "$(date '+%Y/%m/%d %H:%M') --- DOWN User: ${USER_NAME} Filter: ${FILTERS} IF: ${IFNAME} IP: $IP" >> /tmp/allow
  fi;

  /sbin/ipset del allowip $IP -exist
fi;

Соответственно должны быть созданы списки:

/sbin/ipset -N allowip iphash
/sbin/ipset -N denyip iphash

И iptables правила.
Разрешаем FORWARD для allowip:

/sbin/iptables -A FORWARD -m set --match-set allowip src -j ACCEPT
/sbin/iptables -A FORWARD -m set --match-set allowip dst -j ACCEPT

NAT:

/sbin/iptables -t nat -I POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source 11.11.11.1 --persistent

Для denyip настраиваем переадресацию всех http запросов, разрешаем FORWARD к странице на которую выполняется переадресация и запрещаем FORWARD по умолчанию для всего остального:

/sbin/iptables -t nat -A PREROUTING -p tcp -m multiport --dport 80 -m set --match-set denyip src -j DNAT --to-destination 11.11.11.1:80
/sbin/iptables -A FORWARD -s 11.11.11.1 -j ACCEPT
/sbin/iptables -A FORWARD -d 11.11.11.1 -j ACCEPT
/sbin/iptables -P FORWARD DROP

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

allownet=`/sbin/ipset -L |grep allowip |sed 's/ //'|awk -F: '{ print $2 }'`
if [ "${allownet}" = "" ]; then
/sbin/ipset -N allowip iphash
fi;

Замечу что при дублирующихся сессиях, будут пропадать IP из списков, так как в списке не может быть одинаковых адресов, а если например есть две дублирующиеся сессии и одна из них завершается, то соответственно и IP будет уделен из списка, соответственно если вторая сессия останется онлайн, то уже без IP в списке.
Поэтому можно отказаться от ipset allowip настроив ip-unnumbered, а в ipset denyip добавлять адреса через L4-redirect и вовсе отказаться от этих скриптов, ну и решить проблему с дублирующимися IP если она есть.

Смотрите также мои статьи:
Скрипт добавления IP адресов из файла в ipset
Сборка и установка accel-ppp

Решение ошибки 80070020 на Nokia Lumia 530

Заметил однажды ошибку при установке приложения на телефоне Nokia Lumia 530 (RM-1017):

Не удалось выполнить запрос.
Повторите попытку позже.
Код ошибки: 80070020

Причиной ошибки оказалась неверная дата и время, до этой ошибки на телефоне вынималась батарея и они сбросились.

По этому я вручную указал дату и время в «Настойки» — «Дата+время», после чего ошибка больше не появлялась.

ABillS+FreeRADIUS+Accel-PPP выдают только один DNS

Однажды после установки ABillS + FreeRADIUS2 + Accel-PPP(ipoe) заметил что по DHCP клиенты получают только один DNS сервер.
Access-Accept от FreeRADIUS был такой:

Sending Access-Accept of id 1 to 127.0.0.1 port 57481
        Session-Timeout = 604800
        PPPD-Downstream-Speed-Limit = 51200
        Framed-IP-Netmask += 255.255.255.0
        Framed-IP-Netmask += 255.255.255.0
        Acct-Interim-Interval = 600
        DHCP-Domain-Name-Server += 8.8.8.8
        DHCP-Domain-Name-Server += 8.8.4.4
        PPPD-Upstream-Speed-Limit = 51200
        Framed-IP-Address = 172.20.20.20
Finished request 40.

Читать далее ABillS+FreeRADIUS+Accel-PPP выдают только один DNS

Как отключить рекламные сообщения от Киевстар

Однажды меня достали рекламные смс сообщения от Киевстар и так как информации по их ручному отключению нет на официальном сайте kyivstar.ua, то я написал в чат технической поддержке:

Здравствуйте. Хочу отключить рекламные сообщения от Киевстар
Если вы хотите отключить информационные и рекламные сообщения от Киевстар, задайте вопрос онлайн-оператору.
Если вы получаете нежелательные сообщения от других провайдеров, обратитесь по контактному номеру, который указан в сообщении, или на сайт этого провайдера.
+380…
Проверяю наличие свободных операторов в чате.
Пожалуйста, ожидайте подключения оператора.

Прождал около 20 минут, и наконец-то появился оператор:

Читать далее Как отключить рекламные сообщения от Киевстар

Настройка тайм-аута SSH сессий

Чтобы настроить тайм-аут SSH сессий, посмотрим где находится файл конфигурации SSH сервера:

sudo find / -name sshd_config

Откроем его в любом текстовом редакторе, например nano:

sudo nano /etc/ssh/sshd_config

Читать далее Настройка тайм-аута SSH сессий