IPtables представляют соответствие в виде строки для некоторых URL

Можно использовать любое из следующих к командам выполнения когда $1 пусто:

[[ ! $1 ]] && { COMMANDS; }
[[ $1 ]] || { COMMANDS; }
[[ -z $1 ]] && { COMMANDS; }
[[ -n $1 ]] || { COMMANDS; }

Кроме того, Вы не должны заключать расширение в кавычки в этом конкретном примере, поскольку никакое разделение слова не выполняется.

Если Вы желаете проверить, существуют ли аргументы, тем не менее, Вы были бы лучше для использования (( $# )).

Если я понял Ваши намерения, вот то, как Ваш код мог быть написан с getopts:

#!/bin/bash

(( $# )) || printf '%s\n' 'No arguments'

while getopts ':n:h' opt; do
    case "$opt" in
        n)
            [[ $OPTARG ]] && printf '%s\n' "Commands were run, option $OPTARG, so let's do what that says."
            [[ ! $OPTARG ]] && printf '%s\n' "Commands were run, there was no option, so let's run some stuff."
            ;;
        h) printf '%s\n' 'Help printed' ;;
        *) printf '%s\n' "I don't know what that argument is!" ;;
    esac
done
2
05.07.2018, 06:44
1 ответ

Похоже, что Вы пытаетесь сделать что-то значительно более сложное, чем я думаю, что Вы хотите.

Что Вы просите:

Заблокируйте определенную строку в полезной нагрузке (уровень 7) пакета. Это будет препятствовать тому, чтобы кто-то послал электронное письмо или IM упоминание строки "linuxcore", или от добавления комментариев на форумах об этом.

Что я думаю, что Вы хотите:

Пакеты перенаправления, предназначенные для любого IP-адреса, разрешенного именем domain.com и предназначенный для порта 8888 для портирования 7777.

Я приму то, что я думаю, что Вы хотите, так как первый не имеет особого смысла. Я также предполагаю, что Вы не интересуетесь соответствием "foo.domain.com". Помните, что это - IP таблицы, не таблицы DNS.

В этом случае строки 1, 2 и 4 являются ненужными. И Вы не хотите сопоставление строк. iptables достаточно умно, чтобы превратить имена в соответствующие IP-адреса и мультиплексировать правила по мере необходимости. Кроме того, так как Вы используете PREROUTING, знайте, что это будет только соответствовать входу в Вашу систему, не пакеты, оставляя Вашу систему (если Вы захотите соответствовать пакетам, оставляя Вас, должен использовать OUTPUT, или альтернативно имейте одного из каждого).

То правило было бы похоже на это:

iptables -t nat -A PREROUTING -d domain.com -p tcp --dport 8888 -j REDIRECT --to-ports 7777 
2
27.01.2020, 22:15

Теги

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