Я не получаю вывод, я хочу от SED при редактировании SSHD_Config

Я решил и задокументировал его здесь: http://aftermanict.blogspot.it/2015/11/bash-iptables-iproute2-and-multiple.html

Это сделает ядро постоянно маршрутизировать пакеты, разрешает несколько маршрутов и даже для сетей, не подтвержденных на компьютере:

nano /etc/sysctl.conf

net.ipv4.conf.default.rp_filter = 2
net.ipv4.conf.all.rp_filter = 2
net.ipv4.ip_forward = 1

for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 0 >| $f ; done

Это приведет к инициализации iptables и, в частности, mangle и nat, которые необходимы для маркировки трафика:

iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X

добавить альтернативные маршруты редактирование:

nano /etc/iproute2/rt_tables

Добавить (имена являются вашими ссылками):

1 tunnel0
2 tunnel1

добавить маршруты и правила, мы используем таблицы ID вместо имен, которые Как вы можете заметить, шлюз не имеет значения, особенно для туннелей, которые могут иметь динамические шлюзы:

ip route add 0.0.0.0/0 dev tun0 table 1
ip route add 0.0.0.0/0 dev tun1 table 2

добавьте правила, чтобы отметить трафик и привязать к соответствующей таблице:

ip rule add from all fwmark 1 table 1
ip rule add from all fwmark 2 table 2
ip route flush cache

проверьте, если вы хотите:

ip route show table 1
ip route show table 2
ip rule show

если вы что-то упускаете, вы можете удалить таким образом:

ip rule del table 1
ip route flush table 1

NOW THE MISSING PART: WONT WORK:

iptables -A PREROUTING -t mangle -p tcp --dport 80 -j MARK --set-mark 1

THIS WILL:

iptables -A OUTPUT -t mangle -p tcp --dport 80 -j MARK --set-mark 1
iptables-save

Нужно ли выбирать трафик и одновременно перемещать его в устройство/туннель? Нет проблемы, я решил и это:

iptables -A OUTPUT -t mangle -p tcp --dport 10001 -j MARK --set-mark 1
iptables -A OUTPUT -t mangle -p tcp --dport 10002 -j MARK --set-mark 2
iptables -t nat -A OUTPUT -p tcp --dport 10001 -j DNAT --to :80
iptables -t nat -A OUTPUT -p tcp --dport 10002 -j DNAT --to :80

NAT обязателен для ответа

iptables -t nat -A POSTROUTING -o $DEV1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o $DEV2 -j MASQUERADE

iptables-save

-121--174231-

На основании ваших дополнительных выходных данных кажется, что pywwetha прослушивает порт 80.

Остановите его с помощью:

systemctl stop pywwetha.service

, а затем отключите с помощью:

systemctl disable pywwetha.service

, а затем попробуйте запустить nginx после этого.

-121--87535-

Попробуйте. Ему не нужны xargs , просто найти , sed и скопировать . Файлы не будут изменены, но распечатает список команд оболочки для копирования файлов. Таким образом, если вам нравятся команды, которые он печатает, то вы запустите его снова и удалите # перед sh -x в последней строке и дайте оболочке выполнить команды.

find "${FOLDER:-.}" -iname "*${SOME_STRING:-ABC}*" |
sed "
    s/^/'/                      # surround filename with single quotes
    s/$/'/
    h                           # save filename in the sed hold space
    s/ABC/XYZ/g                 # change filename
    H                           # append to hold space (separates with newline)
    g                           # get original and modified from hold
    s/\n/ /g                    # replace the newline with a space
    s/^/cp -i/                  # make it into a copy command
"  #| sh -x                     # optionally pipe to shell

Почему в данном случае этот подход лучше xargs ? Поскольку этот метод запускается только 3 процессов total ( find , sed и sh ) в дополнение к требуемой команде cp для каждого файла.

Для использования xargs обработка каждого имени файла потребует больше процессов, чем одна требуемая команда cp .

Гораздо эффективнее позволить одному вызову sed генерировать все команд cp , чем вызывать новый процесс sed для каждого имени файла.

0
17.09.2018, 22:55
2 ответа

Вывод не такой, как я изначально просил, но он работает, так что вот как я это сделал:

    users=""
    /bin/cp -f "$CURRENTDIR"/sshd_config /etc/ssh/sshd_config
    sed -i "s/Port 22/Port $PORT/" /etc/ssh/sshd_config
    for user in `awk -F: '$3 >= 1000 { print $1 }' /etc/passwd`
    do
        users+="${user} "
    done
    if grep "AllowUsers" /etc/ssh/sshd_config
    then
        sed -i "/AllowUsers/c\AllowUsers $users" /etc/ssh/sshd_config
    else
        sed -i "6 a \
        AllowUsers $users" /etc/ssh/sshd_config
    fi

Эта строка находит строку с шаблоном AllowUsersи заменяет всю строку новымAllowUsers $users

sed -i "/AllowUsers/c\AllowUsers $users" /etc/ssh/sshd_config

Эта строка добавляет текст AllowUsers $usersпосле 6th line, если файл еще не содержит AllowUsersуведомление о том, что он написан в две строки:

sed -i "6 a \
AllowUsers $users" /etc/ssh/sshd_config

Теперь программа пишет sshd_configтаким образом, AllowUsersиспользуется один раз с spaceразделенным списком пользователей:

 1 # Package generated configuration file
 2 # See the sshd_config(5) manpage for details
 3
 4 # What ports, IPs and protocols we listen for
 5 Port 22300
 6
 7 AllowUsers user something78 something79 something7
 8
0
28.01.2020, 02:42
sed -i "/AllowUsers/a AllowUsers $user" /etc/ssh/sshd_config

добавляет «AllowUsers $user» после каждой существующей строки AllowUsers.

Я бы просто заменил sed на

echo "AllowUsers $user" >> /etc/ssh/sshd_config
echo "AllowUsers $USERNAME" >> /etc/ssh/sshd_config
1
28.01.2020, 02:42

Теги

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