Я пытаюсь настроить iptables на своем устройстве, чтобы разрешить только SSH и HTTPS трафик. В частности, протокол HTTPS используется для вызова некоторых REST API к удаленному серверу из клиента Java.
Это мои iptables:
iptables -F
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
#SSH
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
#DNS
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
#HTTPS
iptables -A OUTPUT -p tcp --sport 443 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
Все работает как положено, кроме трафика HTTPS, который блокируется iptables.
Что я сделал не так?
Не блокируйте все исходящее правило, оно не будет выбирать порт 443 в качестве источника для получения данных с другого сервера. И я думаю, что правил блокировки входящего трафика вполне достаточно, чтобы обеспечить безопасность вашего сервера. Отдых - все хорошо. Вы можете использовать следующие правила, если хотите.
iptables -F
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp -j DROP