IPTABLES: Почему мой сценарий не применяется?
Я устанавливаю новый новый VPS (с linode.com, если это имеет значение) с Ubuntu 16.04 LTS. Я написал следующий скрипт для iptables:
#!/bin/sh
iptables -F
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -j DROP
iptables -A OUTPUT -j DROP
iptables -A FORWARD -j DROP
Этот сценарий должен разрешать только 22, 80 и 443. Он также разрешает исходящий DNS-запрос.
Я создал и назвал этот скрипт iptables.sh
как корень и положить его в /etc/network/if-pre-up.d
, Я тоже chmod +x
,
Теперь после перезагрузки этот скрипт, похоже, не применяется. Я подтвердил это, выполнив iptables -S
, который дает:
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
Как мне прогрессировать отсюда? Я застрял прямо сейчас.
Обновить
Понятия не имею почему, но после переименования uptables.sh
в iptables
Я не могу войти в свой сервер после перезагрузки. Это заставляет меня думать, что теперь скрипт фактически выполняется (и когда он имеет .sh
Расширение файла нет, почему?) во время загрузки и есть ошибка в моем сценарии. Я так растерялся.
1 ответ
НОВОЕ само по себе и СВЯЗАНО, УСТАНОВЛЕНО, идут вместе. Когда вы подключаетесь через ssh, адрес назначения может быть портом 22, но порт источника является случайным, поэтому правило #2 в выходных данных работает должным образом.
iptables -I INPUT 1 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -I OUTPUT 1 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
Как только эти правила будут введены, ваш DNS-запрос станет частью СВЯЗАННОГО, УСТАНОВЛЕННОГО трафика, и вы сможете удалить ссылки на порт 53.