
Я пытаюсь настроить некоторые правила, чтобы заблокировать все порты, кроме 21 и 22 на TCP (SSH и FTP). Но когда я пытаюсь запустить этот скрипт, я блокирую свой экземпляр и не могу получить к нему доступ. Вот скрипт:
# Flush the FW Rules
iptables -F
iptables -X
# Block all traffic
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
# Allow SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT
# Allow FTP
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 21 -j ACCEPT
# Allow ICMP (ping)
iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
В скрипте он настраивает входящие и исходящие запросы для SSH и FTP, но почему я не могу получить к нему доступ?
решение1
- Для правил в
OUTPUT
цепочке необходимо указывать соответствие исходному порту (--sport
), а не порту назначения (--dport
). - В любом случае
DROP
политика в этойOUTPUT
цепочке не является общепринятой практикой. - Прочитайте руководство по iptables и примеры наборов правил.
- Чтобы избежать потери соединения, лучше использовать
iptables-save
иiptables-apply
инструменты.
решение2
Вам следует настроить отслеживание состояния и избавиться от -A OUTPUT ... -j ACCEPT
очередей.
IPTABLES -I INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
IPTABLES -I FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
IPTABLES -I OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
Приятно видеть, что вы используете явную фильтрацию исходящего трафика, но ее реализация требует больше работы.