Не блокируются IP в iptables

verfaa

Профессор
Регистрация
29 Янв 2007
Сообщения
417
Реакции
49
Добрый день. Вообщем, пытаюсь заблокировать несколько IP спамеров, чтобы не заходили на сайт и сервер. Для проверки что все работает добавил также свой IP.
В итоге после сохранения командой service iptables save и перезагрузки сервера могу как и раньше заходить на сайт, а также логиниться на сервер через ssh.

Вот как выглядит файл /etc/sysconfig/iptables:

Код:
# Generated by iptables-save v1.4.21 on Thu Dec  8 18:42:17 2016
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [41131:31130358]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 53 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3191 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5191 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A INPUT -s 46.161.9.8/32 -j REJECT --reject-with icmp-port-unreachable
-A INPUT -s 185.121.190.12/32 -j REJECT --reject-with icmp-port-unreachable
-A INPUT -s 41.57.116.0/24 -j REJECT --reject-with icmp-port-unreachable
-A INPUT -s 41.57.117.0/24 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Thu Dec  8 18:42:17 2016

Команда systemctl status iptables выдаёт, что iptables запущен и работает
Код:
# systemctl status iptables
● iptables.service - IPv4 firewall with iptables
   Loaded: loaded (/usr/lib/systemd/system/iptables.service; enabled; vendor preset: disabled)
   Active: active (exited) since Thu 2016-12-08 18:38:34 CET; 4min 6s ago
  Process: 764 ExecStart=/usr/libexec/iptables/iptables.init start (code=exited, status=0/SUCCESS)
Main PID: 764 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/iptables.service

А вот вывод команды iptables -vnL
Код:
# iptables -vnL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination
95808   10M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
    1    32 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0
  116 11037 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
50006 3899K ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:53
   46  2740 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:53
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW udp dpt:53
11343  649K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80
    2   104 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:3191
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:5191
  495 26375 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
    0     0 REJECT     all  --  *      *       46.161.9.8           0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  *      *       185.121.190.12       0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  *      *       41.57.116.0/24       0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  *      *       41.57.117.0/24       0.0.0.0/0            reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT 156K packets, 116M bytes)
pkts bytes target     prot opt in     out     source               destination

Тем не менее мой IP не блокируется, подскажите пожалуйста в чём может быть причина.
Сервер CentOS Linux release 7.1.1503 (Core), работаю под root-ом
 
Последнее редактирование:
потому что блок стоит после разрешений, а надо наоборот - ДО (если речь про конкретный ip).
или руками в /etc/sysconfig/iptables переставьте
-A INPUT -s 46.161.9.8/32 -j REJECT --reject-with icmp-port-unreachable
в первую строку
или когда с консоли добавляете
то не -A а -I
-I INPUT -s 46.161.9.8/32 -j REJECT --reject-with icmp-port-unreachable
ps
заблокировав свой айпи вы не зайдете по ssh
REJECT --reject-with icmp-port-unreachable не лучший вариант, лучше просто DROP
 
да, я знаю, что заблокировав свой айпи не зайду по ssh, но это не беда - зайду через vpn))
Главное удостовериться, что правила работают) А то в моем случае iptables работает, никаких ошибок не пишет, а подсети не заблокированы.
Хорошо что не поленился затестить.

Я привык через WinSCP заходить на сервер и вручную редактировать файлы.
Т.е. в моём случае самый оптимальный вариант будет такой:

Код:
# Generated by iptables-save v1.4.21 on Thu Dec  8 18:42:17 2016
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [41131:31130358]
-A INPUT -s 46.161.9.8/32 -j REJECT --reject-with icmp-port-unreachable
-A INPUT -s 185.121.190.12/32 -j REJECT --reject-with icmp-port-unreachable
-A INPUT -s 41.57.116.0/24 -j REJECT --reject-with icmp-port-unreachable
-A INPUT -s 41.57.117.0/24 -j REJECT --reject-with icmp-port-unreachable
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 53 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3191 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5191 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Thu Dec  8 18:42:17 2016

Или в какое место их лучше всего поместить?
И ещё, для тех кто хорошо разбирается в iptables, насколько хорош такой конфиг в плане безопасности?
Может быть ещё что-то нужно добавить или подкорректировать?
 
Т.е. в моём случае самый оптимальный вариант будет такой:
да
насколько хорош такой конфиг в плане безопасности?
при должном опыте (дабы не потерять доступ по ssh) дефолтные правила ставят в DROP
:INPUT DROP[0:0]
:FORWARD DROP[0:0]
:OUTPUT DROP[0:0]

и разрешаете только то, что нужно.
рекомендую потренироваться "на кошках" в виртулке или на стендовом компе.
если далеко в чужом ДЦ - крайне желательно налчие аварийной консоли.
 
Не надо дефолтное правило так делать:


Лучше оставить так:
:INPUT DROP[0:0]
:FORWARD DROP[0:0]
:OUTPUT ACCEPT[0:0]

Тогда не надо генерировать правила, разрешающего исходящий трафик от самого сервера
 
тогда и для INPUT и для FORWARD тоже ACCEPT, а то тоже надо генерировать правила, разрешающие трафик (шутка).
ерунду вы пишете.
если вам малварь какую то подкинут, работающую на не разрешенных портах - она просто не заработает, как пример.
 
Ну йенто же параноййа..
Стейтлес фаерволам трудно спасти от хорошо написанного малваря, уже проникшего в систему. Нужен ngfw (next generation firewall). Малварь может отправлять трафик по заранее открытым портам: udp 53 (днс-запросы), tcp 443 (обновления из репов же качаем, да?), ssh и прочее. Можно, конечно, описать очень строгие правила стейтлес-фаервола (типа 53 udp только на 8.8.8.8), но это нужно, во-первых, в очень статичных инфраструктурах (иначе будет мешать), а во-вторых, разве что в банковской сфере, где секьюрность превыше всего. Учитывая, что у вас есть также больший шанс порутаться (малварь получает рут-доступ), а вместе с ним и отключение фаервола, лучше вообще фаервол выносить на прокси-шлюз-что_там_у_вас_еще.

Я же рекомендую для ширпотребного применения исходящий трафик не фильтровать на веб сервере.
 
Вы баните целые подсети 41.57.116.0/24 41.57.117.0/24. Там замечена непригодная активность? Как вы их определяете эти адреса?
Есть решение с гибкой настройкой под сервисы ОС - fail2ban. Утилита сканирует логи ОС и банит на указанное время злоумышленников.
 
Вы баните целые подсети 41.57.116.0/24 41.57.117.0/24
Надо смотреть, кому эти сети принадлежат и кто на них живет. Если это сети с датацентров, или стран, с которых нет целевой аудитории, то администратор вполне может отправить их у себя в бан. На примере, 41.57.116.0 принадлежит небольшому государству в Западной Африке - вероятно, ничего полезного для ресурса с этой сети не приходит.

Есть решение с гибкой настройкой под сервисы ОС
Оно несколько громоздкое и неуклюжее. Иногда проще написать специализированный скрипт под конкретную задачу.

Есть еще один неплохой вариант бана, это так называемый нульроут.
Код:
ip route add blackhole 41.57.116.0/24
 
ipset в последнее время и бан по странам ипаных ботов )
 
Назад
Сверху