Показаны сообщения с ярлыком порт. Показать все сообщения
Показаны сообщения с ярлыком порт. Показать все сообщения

7 окт. 2013 г.

Проверка доступности портов между двумя Linux-машинами (для Solaris тоже работает)

Бывают ситуации, когда нам необходимо проверить видимость TCP портов одной машины для другой. Казалось бы всё просто - telnet. А если на серверной машине еще не установлено или не запущено приложение, слушающее нужный порт? Я уверен, что существует масса способов, но мне было проще написать 2 маленьких скрипта на Python.

Один скрипт - сервер. Слушает заданный порт и пишет в консоль информацию о клиентах. А второй - клиентский скрипт - стучится по заданному IP в заданный порт и возвращает ответ от сервера (если порт доступен).

Серверный скрипт.


#!/usr/bin/env python
import socket, sys
# Server address and buffer size
TCP_IP = '0.0.0.0'
BUFFER_SIZE = 1024 
# Usage string
usage = "server.py PORT"
# Check number of arguments and print usage if not enough arguments
if (len(sys.argv) < 2):
        print(usage)
        sys.exit(0)
TCP_PORT = int(sys.argv[1])
# Create socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)
# Listen for client connection until Ctrl+C will be pressed
while 1:
        c = s.accept()
        cli_sock, cli_addr = c
        cli_sock.send("Hello, person from %s"%(str(cli_addr)))
        cli_sock.close()
        print("received data from:", str(cli_addr))

14 дек. 2012 г.

Как с помощью iptables разрешить доступ к локальному порту только для списка IP адресов

Возможно, есть способы и попроще, но я сделал так.
Защищать будем, например, Asterisk (по-умолчанию порт для протокола SIP 5060)

Создаем новую цепочку:

iptables -N asterisk-manual
iptables -I INPUT -i eth0 -p udp --dport 5060 -j asterisk-manual

Прописываем, из каких адресов можно подключаться и в конце запрещаем остальным:

iptables -A asterisk-manual -s 192.168.1.0/24 -j ACCEPT
iptables -A asterisk-manual -s 192.168.2.0/24 -j ACCEPT
iptables -A asterisk-manual -s 192.168.3.0/24 -j ACCEPT
iptables -A asterisk-manual -s 192.168.4.2 -j ACCEPT
iptables -A asterisk-manual -j DROP

И сохраняем правила:

iptables-save

Чтобы добавить новый адрес вначале удалим последнюю строчку (по ее номеру), а затем добавим новую и восстановим запрещающую:

iptables -L asterisk-manual -n --line-numbers
iptables -D asterisk-manual 5
iptables -A asterisk-manual -s 192.168.4.3 -j ACCEPT
iptables -A asterisk-manual -j DROP

Не забываем сохраняться:

iptables-save

7 нояб. 2012 г.

SSH tunneling

Пробросить порт с помощью ssh довольно просто:

ssh -R localip:localport:remoteip:remoteport localuser@localip

пример: 192.168.1.1:8080:192.168.2.1:80 root@192.168.1.1

Т. е. порт на той машине, где запущена эта команда будет форвардиться на порт на удаленной машине. Например, локальная машина имееть vpn-подключение, недоступной другим машинам и они могут через нее коннектиться к какомуто серверу на другом конце vpn.
В примере все запросы на порт 8080 машины 192.168.1.1 будут идти на порт 80 машины 192.168.2.1 и, соответственно, ответы будут приходить обратно. В общем, примерно то же, что и port forwarding в роутере.