Я начинаю использовать iptables (новичок) для защиты Linux-сервера (в частности, Debian 5.0). Прежде чем настраивать параметры iptables, я могу без проблем использовать apt-get. Но после того, как я настроил iptables, apt-get перестает работать. Например, я использую этот скрипт в iptables:
#!/bin/sh
IPT=/sbin/iptables
## FLUSH
$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t nat -X
$IPT -t mangle -F
$IPT -t mangle -X
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
$IPT -A INPUT -p tcp --dport 22 -j ACCEPT
$IPT -A OUTPUT -p tcp --sport 22 -j ACCEPT
$IPT -A INPUT -p tcp --dport 80 -j ACCEPT
$IPT -A OUTPUT -p tcp --sport 80 -j ACCEPT
$IPT -A INPUT -p tcp --dport 443 -j ACCEPT
$IPT -A OUTPUT -p tcp --sport 443 -j ACCEPT
# Allow FTP connections @ port 21
$IPT -A INPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
# Allow Active FTP Connections
$IPT -A INPUT -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT
# Allow Passive FTP Connections
$IPT -A INPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT
#DNS
$IPT -A OUTPUT -p udp --dport 53 --sport 1024:65535 -j ACCEPT
$IPT -A INPUT -p tcp --dport 1:1024
$IPT -A INPUT -p udp --dport 1:1024
$IPT -A INPUT -p tcp --dport 3306 -j DROP
$IPT -A INPUT -p tcp --dport 10000 -j DROP
$IPT -A INPUT -p udp --dport 10000 -j DROP
затем, когда я запускаю apt-get, я получаю:
core:~# apt-get update
0% [Connecting to ftp.us.debian.org] [Connecting to security.debian.org] [Conne
и он глохнет. Какие правила мне нужно настроить, чтобы он работал.
Спасибо
Дополнение:
После некоторых попыток я обнаружил, что проблема заключается в политике INPUT, а не в политике OUTPUT. Если изменить $ IPT -P OUTPUT на $ IPT -P OUTPUT ACCEPT, проблема останется. Но если я изменю $ IPT -P INPUT на $ IPT -P INPUT ACCEPT, тогда он начнет работать.
Вам нужно разрешить первому пакету открыть HTTP-соединение OUT, а затем разрешить ответы обратно.
Пытаться:
$IPT -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
$IPT -A INPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
Чтобы решить эту проблему, вам необходимо добавить следующие правила в свой IPT:
# Apt-Get without problem
$IPT -A OUTPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPT -A INPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
Возможно Apt
не может разрешить имена хостов с помощью DNS. Попробуйте добавить эту строку в раздел DNS своего набора правил:
$IPT -A INPUT -p udp --sport 53 --dport 1024:65535 -j ACCEPT
Для установки Debian по умолчанию для получения обновлений необходимы два порта:
Решение с -m состоянием:
$IPT -A OUTPUT -p tcp --dport 80 --sport 32768:61000 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPT -A INPUT -p tcp --sport 80 --dport 32768:61000 -m state --state ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p udp --dport 53 --sport 32768:61000 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPT -A INPUT -p udp --sport 53 --dport 32768:61000 -m state --state ESTABLISHED -j ACCEPT
или с -m conntrack:
$IPT -A OUTPUT -p tcp --dport 80 --sport 32768:61000 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
$IPT -A INPUT -p tcp --sport 80 --dport 32768:61000 -m conntrack --ctstate ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p udp --dport 53 --sport 32768:61000 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
$IPT -A INPUT -p udp --sport 53 --dport 32768:61000 -m conntrack --ctstate ESTABLISHED -j ACCEPT
Apt обычно использует старый добрый порт 80, но вы должны проверить apt.conf, чтобы увидеть, как он установлен, поскольку он может использовать любой из нескольких. Также проверьте /etc/apt/sources.list
Я считаю, что вам понадобятся правила вывода, где разрешены высокие порты источника. Когда apt подключается к http, Linux предоставит ему случайный порт с высоким исходным кодом (выше, чем то, что находится в /proc/sys/net/ipv4/ip_local_port_range
). (Может быть, не случайно, не помню). ftp также имеет пассивный и активный режимы, в этом случае я бы порекомендовал http-источники в вашем sources.list.
Итак, если вы измените свои источники на http и установите правило вывода для всех ваших эфемерных портов. У вас будет все готово. Если вы используете ftp, вам нужно выяснить, активен он или пассивен, а затем добавить правила соответственно. Видеть эта ссылка для объяснения активных / пассивных режимов. Я вижу, что у вас есть те, которые сейчас перечислены, но они кажутся с точки зрения того, что коробка является сервером, а не клиентом. С apt вы являетесь клиентом.
Итак, для исходных портов http:
$ cat /proc/sys/net/ipv4/ip_local_port_range
32768 61000
$IPT -A OUTPUT -p tcp --dport 80 --sport 32768:61000 -j ACCEPT
Наконец, вы можете регистрировать потерянные пакеты в качестве общего инструмента устранения неполадок iptables. Видеть эта ссылка.
Использование DROP в качестве политики по умолчанию для цепочки OUTPUT кажется мне несколько чрезмерным.
Я бы рекомендовал изменить политику OUTPUT по умолчанию на ACCEPT, а затем отслеживать трафик и при необходимости фильтровать определенные порты. В противном случае будет слишком сложно отслеживать все исходящие соединения и пропускать каждое из них через ваш брандмауэр.
В конце концов, фокус в том, чтобы никого не впускать, не мешать им выйти.
Я знаю, что это, вероятно, немного поздно, но эта тема продолжала появляться в моих поисках в Google, поэтому я публикую то, что сработало для меня:
iptables -A OUTPUT -p tcp --dport 80 --sport 32786:61000 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 --sport 32786:61000 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 32786:61000 --sport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 32786:61000 --sport 80 -j ACCEPT
У меня проблема. Я использую CSF и настроил ключ cc_allow_filter со значением BR, думая, что это для SSH, и после чтения документов я обнаружил, что это для всех подключений на сервере. Мой блокирует, потому что зеркала, которые я использую для apt-get, из другой страны, и CSF блокировал. После удаления страны блокировки все звезды снова работают нормально.
Думаю решил проблему.
$ IPT -A INPUT --sport 80 -j ACCEPT и apt работают правильно