Когда 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
цепочку. Почему? Не могу сказать.)
Предпочтительный способ сделать это с
iptables
. Похоже, что это было должным образом охвачено другими, поэтому для полноты картины я укажу альтернативный метод контроля доступа, который доступен для многих демонов в большинстве дистрибутивов Linux. Этот метод контроля доступа предоставляетсяlibwrap
библиотекой.Чтобы проверить поддержку вашего любимого демона
libwrap
, попробуйте выполнить следующее:Если вы получили непустой результат, такой как
тогда тебе определенно хорошо идти.
Это почти уверенность , что ваш
sshd
демон имеетlibwrap
поддержку, и поэтому она должна проконсультироваться с/etc/hosts.allow
и/etc/hosts.deny
файлами для контроля доступа. Предполагая, что ваша локальная сеть LAN есть192.168.100.0/24
, вы можете запретить доступ коsshd
всем клиентам, кроме клиентов на локальном хосте или в локальной сети, добавив в ваш/etc/hosts.deny
файл следующее:Обратите внимание, что этот метод на самом деле не открывает и не закрывает порты. Он просто сообщает демонам, которые используют этот метод контроля доступа, принимать или отклонять попытки подключения от клиентов, которые соответствуют заданному шаблону (ам).
Для получения полной информации ознакомьтесь со справочными страницами, начиная с
hosts_access(5)
.источник
Если у вас есть собственный брандмауэр на основе linux, вам лучше его настроить
iptables
, как другие описывают здесь. Если нет, и брандмауэр является вашим маршрутизатором, то, скорее всего, конфигурация по умолчанию уже запрещает доступ извне, если вы явно не включили переадресацию портов (как я недавно описал в ответе на этот вопрос ).Для обеспечения дополнительной безопасности вы можете использовать отдельную подсеть для соединений в локальной сети. Для этого для каждого компьютера добавьте второй IP-адрес, который будет использоваться только внутри локальной сети, а не маршрутизатором. Допустим, вся локальная сеть теперь использует
192.168.0.xxx
адреса, а маршрутизатор (шлюз, межсетевой экран) -192.168.0.1
. Поэтому добавьте второй адрес для каждого компьютера - например:Затем отредактируйте
sshd
конфигурацию, чтобы использовать только этот адрес (чтобы он не позволял устанавливать соединения192.168.0.xxx
) - отредактируйте/etc/ssh/sshd_config
и изменитеListenAddress
одну из вашей новой подсети (192.168.5.1
в приведенном выше примере). Это оно! Если вы не настроите шлюз для маршрутизации связи этой подсети, он должен быть отделен от внешней стороны.источник