Возможно ли заблокировать все входящие соединения, которые не относятся к белому IP-адресу, но разрешить подключения, которые я инициировал? [dубликат]

Мне нужно использовать 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). поэтому не спрашивайте меня о содержании журнала, потому что я не могу их получить.

Спасибо!

3
задан 13 April 2017 в 15:14

2 ответа

Когда вы отправляете 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.

6
ответ дан 17 July 2018 в 20:14

Когда вы отправляете 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.

6
ответ дан 23 July 2018 в 20:57

Другие вопросы по тегам:

Похожие вопросы: