LINUX.ORG.RU
решено ФорумAdmin

Centos не может отправить почту и тд после настройки iptables

 ,


1

1

Centos 5.X Сеть не работает на отправку почты, или вытянуть что-то wget.

Интерфейсы:


lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:20 errors:0 dropped:0 overruns:0 frame:0
          TX packets:20 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:10091 (9.8 KiB)  TX bytes:10091 (9.8 KiB)

venet0    Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:127.0.0.1  P-t-P:127.0.0.1  Bcast:0.0.0.0  Mask:255.255.255.255
          UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1
          RX packets:154954 errors:0 dropped:0 overruns:0 frame:0
          TX packets:193636 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:8983048 (8.5 MiB)  TX bytes:27925297 (26.6 MiB)

venet0:0  Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:8X.2XX.2XX.1XX  P-t-P:8X.2XX.2XX.1XX  Bcast:89.253.233.255  Mask:255.255.255.0
          UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1

iptables

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]

-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT

-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT

-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT

-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# страницы доступны только по ssl
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
# из дома все доступно
-A RH-Firewall-1-INPUT -s 1XX.1XX.2XX.XXX -i venet0 -j ACCEPT
# чтобы DNS работал
-A RH-Firewall-1-INPUT -s 8.8.8.8 -i venet0 -j ACCEPT


-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

COMMIT

но при попытки сделать wget ничего не выходит, почта так же не уходит, пишит qmail: 1359806309.914544 delivery 90: deferral: Sorry,_I_wasn't_able_to_establish_an_SMTP_connection._(#4.4.1)/ что не так? OUTPUT же стоит ACCEPT При отключении iptables все работает

Ответ на: комментарий от Aceler

делаю на сервере wget ya.ru и все зависает на Connecting to ya.ru|93.158.134.3|:80... понятное дело и почта не отправляется с него, 25 порт

telnet ALT1.ASPMX.L.GOOGLE.COM 25 Trying 173.194.64.26...

и тишина

Evg0777 ()
Ответ на: комментарий от Evg0777

Ещё раз — ты разрешил исходящие соединения, но запретил входящие. Пакет от тебя на сервер уходит, сервер отвечает — ты ответный пакет блокируешь. Вот и вся наука.

Попробуй задать разрешения для RELATED и ESTABLISHED, как написано тут: http://ru.wikibooks.org/wiki/Настройка_межсетевого_экрана_в_Linux

Aceler ★★★★★ ()
Ответ на: комментарий от Evg0777

sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

sudo iptables -A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT

Aceler ★★★★★ ()
Ответ на: комментарий от GoNaX

чтобы закрыть все порты, например ssh, от всех.

вот тут мне предложили такой конфиг, он работает, но вот исходящий не работает :(

http://freelansim.ru/tasks/11638

# Generated by iptables-save v1.4.8 on Thu Jan 31 15:52:55 2013
*filter
:INPUT DROP [151:29304]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [8:784]
-A INPUT -i lo -j ACCEPT 
-A INPUT -i venet0 -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -i venet0 -p tcp -m tcp --dport 7001 -m state --state NEW -j ACCEPT 
-A INPUT -s 213.180.204.3/32 -i venet0 -j ACCEPT 
-A INPUT -s 77.88.21.3/32 -i venet0 -j ACCEPT 
COMMIT
# Completed on Thu Jan 31 15:52:55 2013
Evg0777 ()

1) не ясно, откуда не открывает соединение telnet: с той же машины, где настраиваешь файрвол, или «из дома»:

# из дома все доступно

2) на первый взгляд, для открытия smtp сессии перечисленных правил достаточно. Детально разбираться мне лень. Зато подскажу 2 способа отладки:

1. Вставить правило перед REJECT'ом:

iptables -A <chain> -m state --state NEW -m limit --limit 10/s -j LOG
2. Собрать дамп
tcpdump -s0 -w /tmp/dump
, затем просмотреть его в wireshark. Или смотреть краткую интерпретацию
tcpdump -vvv host <удалённый хост>

router ★★★★★ ()
Ответ на: комментарий от router

1. С той машины, где настроен iptables.

2. Дома стоит виртуалка, и там все эти правила работают на ура. Тут только подозрение на то, что у venet0 по сути ip 127.0.0.1 а у venet0:0 реальный адрес.

Evg0777 ()
#no default policy on RH-Firewall-1-INPUT chain
:RH-Firewall-1-INPUT - [0:0]
#move all incoming traffic to RH-Firewall-1-Input chain
-A INPUT -j RH-Firewall-1-INPUT

... PROFIT

spunky ★★ ()
Ответ на: комментарий от spunky

хотя шайтан его знает, не должен ли трафик после прохода всего RH-Firewall-1-INPUT возвращаться к дефолту INPUT-а

spunky ★★ ()
Ответ на: комментарий от spunky

man iptables

RETURN means stop traversing this chain and resume at the next rule in the previous (calling) chain.

Хотя вот более полное описание:

User-defined chains

When a packet matches a rule whose target is a user-defined chain, the packet begins traversing the rules in that user-defined chain. If that chain doesn't decide the fate of the packet, then once traversal on that chain has finished, traversal resumes on the next rule in the current chain.

Добавь уже ACCEPT нужному трафику руками, вдруг сразу полегчает?

spunky ★★ ()
Ответ на: комментарий от spunky

Г-спади, задачу не читай, сразу отвечай...

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
у тебя ведь всё закрыто, разве не так? Это считай твой default policy for user-defined chain, и он REJECT.

spunky ★★ ()
Ответ на: комментарий от spunky

ok, видимо я совсем профан.

Забыли все что раньше было. Пишем все заново. Нужно открыть только 80 порт наружу, все остальное закрыто. Пишем на VPS

# Generated by iptables-save
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -i venet0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s XXX.XXX.XXX.XXX -i venet0 -j ACCEPT
-A INPUT -s 8.8.8.8 -i venet0 -j ACCEPT
COMMIT
# Completed on Thu Jan 31 15:52:55 2013

почему потом не работает на VPS

[root@vps sysconfig]# wget ya.ru
--2013-02-04 12:06:15--  http://ya.ru/
Resolving ya.ru... 93.158.134.3, 93.158.134.203, 87.250.250.203, ...
Connecting to ya.ru|93.158.134.3|:80...

в чем проблема????

Evg0777 ()
Ответ на: комментарий от Evg0777

все нормальные люди пьют по пятницам-субботам, один я по четвергам и понедельникам, так что отвечаю: при wget-е наружу в случае по умолчанию ты устанавливаешь TCP-соединение с некоего произвольного порта у себя на 80-й порт на web-сервере. При этом по твоим правилам видно, что ты (отлично зарекомендовавшая себя практика) ограничиваешь только INPUT, OUTPUT у тебя пустой и default policy ACCEPT.

wget устанавливает соединение со следующими значениями портов:

  • порт у тебя произвольный свободный >1024
  • порт на сервере 80

Тебе необходимо лишь разрешить входящие (ответные пакеты) с 80-го порта web-сервера на себя-любимого, что будет реализовано с помощью -A INPUT -p tcp -m tcp --sport 80 -j ACCEPT, т.к. они приходят с 80-го порта web-сервера на твой произвольный порт.

К сожалению, ESTABLISHED и RELATED из предыдущего правила в данном случае не помогут, внимательно почитай (предварительно изучив англ.яз) man iptables. Возможно стоит попробовать добавить -m state --state NEW?

spunky ★★ ()
Ответ на: комментарий от spunky

1. если я сделаю -m state --state NEW, то конечно, все будет ок, но тем самым я разрешаю открывать любой порт у себя. Только что попробовал. По 22 порту удалось соединится, правило будет следующее

-A INPUT -i venet0-m state --state NEW,RELATED,ESTABLISHED -j ACCEPT

что по сути значит - любое соединение (опять же, только что проверил на вертуалке).

2. На вертуалке (не VPS у хостера!!!) такое работает:

# Generated by iptables-save v1.3.5 on Sun Feb  3 23:39:33 2013
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [41:3966]
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 192.168.1.222 -i eth0 -j ACCEPT
-A INPUT -s 8.8.8.8 -i eth0 -j ACCEPT
COMMIT

Работает так, как нужно. Почему происходит затык при переносе ЭТОГО же добра на VPS, и замене eth0 на venet0 и смене 192.168.1.222 на свой внешний IP, я не пойму, хуть убейте.

Evg0777 ()
Ответ на: комментарий от spunky

iptables не работает с алиасами, выдает ошибку.

(No aliases, :, ! or *)

написал в саппорт VPS, отписались очень удачно:%

1. Закрыть все входящие порты iptables -P INPUT DROP 2. Открыть все исходящие порты iptables -P OUTPUT ACCEPT 3. Открыть порт 80 для всех входящих соединений iptables -A INPUT --dport 80 -j ACCEPT

Более подробную информацию Вы можете найти в сети.

Evg0777 ()

Пришлось все делал самому и как то допер до такого решения

# Generated by iptables-save
*filter
:INPUT  ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
# для себя все разрешим
-A INPUT -s XXX.XXX.XXX.XXX -i venet0 -j ACCEPT

-A INPUT -i venet0 -p tcp -m multiport --dport 1:63353  -j DROP

COMMIT
# Completed on Thu Jan 31 15:52:55 2013

так сказать закат солнца в ручную, думаю смысл понятен, хотя многим так и не понятна проблема с которой я столкнулся, а именно то что перестает ходить трафик от сервера, даже саппорт VPS ничего не смог путного посоветовать. Если у кого до будет VPS, думаю пригодится в будущем.

Evg0777 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.