Это мое /etc/sysconfig/iptables
:
Он имеет два порта, открытых 80 Apache и 22 для SSH.
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
Для порта 22 (SSH) я хочу убедиться, что никто не может подключиться к этому порту, за исключением определенного IP-адреса.
пример ip:
1.2.3.4
Пожалуйста, не обращайте внимания на любые упущения / опасения относительно того, что если мой ip изменится и я не смогу больше использовать SSH на своем сервере.
iptables
поддерживает инверсию с оператором bang на тот случай, если вы хотите выполнить таргетингDROP
. Пример:iptables -I INPUT -p tcp ! -s <permittedIP> -j DROP
DROP
на самом деле не нужны, вы можете просто установить политику по умолчанию на брандмауэреiptables -P INPUT DROP
и позволить ей это сделать. Вы, вероятно, также захотите сделать их как приложение, если сделаете их таким образом, иначе весь трафик будет захваченDROP
и никогда не достигнет вашегоACCEPT
правила.iptables -I INPUT 3 -p tcp -s 0.0.0.0/0 --dport 22 -j DROP
иiptables -I INPUT 3 -p udp -s 0.0.0.0/0 --dport 53 -j DROP
«3» после INPUT означает вставку в качестве правила № 3 ВВОДА (при условии, что вы вставляете два ПРИНЯТА, в противном случае, если только один ПРИНЯТ, тогда используйте «2» для ВВОДА.-I
вставит новые правила iptables вверху. Таким образом, вы могли бы в конечном итоге добавить свою каплю, прежде чем разрешить. Я предлагаю использовать-A
вместо этогоХотя я рекомендую использовать ключи SSH, я дам вам объяснение.
Вам не нужно использовать IPtables для того, чего вы пытаетесь достичь, есть несколько способов. Это способ IPtables:
[YOUR_HOME_IP]
= Ваш домашний IP (довольно просто)[SSH_PORT]
= Порт, на котором вы запускаете SSH (по умолчанию 22)Это гарантирует, что никто, кроме вашего IP, не сможет войти в SSH.
Есть еще один способ - добавить что-то в
sshd_config
.Добавьте следующее:
Это позволяет вам войти в SSH как
root
пользователь с вашего IP без запроса пароля.Пожалуйста, имейте в виду, что cronjob с
может быть умным, поэтому вы не будете заблокированы на сервере с помощью SSH (cronjob сбросит IPtables, чтобы вы снова получили доступ). Если у вас все еще есть доступ, вы можете удалить cronjob и снова настроить свои IPtables.
источник
iptables
в первую очередь? Некоторая форма внеполосного доступа является обычным методом.knockd
Другой.at
делает этоWithout-Password
означает, что аутентификация по паролю не разрешена, поэтому вам придется вместо этого использовать аутентификацию по ключу SSH. Это действительно немного неясное наименование для этого метода аутентификации. Но это не значит, что вам не нужен пароль для входа в систему как root. Тем не менее, более безопасный метод состоит в том, чтобы установитьPermitRootLogin no
и использовать другую учетную запись sudo для входа в систему, так как root является обычной цельюДругие ответы используют
iptables -I
в своих примерах, что часто не то, что вы должны использовать.iptables выполнит первое соответствующее правило, поэтому порядок правил очень важен.
-I
является командой «insert» и должна использоваться с параметром index, чтобы указать, где в списке принадлежит данное правило.-A
это команда "добавить", которая добавит правило в конец списка.В некоторых дистрибутивах (возможно, во всех) использование
-I
без параметра индекса добавит правило в индекс один, сделав его первым проверенным правилом. В этом сценарии, если последняя команда, которую вы запускаете, - это,iptables -I INPUT -s tcp 0.0.0.0/0 -j DROP
то iptables отбросит весь трафик, независимо от того, есть ли у вас какие-либоACCEPT
правила позже в цепочке.Вот пример настройки правила, которое разрешает SSH только с одного IP:
Начиная без правил:
Добавьте новое правило «разрешить SSH из 1.2.3.4»:
#>iptables -A INPUT -p tcp -s 1.2.3.4 --dport 22 -j ACCEPT
Заблокируйте SSH со всех других IP-адресов:
#>iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 22 -j DROP
Теперь ваша цепочка INPUT будет выглядеть так:
Позже, если вам нужно добавить в белый список второй IP-адрес, вы можете использовать этот
-I
параметр, чтобы поместить его перед правилом черного списка.#>iptables -I INPUT 2 -p tcp -s 4.3.2.1 --dport 22 -j ACCEPT
Обратите внимание, что при использовании
-I INPUT 2
добавлено новое правило в качестве правила № 2 и увеличено правило DROP до номера 3.источник