1

Я пытаюсь настроить свои iptables для блокировки любого сетевого трафика, кроме HTTP:

iptables -P INPUT DROP #set policy of INPUT to DROP
iptables -P OUTPUT DROP #set policy of OUTPUT to DROP

iptables -A INPUT -p tcp --sport 80 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

Вывод iptables (iptables -L -v) дает мне:

Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    4   745 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp spt:http state RELATED,ESTABLISHED

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

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    2   330 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:http state NEW,ESTABLISHED

Когда я пытаюсь wget 127.0.0.1 (да, у меня есть веб-сервер, и он работает нормально), я получаю:

--2012-11-14 16:29:01--  http://127.0.0.1/
Connecting to 127.0.0.1:80...

Запрос никогда не заканчивается. Что я делаю неправильно? Я устанавливаю iptables для DROP все по умолчанию и добавить правило для ACCEPT HTTP.

2 ответа2

1

Как правило, не стоит блокировать весь трафик через интерфейс обратной связи. Кроме того, вы должны включить ICMP на всех интерфейсах, чтобы они правильно работали с IP-протоколами. Последнее, что вам, скорее всего, понадобится - это трафик DNS. Кроме того, правило, которое соответствует состояниям ESTABLISHED и RELATED, не должно совпадать ни с одним портом. Поэтому попробуйте следующий набор правил:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m udp -p udp --sport 53
iptables -A INPUT -j DROP
iptables -A OUTPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
iptables -A OUTPUT -m udp -p udp --dport 53
iptables -A OUTPUT -j REJECT --reject-with icmp-host-prohibited
0

Я бы посоветовал вам также реализовать небольшую защиту от нескольких типов сканирования и необычного использования протокола TCP:

-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,ACK,URG -j DROP
-A INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
-A INPUT -m state --state INVALID -j DROP

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .