Когда iptables ядра полностью пуст ( iptables -F
), это будет делать то, что вы просите:
# iptables -A INPUT -p tcp --dport 22 -s 192.168.0.0/24 -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -s 127.0.0.0/8 -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -j DROP
Это говорит о том, что всем сетевым адресам разрешено общаться с TCP-портом 22, что localhost получает то же самое соображение (да, 127. * не только 127.0.0.1), и пакеты с любого другого адреса, не соответствующие этим первым двум правилам, бесцеремонно сбрасываются в немного ведро . Вы можете использовать REJECT
вместо, DROP
если вы хотите активный отказ (TCP RST), вместо того, чтобы сделать TCP-порт 22 черной дырой для пакетов.
Если ваша локальная сеть не использует блок 192.168.0. *, Вам, естественно, потребуется изменить IP-адрес и маску в первой строке в соответствии со схемой IP-адреса вашей локальной сети.
Эти команды могут не выполнять то, что вы хотите, если на вашем брандмауэре уже настроены некоторые правила. (Скажите iptables -L
как root, чтобы выяснить это.) Часто случается, что одно из существующих правил захватывает пакеты, которые вы пытаетесь отфильтровать, так что добавление новых правил не имеет никакого эффекта. В то время как вы можете использовать -I
вместо -A
с iptables
командой сращивать новые правила в середину цепочки , а не добавляя их, как правило , лучше , чтобы узнать, как цепи получают заселена при загрузке системы и изменять этот процесс , так что ваши новые правила всегда получить установлены в правильный порядок.
РЕЛ 7+
На современных системах типа RHEL лучший способ сделать это - использовать firewall-cmd
его или его GUI-эквивалент. Это говорит firewalld
демону ОС, что вы хотите, и именно это заполняет и манипулирует тем, через что вы видите iptables -L
.
RHEL 6 и ранее
В старых системах типа RHEL самый простой способ изменить цепочки брандмауэров при заказе - это редактировать /etc/sysconfig/iptables
. Инструменты OSI GUI и TUI firewall довольно просты, поэтому, как только вы начнете добавлять более сложные правила, подобные этим, лучше вернуться к старым добрым файлам конфигурации. Остерегайтесь, как только вы начнете это делать, вы рискуете потерять свои изменения, если когда-либо будете использовать инструменты брандмауэра ОС для изменения конфигурации, поскольку она может не знать, как обращаться с подобными правилами, созданными вручную.
Добавьте что-то вроде этого в этот файл:
-A RH-Firewall-1-INPUT -p tcp --dport 22 -s 192.168.0.0/24 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp --dport 22 -s 127.0.0.0/8 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp --dport 22 -j DROP
Где вы добавляете это хитрый бит. Если вы обнаружите в этом файле строку, о которой говорите --dport 22
, просто замените ее на три строки выше. В противном случае он, вероятно, должен идти до первой существующей строки, заканчивающейся на -j ACCEPT
. Как правило, вам необходимо ознакомиться с тем, как работает iptables , и в этот момент правильная точка вставки будет очевидна.
Сохраните этот файл, затем скажите, service iptables restart
чтобы перезагрузить правила брандмауэра. Обязательно сделайте это, войдя в консоль, на случай, если вы нажмете правку! Вы не хотите блокировать себя из своего компьютера, когда вошли в систему через SSH.
Сходство с командами выше не случайно. Большая часть этого файла состоит из аргументов iptables
команды. Различия относительно вышеизложенного состоят в том, что iptables
команда отбрасывается, и INPUT
имя цепочки становится специальной RH-Firewall-1-INPUT
цепочкой, специфичной для RHEL . (Если вы захотите изучить файл более подробно, вы увидите ранее в файле, где они по существу переименовалиINPUT
цепочку. Почему? Не могу сказать.)