Как разрешить только определенные IP-адреса и заблокировать подключение всех остальных IP-адресов в iptables?
Для разрешения я ввел следующую команду
iptables -A INPUT -s 192.168.1.1 -j ACCEPT
Что мне делать для блокировки?
Следует помнить, что правила брандмауэра проверяются в том порядке, в котором они перечислены. Ядро прекратит обработку цепочки, когда сработает правило, которое разрешает или запрещает пакет или соединение.
Предполагая, что в вашем текущем брандмауэре есть только одно правило (проверьте, например, iptables-save
или iptables -L -v -n --line-numbers
):
Вам нужно добавить второе правило, которое указывает вашему брандмауэру, что делать с трафиком, который не соответствует первому правилу.
Правила без более конкретного правила сопоставления будут соответствовать чему угодно и очень коротко:
iptables -A -j REJECT
должно хватить.
Проверить с iptables-save
и вы должны увидеть минимальный брандмауэр, подобный этому:
[root@host ~]# iptables-save
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -s 192.168.1.1 -j ACCEPT
-A INPUT -j REJECT
COMMIT
Ядро прекратит обработку цепочки, когда сработает правило, которое разрешает или запрещает пакет или соединение.
Приложение: когда правила не срабатывают, политика то, что установлено на цепочке, применяется. Поэтому вместо того, чтобы добавлять правило, которое блокирует все в конце вашей текущей конфигурации, вы также можете установить / изменить политику в цепочке ввода для достижения того же:
iptables -P INPUT DROP
и
[root@host ~]# iptables-save
*filter
:INPUT DROP[0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -s 192.168.1.1 -j ACCEPT
COMMIT