Настройка защищенного доступа к блогу

Наконец-то разобрался с правильной настройкой протокола HTTPS для блога. Итак, по пунктам:

Доступность протокола HTTPS

Проверяем, что ваш сайт доступен по адресу https://example.com. Если недоступен, тогда эта инструкция вам не подходит.

Поисковые роботы

Создаем файл robots-https.txt в корне сайта с таким содержимым:

User-agent: *
Disallow: /

Добавляем правило в .htaccess (сразу после «RewriteEngine On»):

RewriteCond %{HTTPS} on
RewriteRule ^robots\.txt$ robots-https.txt

Это запретит поисковым роботам индексировать содержимое сайт по https. По адресу https://example.com/robots.txt должно выдаваться содержимое robots-https.txt.

Доступ к админке и странице логина

Добавляем в wp-config.php:

define('FORCE_SSL_ADMIN', true);
define('FORCE_SSL_LOGIN', true);

Это хоть немного убережет вас от кражи паролей с помощью перехвата трафика.

Запрет HTTPS на остальных страницах блога

Добавляем правило в .htaccess (сразу после robots-https):

RewriteCond %{SERVER_PORT} ^443$
RewriteCond %{REQUEST_URI} !^/(wp-admin/|wp-login|wp-includes/)
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

Это позволит автоматически перекидывать ваших пользователей со страниц вида https://example.com на http://example.com, если они вдруг придут с поисковика на эту страницу. При этом не портится защищенный доступ к админке и странице логина.

Скрипт для проверки интернета
#!/bin/sh
 
# Какие хосты проверяем (через пробел).
hosts="8.8.8.8 ya.ru www.ru"
# Файл, который будет создаваться, если интернета нет.
offline="/tmp/inetoff"
 
# Функция проверяет с помощью ping доступность хостов. 
# Возвращает 0, если хотя бы один хост доступен.
check_hosts() {
    for host in ${hosts}; do
        # Запускаем ping с 4-мя запросами
        /sbin/ping -c 4 $host > /dev/null 2>&1
        if [ $? -eq 0 ]; then
            return 0;
        fi
    done
    return 1;
}
 
# Процедура, которая пишет сообщение 
# в /var/log/message с тегом INTERNET.
message() {
    /usr/bin/logger -t INTERNET $1
}
 
check_hosts
 
# Хотя бы один хост доступен?
if [ $? -eq 0 ]; then
    # Флаг отсутствия интернета существует?
    if [ -e ${offline} ]; then
        # Значит интернет только что появился.
        message "Network is up"
        # Удаляем флаг отсутствия интернета.
        /bin/rm -f ${offline}
    fi
else
    # Ни один хост не ответил и флага еще нет.
    if [ ! -e ${offline} ]; then
        # Значит интернет только что пропал.
        message "Network is down"
        # Создаем флаг отсутствия интернета.
        /usr/bin/touch ${offline}
    fi
fi

Засовываем вызов скрипта в крон:

# Запускать каждые 5 минут
*/5  *  *  *  *  /path_to_script/lancheck.sh

Теперь в /var/log/message видно, когда интернет появился или пропал.

Почтовый сервер Exim: настройка переадресации для нескольких хостов

Заменяем стандартный роутер system_aliases на этот:

begin routers
    vdom_aliases:
        driver = redirect
        allow_defer
        allow_fail
        domains = dsearch;/usr/local/etc/exim/virtual
        data = ${expand:${lookup{$local_part}lsearch*@{/usr/local/etc/exim/virtual/$domain}}}
        retry_use_local_part
        pipe_transport = address_pipe
        file_transport = address_file

В папке /usr/local/etc/exim/virtual создаем текстовые файлы с названием домена следующего вида:

# Почту для ravenor@domain доставлять пользователю ravenor@domain
ravenor : ravenor
# Почту для inquisitor@domain доставлять пользователю ravenor@domain
inquisitor : ravenor
# Почту для imperator@domain принимать безо всяких вопросов и кидать в /dev/null
imperator : :blackhole:
# Почту для heretic@domain отбрасывать на этапе SMTP-сессии
heretic : :fail:
# Все остальную почту доставлять пользователю heretic@domain
# (она будет отброшена правилом, которое задано для heretic)
* : heretic
Почтовый сервер Exim: отправляем почту через relay провайдера без авторизации

Удаляем стандартный dnslookup:

begin routers
    dnslookup:
        driver = dnslookup
        domains = !+local_domains
        transport = remote_smtp
        ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
        no_more

Добавляем в секцию routers:

begin routers
   example_router:
        driver = manualroute
        domains = !+local_domains
        transport = example_smtp
        route_list = * smtp.example.com

Удаляем стандартный транспорт remote_smtp из секции transports:

begin transports
    remote_smtp:
        driver = smtp

Добавляем новый транспорт в секцию transports:

begin transports
    example_smtp:
        driver = smtp
        hosts = smtp.example.com
Чумовой девайс — Wi-Fi роутер Zyxel Keenetic

Прикупил на днях чумовой девайс Zyxel Keenetic (выбрать ценник и купить можно на Яндекс.Маркет). Рекомендую всем и каждому, кому нужен Wi-Fi роутер.

Внутри железки стоит Linux+BusyBox. Те, кому нечем заняться, могут с легкостью получить root доступ и ставить любые *nix приложения. Хошь www поднимай, хошь ftp, а еще можно попробовать получить доступ к светодиодам и играть светомузыку. Умеет качать торренты на любой диск, подключенный к USB. В общем, девайс прекрасен.

Zyxel Keenetic

Несмотря на убогое электропитание, от которого UPS через день исходит воплями и ревом вентилятора, разрывов не было уже четырнадцать дней!!

Zyxel Keenetic uptime

А еще keenetic умеет вести лог на удаленный syslog. Если вы собираетесь поднимать syslog на серваке с FreeBSD, вот настройки:

/etc/rc.conf

syslogd_enable="YES"
syslogd_flags="-a 10.0.0.1:*"

/etc/syslog.conf (в конце файла)

+router
*.*                     /var/log/router.log

/etc/hosts

10.0.0.1    router

, где 10.0.0.1 — это адрес вашего роутера.

Блог Евгения Жирнова