Назад | Перейти на главную страницу

Как заблокировать атаку на Wordpress с помощью UFW на сервере Ubuntu?

В коробке с Ubuntu 14 у меня странная активность, похожая на атаку на странице Wordpress. Журнал Apache показывает многое из этого:

191.96.249.54 - - [25/May/2016:00:46:57 +0200] "POST /xmlrpc.php HTTP/1.0" 500 585 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
191.96.249.53 - - [25/May/2016:00:46:58 +0200] "POST /xmlrpc.php HTTP/1.0" 500 585 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
191.96.249.54 - - [25/May/2016:00:46:59 +0200] "POST /xmlrpc.php HTTP/1.0" 500 585 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
191.96.249.53 - - [25/May/2016:00:47:00 +0200] "POST /xmlrpc.php HTTP/1.0" 500 585 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"

Это похоже на ситуацию, описанную здесь: http://blog.carlesmateo.com/2014/08/30/stopping-and-investigating-a-wordpress-xmlrpc-php-attack/

Первое, что мне пришло в голову, это заблокировать этих парней с помощью iptables, поэтому я поставил:

iptables -A INPUT -s 191.96.249.54 -j DROP
iptables -A INPUT -s 191.96.249.53 -j DROP

Но это продолжалось.

Поскольку я использую UFW, я добавил правила UFW:

ufw deny from 191.96.249.54 to any
ufw deny from 191.96.249.53 to any

Но ничего не улучшилось. Затем я отключил UFW, и он остановился!

Правила Mu UFW (статус ufw):

Status: active

To                         Action      From
--                         ------      ----
80                         ALLOW       Anywhere
443                        ALLOW       Anywhere
143                        ALLOW       Anywhere
993                        ALLOW       Anywhere
25/tcp                     ALLOW       Anywhere
465/tcp                    ALLOW       Anywhere
Anywhere                   DENY        191.96.249.54
Anywhere                   DENY        191.96.249.53
80 (v6)                    ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)
143 (v6)                   ALLOW       Anywhere (v6)
993 (v6)                   ALLOW       Anywhere (v6)
25/tcp (v6)                ALLOW       Anywhere (v6)
465/tcp (v6)               ALLOW       Anywhere (v6)

Затем я понял, что самое первое правило - разрешить http ... Я удалил его и добавил снова, так что теперь он находится в конце цепочки. Это помогло. Видимо мне следует вставить такое правило блокировки:

ufw insert [position] [theRule]

Я прав? Ну, по-видимому, это сработало, но это хорошая практика или мне следует сделать это по-другому?

Предлагаю узнать о ipset.

Как и в случае с UFW, iptables -A добавляет новое правило в конце цепочки netfilter. Это означает, что если перед добавленными вами правилами существовало правило сопоставления, ваши правила не сработают.

Итак, в вашем случае вы должны были ввести

iptables -I INPUT -s xxx.xxx.xxx.xxx -j DROP

который по умолчанию вставляет правило в первую позицию в цепочке.

Проверьте всю цепочку с помощью команды iptables-save.

Теперь изменение цепочки правил iptables каждый раз, когда вы получаете атаку, будет очень проблематично и чревато опасностями, особенно если вы используете «blanket DROP». Плюс необходимость удаления правил.

Итак, используйте ipset. Вот хорошее руководство с отличными примерами и некоторым анализом влияния на производительность:

http://daemonkeeper.net/781/mass-blocking-ip-addresses-with-ipset/

Главное, что нужно сделать, - это ввести эти две команды:

ipset create blacklist hash:ip hashsize 4096
iptables -I INPUT -m set --match-set blacklist src -p TCP \
    --destination-port 80 -j DROP

Теперь вы можете просто добавить в набор подозрительные IP-адреса. blacklist, и никогда больше не придется бороться с порядком обработки правил.