Мне нужно использовать aptitude для обновления и установки программного обеспечения, но это не удается. Он говорит ...
0% [Connecting to archive.ubuntu.com]
... и останавливается. Мне нужно набрать CTRL-C для выхода. Я использую Ubuntu Server 10.04 LTS (Lucid Lynx).
Это происходит из-за моих правил iptables. Если я восстановил iptables до значений по умолчанию (удалив правила и установив политики в ACCEPT), то aptitude будет работать так, как ожидалось. Нет ошибок.
Но, эй, я хочу использовать свои правила iptables ... Мне просто нужно знать: что именно мне нужно, чтобы держать открытыми, чтобы сделать работу?
Мои правила довольно просты. Политика OUTPUT ACCEPT. Политика FORWARD принимается. И у меня нет правил для OUTPUT и FORWARD. Политика INPUT - DROP. Итак, проблема в цепочке apt ! У меня есть 11 правил INPUT, чтобы открыть определенные TCP-порты, которые мне нужны для запуска таких сервисов, как FTP, SSH, HTTP и т. Д. Дополнительное правило для приема ICMP (ping) и другое для приема всего входа localhost. И это все:
iptables -F
iptables -A INPUT -s 127.0.0.1 -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 587 -j ACCEPT
iptables -A INPUT -p tcp --dport 995 -j ACCEPT
iptables -A INPUT -p tcp --dport 1008 -j ACCEPT
iptables -A INPUT -p tcp --dport 2812 -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
iptables -A INPUT -p tcp --dport 8000 -j ACCEPT
iptables -P INPUT DROP
Я пробовал много правил, пытаясь заставить aptitude работать. Конечно, простой iptables -P INPUT ACCEPT заставляет его работать, но я не хочу принимать все. Я хочу открыть только то, что нужно, чтобы aptitude выполнила свою работу.
Мне кажется странным, что цепочка INPUT является проблемой ... но это так.
Еще одна проблема что у меня нет доступа к журналам iptables ... Я только что обнаружил, что в используемом ядре есть ошибка (см. https://serverfault.com/questions/159818/iptables-logging-not-working). поэтому не спрашивайте меня о содержании журнала, потому что я не могу их получить.
Спасибо!
Когда вы отправляете HTTP-запрос на другой сервер, вы используете TCP. Во-первых, пакет SYN выходит извне на другой сервер из случайного высокого порта, после чего вы получите ответ ACK. Наконец, вы отправляете SYN / ACK на сервер, и сервер отвечает запрошенным документом (в нескольких пакетах). Ваши правила не позволяют получать пакет ACK, и поэтому соединение не может быть установлено. Добавьте правило вроде:
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Вы не получаете журналы iptables бесплатно. Ваши правила должны выглядеть так:
# if no rule matched, the input should be dropped
-P INPUT DROP
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
# etc
# the limit prevents your logs from being flooded if there are a lot packets being captured
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied" --log-level debug
Обратите внимание, что перед командами я пропустил iptables, я рекомендую использовать iptables-restore (или iptables-apply для тестирования), чтобы избежать блокировки себя, если правило не применяется. Файл, который будет передан команде, выглядит так:
*FILTER
# your rules here, for example:
-P INPUT DROP
-P INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
COMMIT
Строка new после строки COMMIT обязательна.
По умолчанию записи переходят к /var/log/kern.log. Неплохо, если вы хотите различать сообщения ядра и iptables, поэтому создайте фильтр для rsyslog в /etc/rsyslog.d/iptables.conf, содержащий:
:msg,contains,"iptables denied" /var/log/iptables.log
& ~
. Это будет фильтровать ошибки iptables и отправить их на /var/log/iptables.log.
Когда вы отправляете HTTP-запрос на другой сервер, вы используете TCP. Во-первых, пакет SYN выходит извне на другой сервер из случайного высокого порта, после чего вы получите ответ ACK. Наконец, вы отправляете SYN / ACK на сервер, и сервер отвечает запрошенным документом (в нескольких пакетах). Ваши правила не позволяют получать пакет ACK, и поэтому соединение не может быть установлено. Добавьте правило вроде:
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Вы не получаете журналы iptables бесплатно. Ваши правила должны выглядеть так:
# if no rule matched, the input should be dropped
-P INPUT DROP
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
# etc
# the limit prevents your logs from being flooded if there are a lot packets being captured
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied" --log-level debug
Обратите внимание, что перед командами я пропустил iptables, я рекомендую использовать iptables-restore (или iptables-apply для тестирования), чтобы избежать блокировки себя, если правило не применяется. Файл, который будет передан команде, выглядит так:
*FILTER
# your rules here, for example:
-P INPUT DROP
-P INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
COMMIT
Строка new после строки COMMIT обязательна.
По умолчанию записи переходят к /var/log/kern.log. Неплохо, если вы хотите различать сообщения ядра и iptables, поэтому создайте фильтр для rsyslog в /etc/rsyslog.d/iptables.conf, содержащий:
:msg,contains,"iptables denied" /var/log/iptables.log
& ~
. Это будет фильтровать ошибки iptables и отправить их на /var/log/iptables.log.