iptables как узнать какой порт заблокирован debug log

Если вы настраивали iptables по этой статье Базовая настройка iptables или аналогичной где политикой по умолчанию для всех соединений является DROP и вы столкнулись с проблемой, что какое-то приложение не может получить доступ к серверу(удаленному или в локальной сети).
То данная статья расскажет как узнать по какому порту и протоколу ваше приложение пытается связаться с сервером.
Читать далее.

1. Убедитесь что включены логи
Если нет то добавляем в скрипт, если вы хотите включить логи на время то просто пишем в shell
iptables -A INPUT   -j LOG --log-level DEBUG --log-prefix '[FW INPUT]:    '
iptables -A OUTPUT  -j LOG --log-level DEBUG --log-prefix '[FW OUTPUT]:   '
iptables -A FORWARD  -j LOG --log-level DEBUG --log-prefix '[FW FORWARD]:   '


2. Запускаем приложение и смотрим логи
По умолчанию логи пишутся в /var/log/syslog
Пример
Попытаемся получить доступ к smtp серверу gmail. Данный пример является, показательным. Заранее известные порт и протокол. Telnet работает только с протоколом tcp и указан порт как того требует синтаксис telnet.
root@test:~# telnet google.com 80
Trying 74.125.39.105...
Trying 74.125.39.106...
Trying 74.125.39.147...
Trying 74.125.39.99...
Trying 74.125.39.103...
Trying 74.125.39.104...
telnet: Unable to connect to remote host: Connection timed out

Смотрим логи
root@test:~# tail /var/log/syslog
Jun 15 00:23:17 test kernel: [783138.189011] [FW OUTPUT]:   IN= OUT=eth0 SRC=10.0.2.15 DST=74.125.39.147 LEN=60 TOS=0x10 PREC=0x00 TTL=64 ID=28288 DF PROTO=TCP SPT=58278 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0
Jun 15 00:23:29 test kernel: [783150.188999] [FW OUTPUT]:   IN= OUT=eth0 SRC=10.0.2.15 DST=74.125.39.99 LEN=60 TOS=0x10 PREC=0x00 TTL=64 ID=31169 DF PROTO=TCP SPT=54094 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0
Jun 15 00:23:32 test kernel: [783153.188913] [FW OUTPUT]:   IN= OUT=eth0 SRC=10.0.2.15 DST=74.125.39.99 LEN=60 TOS=0x10 PREC=0x00 TTL=64 ID=31170 DF PROTO=TCP SPT=54094 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0
Jun 15 00:23:38 test kernel: [783159.188852] [FW OUTPUT]:   IN= OUT=eth0 SRC=10.0.2.15 DST=74.125.39.99 LEN=60 TOS=0x10 PREC=0x00 TTL=64 ID=31171 DF PROTO=TCP SPT=54094 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0
Jun 15 00:23:50 test kernel: [783171.189035] [FW OUTPUT]:   IN= OUT=eth0 SRC=10.0.2.15 DST=74.125.39.103 LEN=60 TOS=0x10 PREC=0x00 TTL=64 ID=17728 DF PROTO=TCP SPT=34871 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0
Jun 15 00:23:53 test kernel: [783174.188740] [FW OUTPUT]:   IN= OUT=eth0 SRC=10.0.2.15 DST=74.125.39.103 LEN=60 TOS=0x10 PREC=0x00 TTL=64 ID=17729 DF PROTO=TCP SPT=34871 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0
Jun 15 00:23:59 test kernel: [783180.188852] [FW OUTPUT]:   IN= OUT=eth0 SRC=10.0.2.15 DST=74.125.39.103 LEN=60 TOS=0x10 PREC=0x00 TTL=64 ID=17730 DF PROTO=TCP SPT=34871 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0
Jun 15 00:24:11 test kernel: [783192.189048] [FW OUTPUT]:   IN= OUT=eth0 SRC=10.0.2.15 DST=74.125.39.104 LEN=60 TOS=0x10 PREC=0x00 TTL=64 ID=20687 DF PROTO=TCP SPT=36303 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0
Jun 15 00:24:14 test kernel: [783195.188735] [FW OUTPUT]:   IN= OUT=eth0 SRC=10.0.2.15 DST=74.125.39.104 LEN=60 TOS=0x10 PREC=0x00 TTL=64 ID=20688 DF PROTO=TCP SPT=36303 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0
Jun 15 00:24:20 test kernel: [783201.188858] [FW OUTPUT]:   IN= OUT=eth0 SRC=10.0.2.15 DST=74.125.39.104 LEN=60 TOS=0x10 PREC=0x00 TTL=64 ID=20689 DF PROTO=TCP SPT=36303 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0
Если вы не увидели нужной вам информации советую поgrepать /var/log/syslog. Как пользоваться утилитой поиска в текстовых файлах смотрите в статье тут. Поgrepать можно по ip адресу, по цепочке или другим ориентирам.
Читаем вывод.
FW OUTPUT]: IN= OUT=eth0 SRC=10.0.2.15 DST=74.125.39.104 LEN=60 TOS=0x10 PREC=0x00 TTL=64 ID=20689 DF PROTO=TCP SPT=36303 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0

Цепочка OUTPUT
Источник OUT=eth0 SRC=10.0.2.15
Получатель DST=74.125.39.104
Протокол PROTO=TCP
Порт источника SPT=36303
Порт назначения DPT=80

Из всего это следует, что были отброшены исходящие пакеты, с ip адреса 10.0.2.15 на ip адрес 74.125.39.104 на порт 80.

3. Составляем правило.
iptables -A OUTPUT(наша цепочка) -p tcp(протокол) --dport(порт назначения) 80 -m conntrack --ctstate NEW -j ACCEPT
Проверяем
root@test:~# telnet google.com 80
Trying 209.85.147.99...
Connected to google.com.
Escape character is '^]'.
Порт открыт. Как добавить к правилу ограничение по ip адресам читайте в этой статье Базовая настройка iptables

Комментарии

  1. iptables -A OUTPUT -j LOG --log-level DEBUG --log-prefix '[FW OUTPUT]: '
    iptables -A OUTPUT -j LOG --log-level DEBUG --log-prefix '[FW FORWARD]: '

    Одинаковые, так и надо?

    ОтветитьУдалить
  2. Да вы правы нужно указать цепочку FORWARD
    iptables -A FORWARD -j LOG --log-level DEBUG --log-prefix '[FW FORWARD]: '

    ОтветитьУдалить

Отправить комментарий

Популярные сообщения