Назад | Перейти на главную страницу

Мой iptables не позволяет обновлению apt-get работать должным образом, какое правило его нарушило?

Я думал, что мои правила iptables работают отлично, пока я не apt-get update, за что я получаю Temporary failure resolving сообщения об ошибках для всех сайтов в sources.list. Однако, когда я отключаю iptables apt-get update работает безупречно.

Мой /etc/resolv.conf файл содержит:

nameserver 199.195.255.68
nameserver 199.195.255.69

Мои правила iptables:

*filter

-P INPUT DROP
-P FORWARD DROP
-P OUTPUT DROP

# Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT

# Accepts all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allows HTTP and HTTPS connections from anywhere (the normal ports for websites)
-A INPUT -p tcp -m multiport --dports 80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m multiport --sports 80,443 -m state --state ESTABLISHED -j ACCEPT

# THE dport NUMBER IS THE SAME ONE YOU SET UP IN THE SSHD_CONFIG FILE 642/25042
-A INPUT -p tcp --dport 642 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp --sport 642 -m state --state ESTABLISHED -j ACCEPT

# Allow outbound DNS
-A OUTPUT -p udp -s EX_IP --sport 1024:65535 -d 199.195.255.68 --dport 53 -j ACCEPT
-A INPUT -p udp -s 199.195.255.68 --sport 53 -d EX_IP --dport 1024:65535 -j ACCEPT
-A OUTPUT -p tcp -s EX_IP --sport 1024:65535 -d 199.195.255.69 --dport 53 -j ACCEPT
-A INPUT -p tcp -s 199.195.255.69 --sport 53 -d EX_IP --dport 1024:65535 -j ACCEPT

# Help prevent DoS Attacks
-A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT

# Kill SYN attacks
-A INPUT -p tcp ! --syn -m state --state NEW -j DROP

# Drop fragments
-A INPUT -f -j DROP

# Drop XMAS packets
-A INPUT -p tcp --tcp-flags ALL ALL -j DROP

# Drop NULL packets
-A INPUT -p tcp --tcp-flags ALL NONE -j DROP

# Allow ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

# Log iptables denied calls (access via 'dmesg' command)
# Logging CHAIN
-N LOGGING
-A INPUT -j LOGGING
-A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTABLES Dropped: " --log-level 6
-A LOGGING -j DROP

COMMIT

Где EX_IP - внешний IP-адрес сервера.

И выход из iptables -vL является:

Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  lo     any     anywhere             anywhere            
    0     0 REJECT     all  --  !lo    any     anywhere             127.0.0.0/8          reject-with icmp-port-unreachable
  952 70158 ACCEPT     all  --  any    any     anywhere             anywhere             state RELATED,ESTABLISHED
    1    64 ACCEPT     tcp  --  any    any     anywhere             anywhere             multiport dports http,https state NEW,ESTABLISHED
    1    64 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:642 state NEW,ESTABLISHED
    0     0 ACCEPT     udp  --  any    any     199.195.255.68       copernicus           udp spt:domain dpts:1024:65535
    0     0 ACCEPT     tcp  --  any    any     199.195.255.69       copernicus           tcp spt:domain dpts:1024:65535
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:http limit: avg 25/min burst 100
    0     0 DROP       tcp  --  any    any     anywhere             anywhere             tcpflags:! FIN,SYN,RST,ACK/SYN state NEW
    0     0 DROP       all  -f  any    any     anywhere             anywhere            
    0     0 DROP       tcp  --  any    any     anywhere             anywhere             tcpflags: FIN,SYN,RST,PSH,ACK,URG/FIN,SYN,RST,PSH,ACK,URG
    0     0 DROP       tcp  --  any    any     anywhere             anywhere             tcpflags: FIN,SYN,RST,PSH,ACK,URG/NONE
    4   160 ACCEPT     icmp --  any    any     anywhere             anywhere             icmp echo-request
   14   991 LOGGING    all  --  any    any     anywhere             anywhere            

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy DROP 72 packets, 4736 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  any    lo      anywhere             anywhere            
  700  325K ACCEPT     all  --  any    any     anywhere             anywhere             state RELATED,ESTABLISHED
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             multiport sports http,https state ESTABLISHED
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp spt:642 state ESTABLISHED
    0     0 ACCEPT     udp  --  any    any     copernicus           199.195.255.68       udp spts:1024:65535 dpt:domain
    0     0 ACCEPT     tcp  --  any    any     copernicus           199.195.255.69       tcp spts:1024:65535 dpt:domain

Chain LOGGING (1 references)
 pkts bytes target     prot opt in     out     source               destination         
   14   991 LOG        all  --  any    any     anywhere             anywhere             limit: avg 2/min burst 5 LOG level info prefix "IPTables Packet Dropped: "
   14   991 DROP       all  --  any    any     anywhere             anywhere

Можете ли вы сказать мне, какое правило (а) приводит к ошибкам и почему? Или какие правила отсутствуют / отсутствуют и почему?

Спасибо

ОБНОВЛЕНИЕ - ДОБАВЛЕННЫЕ ПРАВИЛА:

-A OUTPUT -p tcp --sport 1024:65535 --dport 80 -j ACCEPT

-A OUTPUT -p udp -s EX_IP --sport 1024:65535 -d 199.195.255.68 --dport 53 -j ACCEPT
-A INPUT -p udp -s 199.195.255.68 --sport 53 -d EX_IP --dport 1024:65535 -j ACCEPT
-A OUTPUT -p tcp -s EX_IP --sport 1024:65535 -d 199.195.255.69 --dport 53 -j ACCEPT
-A INPUT -p tcp -s 199.195.255.69 --sport 53 -d EX_IP --dport 1024:65535 -j ACCEPT

ОШИБКА ВХОДА В ЖУРНАЛ:

May  7 13:03:00 hostname vmunix: IPTables Packet Dropped: IN= OUT=venet0 SRC=EX_IP DST=205.185.112.68 LEN=73 TOS=0x00 PREC=0x00 TTL=64 ID=1255 DF PROTO=UDP SPT=59037 DPT=53 LEN=53

Вы не разрешаете исходящие HTTP-соединения. Я предполагаю, что вы используете веб-сервер, поскольку у вас есть sport правило.

-A OUTPUT -p tcp -m multiport --dports 80,443 -m state --state NEW -j ACCEPT

Вам нужно это правило с dport вместо того sport как у вас уже есть (хотя это правило является избыточным, поскольку вы уже принимаете УСТАНОВЛЕННЫЙ трафик ранее в ваших правилах ВЫХОДА)

Я вижу три проблемы с вашими правилами DNS для исходящей почты:

  1. Для DNS-запросов иногда используется порт источника 53. Ваши правила ACCEPT этому не соответствуют.
  2. Первая пара правил предназначена для UDP, вторая пара - для TCP. У вас должно быть восемь правил, чтобы DNS охватил TCP и UDP как для исходящего, так и для входящего направлений для обоих IP-адресов.
  3. Только правила DNS имеют явный исходный IP-адрес. Если это неправильный адрес, пакеты не будут соответствовать правилам, и ваши DNS-запросы не будут работать. Если у вас есть шлюз по умолчанию, который позволяет вашему внутреннему адресу получать доступ в Интернет через NAT, используемый исходный адрес может не быть внешним в правилах.

Чтобы облегчить отладку, стоит добавить правило в конец цепочки OUTPUT, чтобы регистрировать все непосредственно перед тем, как политика отбрасывает пакет, как это было 72 раза в вашей статистике выше.