Trywialne transfery z TFTP, część 3: Użycie
W poprzednich artykułach przedstawiliśmy TFTP i przedyskutowaliśmy, dlaczego możesz chcieć go używać, a także przyjrzeliśmy się różnym opcjom konfiguracyjnym. Teraz spróbujmy przenieść kilka plików. Możesz to zrobić z pewnym komfortem teraz, gdy wiesz, jak zabezpieczyć swój serwer nieco lepiej.
Testy 1, 2, 3
Aby przetestować swój serwer, potrzebujesz oczywiście klienta, z którym mógłbyś się połączyć. Na szczęście możemy go zainstalować w bardzo prosty sposób:
# apt-get install tftp
Pochodne Red Hat powinny zarządzać instalacją klienta w następujący sposób:
# yum install tftp
Jeśli sprawdzisz adres IP swojego serwera za pomocą polecenia takiego jak to poniżej, możliwe jest połączenie się z serwerem TFTP z dowolnego miejsca (zakładając oczywiście, że konfiguracja TCP Wrappers lub reguły IPtables Ci na to pozwalają).
# ip a
Gdy już znasz adres IP, bardzo łatwo jest zacząć działać. Możesz połączyć się z serwerem z klienta w następujący sposób:
# tftp 10.10.10.10
Teraz powinieneś być połączony. (Jeśli to nie zadziałało, sprawdź firewalling lub możesz „telnetować” na port 69 na adresie IP serwera TFTP). Następnie, możesz uruchomić polecenie „status” w następujący sposób:
tftp> statusConnected to 192.168.0.9.Mode: netascii Verbose: off Tracing: offRexmt-interval: 5 seconds, Max-timeout: 25 seconds
W tym momencie, wolę używać wyjścia verbose, po prostu wpisując to polecenie:
tftp> verbose
Możesz zdecydować się na pobranie plików binarnych lub zwykłych plików tekstowych, wpisując to dla zwykłego tekstu:
tftp> ascii
Or, you can force binaries to download correctly with:
tftp> binary
Aby dać nam jakąś zawartość do pobrania, stworzyłem prosty plik tekstowy jak poniżej:
# echo hello > HERE_I_AM
To oznacza, że plik HERE_I_AM zawiera słowo „hello”. Następnie przeniosłem ten plik do naszego domyślnego katalogu TFTP, który widzieliśmy wcześniej w głównym pliku konfiguracyjnym, /etc/inetd.conf. Ten katalog – z którego obsługuje nasz wierny demon – nazywa się /srv/tftp, jak widzimy na Listingu 3.
Ponieważ jest to zwykły plik tekstowy, nie ma potrzeby włączania trybu binarnego, a my już napisaliśmy verbose, więc teraz wystarczy przesłać nasz plik.
Jeśli jesteś zaznajomiony z FTP w linii poleceń, nie będziesz miał trudności z przyswojeniem sobie tego języka. Jest to po prostu „get” do odbierania i „put” do umieszczania. Mój przykładowy plik HERE_I_AM może być pobrany w następujący sposób.
tftp> get HERE_I_AMgetting from 192.168.0.9:HERE_I_AM to HERE_I_AM Received 7 bytes in 0.1 seconds
Powyższy przykład oferuje wyjście verbose, gdy ten tryb jest włączony. Możesz wyciągnąć przydatne informacje, takie jak to, że nie używamy trybu binarnego, ale po prostu trybu „netascii”. Dodatkowo, możesz zobaczyć ile bajtów zostało przesłanych i jak szybko. W tym przypadku dane miały rozmiar siedmiu bajtów, a ich przesłanie zajęło jedną dziesiątą sekundy, czyli pół kilobajta na sekundę.
Porównaj i skontrastuj to z wyjściem trybu niewerbalnego, a jestem pewien, że zgodzisz się, że warto go używać:
tftp> get HERE_I_AMReceived 7 bytes in 0.0 seconds
Jeśli czujesz potrzebę ukrycia numeru portu swojego serwera TFTP, to po edycji pliku /etc/services musisz połączyć się z oprogramowaniem klienckim, jak poniżej:
# tftp 10.10.10.10 11111
Dodatkowo, nie bój się żądania wielu plików w jednej linii. Osiągnij to, używając następującej składni:
# get one.txt two.txt three.txt four.txt five.txt
Jeśli napotkasz problemy, jest kilka opcji rozwiązywania problemów, które możesz zbadać. Możesz na przykład mieć nasycone łącze sieciowe z powodu burzy rozgłoszeniowej lub nieprawidłowo działające urządzenie powodujące dziwne zjawiska w sieci. Z pewnością ucieszy Cię wiadomość, że możesz dostosować timeout. Po pierwsze, z poziomu klienta TFTP, możemy ustawić timeout na podstawie pakietów w następujący sposób:
tftp> rexmt 10
To pokazuje nam ustawienie timeoutu retransmisji na podstawie pakietów na 10 sekund.
Aby ustawić całkowity timeout transferu, dla całej transakcji, dostosuj następujące ustawienie, jak poniżej:
tftp> timeout 30
Innym użytecznym narzędziem do debugowania jest funkcja „trace”. Można ją włączyć w następujący sposób:
tftp> tracePacket tracing on.
Teraz, każdy transfer będzie wyglądał bardzo głośno, jak poniżej, co powinno pomóc w rozwiązywaniu problemów:
tftp> get HERE_I_AMsent RRQ <file=HERE_I_AM, mode=netascii>received DATA <block=1, 512 bytes> sent ACK <block=1> received DATA <block=2, 512 bytes>sent ACK <block=2> received DATA <block=3, 512 bytes>
Z powyższych informacji, powinieneś być w stanie powiedzieć, w którym momencie transfer nie powiedzie się i być może dostrzec wzór zachowania.
Nawiasem mówiąc, jeśli chcesz wyjść ze znaku zachęty klienta TFTP, to naciśnięcie klawisza „q” powinno wystarczyć.
W tym rozdziale, widzieliśmy jak skonfigurować i odbierać pliki z serwera TFTP. Jak wspomniano, dobrze jest zapchać port 69 przed światem zewnętrznym, jeśli eksperymentujesz z tym oprogramowaniem, a zwłaszcza jeśli wdrażasz je w produkcji.
Zalecam, abyś albo zablokował swój serwer tak, aby dostęp do niego miało tylko kilka maszyn, używając IPtables lub TCP Wrappers. Mimo że jest to starsza technologia, TFTP jest bez wątpienia nadal użytecznym narzędziem w twoim zestawie narzędzi i nie powinno być odrzucane jako przydatne tylko do przekazywania konfiguracji stacjom roboczym lub serwerom podczas uruchamiania.
Systemd
Nawiasem mówiąc, aby uruchomić i zatrzymać serwer TFTP (lub zrestartować go po dokonaniu zmiany konfiguracji) w nowoczesnych systemach systemd, możesz uruchomić to polecenie, zastępując „stop” przez „restart” lub „start” tam, gdzie jest to potrzebne.
# systemctl stop openbsd-inetd
W starszych systemach nie ma potrzeby przypominać, że w większości przypadków wystarczy jedno z tych poleceń.
# /etc/init.d/openbsd-inetd start# service openbsd-inetd restart
Po prostu zmień openbsd-inetd na nazwę odpowiedniego skryptu inetd lub xinetd dla twojej dystrybucji. Pamiętaj, że możesz dowiedzieć się nazw usług, uruchamiając polecenie takie jak to:
# ls /etc/init.d
To działa nawet na nowoczesnych wersjach systemd, ale musisz uważnie przyjrzeć się liście plików wynikowych, ponieważ spójrzmy prawdzie w oczy, że przewody do „inetd” mogą być uważane za wsteczne w niektórych kręgach i mają dziwne nazwy plików.
EOF
Jeśli zdecydujesz się wziąć swoje życie we własne ręce i obsługiwać TFTP przez Internet, pozwól mi zaoferować jedno słowo ostrzeżenia, cóż, jeden akronim właściwie: NAT. Jeśli Network Address Translation jest zaangażowany w zdalne połączenia, to możesz mieć problemy z transferami TFTP, ponieważ używają one UDP. Potrzebujesz routera NAT, aby działać jako nieco bardziej zaawansowane proxy, aby to zadziałało. Możesz spojrzeć na renomowane oprogramowanie zabezpieczające, pfSense, które może najwyraźniej pomóc.
Spojrzeliśmy na kilka cech TFTP. Oczywiście, istnieją szczególne okoliczności, w których doskonały TFTP jest użytecznym narzędziem, które może być używane szybko i skutecznie z niewielką konfiguracją.
Innym razem, przyznajmy, TFTP nie będzie całkiem przeciąć musztardę. W takich przypadkach, sFTP i standardowy FTP mogą być bardziej odpowiednie. Zanim jednak zaczniesz szukać tych pakietów, sprawdź czy funkcje, których potrzebujesz są obecne w zestawie narzędzi TFTP. Możesz być mile zaskoczony tym, co znajdziesz. W końcu wiele z narzędzi, których używamy dzisiaj, pochodzi z czasów, z których pochodzi TFTP.
Chris Binnie jest konsultantem technicznym z 20-letnim doświadczeniem w Linuksie i pisarzem dla Linux Magazine i Admin Magazine. Jego nowa książka Linux Server Security: Hack and Defend nauczy cię jak przeprowadzać wyrafinowane ataki, uczynić twoje serwery niewidzialnymi i łamać skomplikowane hasła.
Rozwiń swoją karierę w Administracji Systemami Linux! Sprawdź kurs Essentials of System Administration od The Linux Foundation.
Przeczytaj poprzednie artykuły:
Trywialne transfery za pomocą TFTP, Część 1: Dlaczego warto go używać?
Trywialne transfery za pomocą TFTP, Część 2: Konfiguracja