Как настроить iptables для использования apt-get на сервере? [закрыто]

я начинаю использовать 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, тогда он начнет работать.

2
задан 16 March 2010 в 00:12
10 ответов

Необходимо позволить первому пакету открывать HTTP-соединение, затем позволить, огрызается в.

Попытка:

$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
8
ответ дан 3 December 2019 в 08:30
  • 1
    Я изменяю порядок правил, но проблема сохраняется. –  user25704 16 March 2010 в 18:11

Кв. обычно использует старый добрый порт 80, но необходимо проверить apt.conf для наблюдения то, что это установлено как, так как это может использовать любые из нескольких. Также проверьте/etc/apt/sources.list

1
ответ дан 3 December 2019 в 08:30

Я полагаю, что Вам был бы нужен вывод правила, где высокие исходные порты позволили. Когда способные подключения к http, Linux даст ему случайный высокий исходный порт (Выше, чем, что находится в /proc/sys/net/ipv4/ip_local_port_range). (Не могло бы быть случайным, не может помнить). ftp имеет пассивные и actives режимы также, я рекомендовал бы http источники в Вашем sources.list в этом случае.

Таким образом, если Вы изменяете свои источники на http и устанавливаете выходное правило для всех Ваших эфемерных портов. Вы будете все установлены. При использовании ftp необходимо узнать, активно ли это или пассивно, и затем добавьте правила соответственно. См. эту ссылку для объяснения активных/пассивных режимов. Я вижу, что Вы перечисляете их в настоящее время, но они, кажется, с точки зрения поля, являющегося сервером, не клиентом. С Кв. Вы - клиент.

Таким образом для 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 поиск и устранение неисправностей инструмента. См. эту ссылку.

1
ответ дан 3 December 2019 в 08:30
  • 1
    Для тестирования его я изменяю ВЫХОДНУЮ политику ПРИНЯТЬ, и проблема сохраняется. –  user25704 16 March 2010 в 00:10
  • 2
    Jonathan имеет, является правильным. Его входное правило позволит ответы HTTP, потому что оно отследит соединение и откроет wholes для ответов во ВХОДНОЙ цепочке. Именно это модуль состояния делает, то же как ip inspect на маршрутизаторах. –  Kyle Brandt 16 March 2010 в 00:31

Используя ОТБРАСЫВАНИЕ, поскольку политика по умолчанию для ВЫХОДНОЙ цепочки звучит несколько чрезмерной мне.

Я рекомендовал бы изменить ВЫХОДНУЮ политику по умолчанию ПРИНЯТЬ и затем контролировать трафик и отфильтровать определенные порты в случае необходимости. Иначе это - слишком много проблемы, чтобы отслеживать все исходящие соединения и позволить каждому из них через Ваш брандмауэр.

В конце концов, прием не должен впускать никого, не мешать им выходить.

0
ответ дан 3 December 2019 в 08:30
  • 1
    Я пытаюсь изменить ВЫХОДНУЮ политику ПРИНЯТЬ, но проблема сохраняется. Только если я изменяю ВХОДНУЮ политику ПРИНЯТЬ, склонный - добираются, начинает работать правильно. –  user25704 16 March 2010 в 00:09

Я думаю, что решил проблему.

$IPT-A ВХОД - спорт 80-j ПРИНИМАЮТ и способная работа правильно

-1
ответ дан 3 December 2019 в 08:30

Возможно, Apt не может разрешить имена хостов с помощью DNS. Попробуйте добавить эту строку в раздел DNS вашего набора правил:

$ IPT -A INPUT -p udp --sport 53 --dport 1024: 65535 -j ACCEPT

3
ответ дан 3 December 2019 в 08:30

Я знаю, что это, вероятно, немного поздно, но эта тема продолжала появляться в моих поисках в 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
0
ответ дан 3 December 2019 в 08:30

Чтобы решить эту проблему, вам необходимо добавить следующие правила в свой 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
5
ответ дан 3 December 2019 в 08:30

У меня близкая проблема. Я использую CSF и настроил ключ cc_allow_filter со значением BR, думая, что это для SSH, и после прочтения документов я обнаружил, что это для всех подключений на сервере. Мой блокирует, потому что зеркала, которые я использую для apt-get, из другой страны, и CSF блокировал. После снятия блокировки страны все звезды снова работают нормально.

0
ответ дан 3 December 2019 в 08:30

Для установки Debian по умолчанию для получения обновлений необходимы два порта:

  • HTTP (TCP-порт 80)
  • DNS (UDP-порт 53)

Решение с -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
2
ответ дан 3 December 2019 в 08:30

Теги

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