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.
Смотрим логи
Если вы не увидели нужной вам информации советую по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
Проверяем
Порт открыт. Как добавить к правилу ограничение по ip адресам читайте в этой статье Базовая настройка iptables
То данная статья расскажет как узнать по какому порту и протоколу ваше приложение пытается связаться с сервером.
Читать далее.
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
Читаем вывод.
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 '^]'.
iptables -A OUTPUT -j LOG --log-level DEBUG --log-prefix '[FW OUTPUT]: '
ОтветитьУдалитьiptables -A OUTPUT -j LOG --log-level DEBUG --log-prefix '[FW FORWARD]: '
Одинаковые, так и надо?
Да вы правы нужно указать цепочку FORWARD
ОтветитьУдалитьiptables -A FORWARD -j LOG --log-level DEBUG --log-prefix '[FW FORWARD]: '
Исправлено
ОтветитьУдалить