Новый iptables NAT выдает ошибку 400 Bad Request для других HTTP-запросов

for string in Dogs.pgp.123sda Dogs.pgpsjaksdasdasdaw Dogs.pgp-asasdawad2
do
    printf '%s --> %s\n' "$string" "${string%${string#*.???}}"
done

Выход:

Dogs.pgp.123sda --> Dogs.pgp
Dogs.pgpsjaksdasdasdaw --> Dogs.pgp
Dogs.pgp-asasdawad2 --> Dogs.pgp

Цикл перебирает три строки. В теле цикла исходная строка печатается вместе с преобразованной строкой.

Строка преобразуется путем удаления всего, кроме части перед первой точкой в ​​строке и трех символов, следующих за точкой.

Для этого сначала нужно выяснить, что нужно удалить из исходной строки. Это ${string#*.???}, т.е. остаток строки после удаления до первой точки и еще трех символов. Затем он удаляется с конца строки через ${string%${string#*.???}}.

Если цикл повторяется по именам файлов , совпадающим, например. *.pgp*, то это также будет обрабатывать случаи, когда имена файлов содержат символы новой строки. Единственное, что могло бы сбить с толку приведенное выше преобразование, это если бы перед подстрокой .pgpбыли точки, но вы могли бы справиться с этим, явно сопоставив .pgpвместо.???:

for fname in *.pgp*
do
    printf '%s --> %s\n' "$fname" "${fname%${fname#*.pgp}}"
done
0
12.10.2020, 11:19
2 ответа

Все:

Оказывается, в моем исходном правиле iptables -t nat отсутствовало определение --dport 443 и причина, по которой оно взаимодействовало с другими HTTP-запросами.

# Create the RPDB rules
ip rule add from 0/0 fwmark "0x1000/0x1000" table ovpnc1 prio 9993        # VPN 1 fwmark

iptables -t mangle -A PREROUTING -i br0 -p tcp --dport 443 -d 172.67.168.48 -j MARK --set-mark 0x2000/0x2000
iptables -t nat -A PREROUTING -i br0 -p tcp --dport 443 -j DNAT --to-destination 172.67.168.48:443 -m mark --mark 0x2000/0x2000

Как только определение --dport 443 было добавлено в правило iptables -t nat, проблема была решена.

Надеюсь, это поможет кому-нибудь в будущем.

С уважением,

Гэри

0
18.03.2021, 22:58

VPN-сервер:Предполагая, что eth0(IP-адрес1.2.3.4)является физическим интерфейсом, который напрямую подключен или, по крайней мере, имеет маршрут к IP-адресу или сети целевого веб--сервера, вы можете отслеживать любой трафик, предназначенный для веб-сервера -с IP-адресом 172.67.168.48:443, должен быть принудительно пропущен через VPN-туннель, а затем передан по NAT на IP-адрес eth0(1.2.3.4в этом примере ). В этом случае br0 интерфейс (IP10.10.10.1)— это виртуальный интерфейс, который сервер VPN использует для туннелирования трафика. Пока VPN работает, она уже знает, как направлять пакеты на IP-адрес назначения 172.67.168.48

.

Если нет, то необходимо добавить статический маршрут:

$ ip route show
172.67.168.48/32 via 10.10.10.1 dev br0 metric 101

Как только оператор маршрута будет удовлетворен, вы можете заставить трафик, предназначенный для IP 172.67.168.48:443, маршрутизироваться через туннель и выходить на другой стороне как 1.2.3.4en -маршрут172.67.168.48

$ sudo iptables -t nat -A POSTROUTING -o eth0 -p tcp -m tcp -d 172.67.168.48 --dport 443 -j SNAT --to-source 1.2.3.4
$ sudo iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

Если клиент отправляет пакет, например, на 172.67.168.48:80, исходный IP-адрес не изменится, и пакет может быть отброшен, если он не разрешен последующими цепочками.

0
18.03.2021, 22:58

Теги

Похожие вопросы