Я хочу разрешить только SSH-доступ, FTP-доступ и все коммуникации между моим выделенным сервером и всеми серверами Cloudflare с использованием IPTables. Я пробовал команды ниже, но похоже, что я сам выгнал, и я не знаю, что я сделал не так:
# Allow FTP and SSH for our staff
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 20 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT
# Allow all Cloudflare IPv4 and IPv6
for i in `curl https://www.cloudflare.com/ips-v4`; do iptables -A INPUT -p tcp --source $i --dport 80 -j ACCEPT; done
for i in `curl https://www.cloudflare.com/ips-v6`; do ip6tables -A INPUT -p tcp --source $i --dport 443 -j ACCEPT; done
# make sure nothing comes or goes out of this box
iptables -A INPUT -j DROP
iptables -A OUTPUT -j DROP
ip6tables -A INPUT -j DROP
iptables-save > /etc/sysconfig/iptables
ip6tables-save > /etc/sysconfig/ip6tables
apt-get install iptables-persistent
service iptables-persistent start
service iptables-persistent save
После выполнения этой строки меня выгнал SSH: iptables -A OUTPUT -j DROP
. Также FTP больше не работает. Что там не так ??
Проблема в iptables -A OUTPUT -j DROP
и как используются порты. Вы разрешили порты 20, 21 и 22. Вы никогда не будете использовать эти порты в качестве исходящего порта. Они будут случайным числом в верхней части диапазона портов.
Попробуйте добавить что-нибудь вроде
sudo iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
перед твоим iptables -A OUTPUT -j DROP
. Это должно позволить соединениям, которые связаны с разрешенными входящими соединениями, иметь возможность выходить обратно.