Верхний ответ от dougBTV неверен. Я не могу ответить на его ответ, потому что у меня еще нет необходимых очков репутации, поэтому я объясню здесь:
Он использует зону по умолчанию "public". Он привязывает сети к этой зоне, а затем открывает порты в этой зоне. Но в конфигурации по умолчанию весь трафик проходит через зону по умолчанию, а не только исходные сети, к которым вы привязаны. Таким образом, его исходные команды --add -не имеют значения, а его команды --add -port теперь позволили всему миру получить доступ к этим портам.
Второй ответ Нормунда Калнберзиньша правильный. Вы хотите создать отдельную зону, привязать свою сеть/IP-адреса к этой зоне и открыть порты в этой зоне.
Кроме того, вы можете оставить все в зоне по умолчанию и использовать расширенные правила firewalld, чтобы разрешить доступ с определенных IP-адресов:
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.2.2" accept'
Это разрешает весь трафик с 192.168.2.2 на все порты, и, поскольку я не указал зону, это будет применено к зоне по умолчанию "public" (используйте --получите -зону по умолчанию -чтобы проверить, какая у вас зона по умолчанию, и --получить -активные -зоны, чтобы увидеть, какие зоны используются в настоящее время ).
Чтобы разрешить доступ с этого IP только к определенному порту, я бы сделал:
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.2.2" port port="1234" protocol="tcp" accept'
Лучше всего запускать эти команды без --постоянного (или --разрешения для краткости ), что влияет на работающий в данный момент брандмауэр. После проверки того, что ваше правило работает, запустите его снова с добавлением --perm, чтобы оно помнилось при последующих перезагрузках firewalld.
Вы не предоставили образец, поэтому я не уверен, подойдет ли он вам.
Использовать здесь документы:
echo "$(cat <<'EOF'
foo "x" bar 'x'
EOF
)"
Когда вы запустите это с помощью set -x
, вы увидите, что bash избежит этого для вас:
+ echo 'foo "x" bar '\''x'\'''
foo "x" bar 'x'
Теперь с вашим образцом:
./show-results "$(cat <<'EOF'
SELECT * FROM `table` WHERE `column` LIKE "%\'%"
EOF
)"
Выдает правильный экранированный аргумент:
./show-results 'SELECT * FROM `table` WHERE `column` LIKE "%\'\''%"'
Первая обратная косая черта находится внутри ''
, поэтому она не действует как экранирование и приводит к \
, вторая — снаружи ''
и используется для экранирования одиночного '
.