The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Настройка TFTP сервера для FreeBSD 5.x+ (tftp freebsd)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: tftp, freebsd,  (найти похожие документы)
Автор: Alexey Tsvetnov <vorakl@protonmail.com> Newsgroups: email Date: Sun, 25 Dec 2005 17:02:14 +0000 (UTC) Subject: Настройка TFTP сервера для FreeBSD 5.x+ Version: 1.0 Copyright (c) 2006 Alexey Tsvetnov <vorakl@protonmail.com.> 1. Постановка задачи. 2. Решение задачи. 3. Пошаговая реализация. 1. Постановка задачи. Необходимо настроить сервер для сохранения (восстановления) конфигурации коммутаторов и маршрутизаторов по протоколу tftp. Сервер должен быть достаточно стабильным в работе и обеспечивать оптимальный уровень безопасности, учитывая специфику tftp-протокола. 2. Решение задачи. В качестве tftp-сервера был выбран tftp-hpa by Brooks Davis <brooks@FreeBSD.org.> Программа позволяет запускать дочерний процесс от непривилегированного пользователя, создавать от его имени и с определёнными правами новые файлы, выполнять chroot в выбранный каталог, ограничивать доступ к файлам по таким критериям, как имя файла и переданная комманда (WRQ или RRQ), выполнять прозрачное переименовывание файлов в зависимости от IP-адреса клиента. Программа прекрасно работает как самостоятельный сервер и не нуждается в использовании inetd. В поставке идёт так же достаточно удобная клиентская программа, которая в отличае от поставляемой с базовой системой, позволяет передавать желаемые команды прямо в строке вызова. Предложенная ниже конфигурация обеспечивает: * программа используется как самостоятельный сервис, без использования inetd; * умеренное протоколирование через syslog по ftp facility. Уровень детализации протоколирования задаётся в строке парамметров, от полного отсутствия до максимального (-vvv); * дочерние процессы выполняются от имени непривилегированного пользователя tftpd; * осуществляется chroot в каталог /var/tftp; * разрешено создавать новые файлы, если такие отсутствую в рабочем каталоге; * все новые файлы создаются от имени tftpd:tftpd и назначаются права 740, т.е. к файлу имеют доступ только владелец и группа; * доступ для всех остальных пользователей, как к файлам, так и к рабочему каталогу /var/tftp не требуется; * все имена файлов прозрачно преобразуются при записи из ИМЯ в IP-ИМЯ, а при чтении - из IP-ИМЯ в ИМЯ. Это позволяет ограничить доступ к файлам, основываясь на IP-адресе клиента. Т.е. одно и тоже имя файла от абсолютно разных хостов на сервере будет сохраняться под разными именами и у каждого хоста будет доступ только к своей копии файла. 3. Пошаговая реализация. Установить программу: cd /usr/ports/ftp/tftp-hpa && make install clean Добавить новую группу: pw groupadd tftpd Добавить нового пользователя: pw useradd tftpd -c tftp_manager -d /nonexistent -g tftpd -s /usr/sbin/nologin Создать рабочий каталог для размещения скачанных/закаченных данных: mkdir /var/tftp && chown tftpd:tftpd /var/tftp && chmod 750 /var/tftp Настроить syslog на протоколирование от ftp.* и ротацию протокола. Если настройки по-умолчанию syslog и newsyslog не менялись, то ни чего настраивать не нужно. Протоколирование в этом случае будет производиться в /var/log/xferlog Создать конфигурационный файл обработки файлов (переименование, контроль доступа): touch /usr/local/etc/tftpd-remap.conf && chmod 440 /usr/local/etc/tftpd-remap.conf && \ chown tftpd:tftpd /usr/local/etc/tftpd-remap.conf Добавить в файл /usr/local/etc/tftpd-remap.conf: # Rename all files # If WRQ: filename -> IP-filename # If RRQ: IP-filename -> filename r .* \i-\0 Создать стартовый скрипт: touch /usr/local/etc/rc.d/tftpd.sh && chmod +x /usr/local/etc/rc.d/tftpd.sh Добавить в файл /usr/local/etc/rc.d/tftpd.sh: #!/bin/sh # # tftp-hpa init script # Copyright (c) 2006 by Alexey Tsvetnov, vorakl@fbsd.kiev.ua # # PROVIDE: tftpd # REQUIRE: DAEMON # BEFORE: LOGIN # KEYWORD: shutdown # # Define these tftpd_* variables in one of these files: # /etc/rc.conf # /etc/rc.conf.local # /etc/rc.conf.d/tftpd # # tftpd_enable (bool): Set it to "YES" to enable tftpd. # Default is "NO". # tftpd_pidfile (path): Set full path to tftpd.pid. # Default is "/var/run/tftpd.pid". # tftpd_remapfile (path): Set full path to remap file. # Default is "/usr/local/etc/tftpd-remap.conf". # tftpd_datadir (path): Set full path to directory with data. # Default is "/var/tftp". # tftpd_flags (str): Extra flags passed to start command. # Default is "-cps -u tftpd -U 037 -B 1468". # . /etc/rc.subr name="tftpd" rcvar=`set_rcvar` load_rc_config $name # DO NOT CHANGE THESE DEFAULT VALUES HERE : ${tftpd_enable="NO"} : ${tftpd_pidfile="/var/run/tftpd.pid"} : ${tftpd_remapfile="/usr/local/etc/tftpd-remap.conf"} : ${tftpd_datadir="/var/tftp"} : ${tftpd_flags="-vvcps -u tftpd -U 037 -B 1468"} extra_commands="reload" start_cmd="tftpd_start" stop_postcmd="tftpd_poststop" reload_cmd="tftpd_reload" required_files="/usr/local/etc/tftpd-remap.conf" pidfile=$tftpd_pidfile procname="/usr/local/libexec/in.tftpd" tftpd_start() { /bin/echo -n "Starting tftpd" /usr/local/libexec/in.tftpd $tftpd_flags -l -m $tftpd_remapfile $tftpd_datadir /bin/ps x | /usr/bin/grep in.tftpd | /usr/bin/grep -v grep | /usr/bin/awk '{print $1}' > $tftpd_pidfile /bin/echo "." } tftpd_poststop() { /bin/rm -f $tftpd_pidfile } tftpd_reload() { /bin/kill -1 `cat $tftpd_pidfile` } run_rc_command "$1" Добавить в /etc/rc.conf: tftpd_enable="YES" Требуемые настройки firewall: а) для сервера: UDP ServerIP [69] <- ClientIP [1024-65535] UDP ServerIP [1024-65535] <-> ClientIP [1024-65535] ipfw: ipfw -q add pass udp from ${tftp_clnt} 1024-65535 to me 69 in ipfw -q add pass udp from me 1024-65535 to ${tftp_clnt} 1024-65535 out ipfw -q add pass udp from ${tftp_clnt} 1024-65535 to me 1024-65535 in б) для клиента: UDP ClientIP [1024-65535] -> ServerIP [69] UDP ClientIP [1024-65535] <-> ServerIP [1024-65535] ipfw: ipfw -q add pass udp from me 1024-65535 to ${tftp_srv} 69 out ipfw -q add pass udp from ${tftp_srv} 1024-65535 to me 1024-65535 in ipfw -q add pass udp from me 1024-65535 to ${tftp_srv} 1024-65535 out

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, h0ttab (??), 14:59, 31/05/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Вот токо я ни черта не понял с этого всего :)) где можно найти дефолтовый конфиг?
     
  • 1.2, hertz (?), 17:25, 06/06/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Его не существует, по крайней мере я не видел. А здесь приведен достаточно грамотный конфиг, с пошаговыми инструкциями - нечего тут понимать, просто сделай
     
  • 1.3, swm (??), 13:29, 23/01/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    For FreeBSD v7.1 and tftp-hpa v0.48 need to change all patches in /usr/local/etc/rc.d/tftpd.sh:

    from /usr/local/libexec/in.tftpd
    to   /usr/sbin/in.tftpd

     
  • 1.4, kot (??), 17:52, 09/06/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Добрый день! Есть FreeBSD 7.1. Сделал всё как описано в статье и пишет в логах следующее:
    ==> /var/log/messages <==
    Jun  9 16:38:34 test in.tftpd[22790]: Cannot set nonblock flag on socket: Bad file descriptor

    ==> /var/log/xferlog <==
    Jun  9 16:38:34 test in.tftpd[22790]: Cannot set nonblock flag on socket: Bad file descriptor

    ==> /var/log/all.log <==
    Jun  9 16:38:34 test in.tftpd[22790]: Cannot set nonblock flag on socket: Bad file descriptor
    Jun  9 16:38:34 test kernel: Jun  9 16:38:34 test in.tftpd[22790]: Cannot set nonblock flag on socket: Bad file descriptor

     
  • 1.5, Yurij (?), 11:34, 12/06/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    ошибку выдает:
    cannot open IPv6 socket, disable IPv6: Protocol not supported
    Jun 12 10:32:48 nagios in.tftpd[48934]: Cannot set nonblock flag on socket: Bad file descriptor
    как отключить ipv6 ?
     
     
  • 2.6, ptika (?), 16:27, 11/08/2009 [^] [^^] [^^^] [ответить]  
  • +/
    man in.tftpd
    добавить в rc.conf
    tftpd_flags="--ipv4 .............."
     

  • 1.7, Tiger (??), 04:28, 25/11/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    на 7.1 проверено, можете копипастить:)
     
  • 1.8, Born in the USSR (?), 13:56, 23/04/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    На FreeBSD 8.0 проверно, работает
     
  • 1.9, Dima (??), 19:33, 18/12/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    То что файлы заливаются на tftp с именем "IP-имя" - удобно, но чтобы скачивать нужно тоже, чтобы файл был в формате "IP-имя", что не очень удобно, например, если нужно заливать новую прошивку. Как составить tftpd-remap.conf, чтобы при чтении файлы не переименовывались?
     
  • 1.10, Alexndr (?), 15:58, 03/02/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >uname-a                                            FreeBSD 8.2-RELEASE

    Не завелся с флагом -s
    : ${tftpd_flags="-vvcps -u tftpd -U 037 -B 1468"}
    Как только убрал - всё заработало

     
  • 1.11, Alexndr (?), 16:03, 03/02/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Забыл:

    >pkg_info | grep tftp                                                                                    

    tftp-hpa-5.1        An advanced tftp server

     
  • 1.12, tehnikpc (ok), 12:17, 13/04/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    "ipfw -q add pass udp from ${tftp_clnt} 1024-65535 to me 69 in
    ipfw -q add pass udp from me 1024-65535 to ${tftp_clnt} 1024-65535 out
    ipfw -q add pass udp from ${tftp_clnt} 1024-65535 to me 1024-65535 in"
    Ничего себе вы порты открываете. Может лучше сразу сделать "allow from any to any"? Я в шоке.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2020 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру