У меня проблема с одной из моих виртуальных машин. В моей настройке гипервизор kvm / libvirt действует как брандмауэр и выполняет все NAT. Для всех виртуальных машин существует 1 виртуальная сеть (virbr2).
Операционная система: Ubuntu Server 12.04LTS
Есть один исходящий интерфейс: eth0
Моя проблема в том, что одна из моих виртуальных машин не может подключиться к внешнему серверу smtp. Я пробовал Gmail, Yahoo и тот из моего университета. Любопытно то, что, хотя он не может подключиться к каким-либо серверам smtp, он может подключиться к другим хостам (за пределами локальной сети) на любом порту.
На виртуальной машине работают apache, zarafa и postfix, и она может нормально получать почту. Только время отправки.
May 24 15:50:48 mail postfix/smtp[7848]: connect to mailserver.example.com[1.2.3.4]:25: Connection timed out
May 24 15:50:48 mail postfix/smtp[7848]: 2196B320A81: to=<office@example.com>, relay=none, delay=51881, delays=51790/0.06/91/0, dsn=4.4.1, status=deferred (connect to mailserver.example.com[1.2.3.4]:25: Connection timed out)
У меня такое чувство, что я упускаю здесь что-то очевидное.
Это мои правила iptables. Рассматриваемый IP-адрес: 10.2.3.253.
iptables -S; iptables -t nat -S
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --sport 1024:65535 --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --sport 1024:65535 --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --sport 1024:65535 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i virbr2 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i virbr2 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i virbr2 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i virbr2 -p tcp -m tcp --dport 67 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 16509 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 16509 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5902 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5901 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5903 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5900 -j ACCEPT
-A FORWARD -i virbr2 -o eth0 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -d 10.2.3.0/24 -o virbr2 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -d 10.2.3.0/24 -i eth0 -o virbr2 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -d 10.2.3.0/24 -o virbr2 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.2.3.0/24 -i virbr2 -o eth0 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i virbr2 -o virbr2 -j ACCEPT
-A FORWARD -o virbr2 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i virbr2 -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A PREROUTING -p tcp -m tcp --dport 25 -j DNAT --to-destination 10.2.3.253:25
-A PREROUTING -p tcp -m tcp --dport 143 -j DNAT --to-destination 10.2.3.253:143
-A PREROUTING -p tcp -m tcp --dport 465 -j DNAT --to-destination 10.2.3.253:465
-A PREROUTING -p tcp -m tcp --dport 587 -j DNAT --to-destination 10.2.3.253:587
-A PREROUTING -p tcp -m tcp --dport 993 -j DNAT --to-destination 10.2.3.253:993
-A POSTROUTING -s 10.2.3.0/24 ! -d 10.2.3.0/24 -o eth0 -p tcp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 10.2.3.0/24 ! -d 10.2.3.0/24 -o eth0 -p udp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 10.2.3.0/24 ! -d 10.2.3.0/24 -o eth0 -j MASQUERADE
-A POSTROUTING -s 10.2.3.0/24 ! -d 10.2.3.0/24 -o eth0 -p tcp -j MASQUERADE
-A POSTROUTING -s 10.2.3.0/24 ! -d 10.2.3.0/24 -o eth0 -p udp -j MASQUERADE
-A POSTROUTING -s 10.2.3.0/24 ! -d 10.2.3.0/24 -o eth0 -j MASQUERADE
Я выяснил, в чем проблема!
эти правила
-A POSTROUTING -s 10.2.3.0/24 ! -d 10.2.3.0/24 -o eth0 -p tcp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 10.2.3.0/24 ! -d 10.2.3.0/24 -o eth0 -p udp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 10.2.3.0/24 ! -d 10.2.3.0/24 -o eth0 -j MASQUERADE
перехвачены этими:
-A POSTROUTING -s 10.2.3.0/24 ! -d 10.2.3.0/24 -o eth0 -p tcp -j MASQUERADE
-A POSTROUTING -s 10.2.3.0/24 ! -d 10.2.3.0/24 -o eth0 -p udp -j MASQUERADE
-A POSTROUTING -s 10.2.3.0/24 ! -d 10.2.3.0/24 -o eth0 -j MASQUERADE
Поэтому мне пришлось убрать последние три правила.
Я не знаю, как, когда и зачем я их туда поместил, но это решило проблему!