Segmentation Fault

nawet w 2018 roku, kiedy nowoczesne, bogate w funkcje aplikacje do komunikatorów, takie jak Gitter lub niezwykle popularny Slack, są tak wszechobecne jak zawsze, IRC pozostaje preferowaną metodą komunikacji dla wielu programistów. Jest prosty, stabilny, wszechobecny, a co najważniejsze, w pełni zdecentralizowany. Jest to jednak Stary protokół, o którym IRC mówi Od początku lat dziewięćdziesiątych (protokół IRC RFC został opublikowany w 1993 roku). W związku z tym IRC ma swoje ograniczenia.

jednym z najbardziej zauważalnych dla mnie jest brak archiwizacji wiadomości. Wszystkie wiadomości wysyłane i odbierane przez klienta IRC nie są przechowywane na twoim komputerze, ani nie otrzymujesz powtórki z poprzednich rozmów na kanale, który właśnie dołączyłeś. Za każdym razem, gdy logujesz się na czacie IRC, otrzymujesz czyste konto. Jest to niewygodne, ponieważ IRC jest bardzo często używany jako kanał komunikacji poza pasmem. Dołączasz do kanału, zostawiasz pytanie, a następnie czekasz kilka godzin, aż ktoś odpowie, ponieważ ludzie nie mają tendencji do monitorowania IRC tak często,jak w przypadku innych komunikatorów.

na szczęście i być może nie jest to zaskakujące, problem ten został rozwiązany już od dłuższego czasu. Najszybszą i najprostszą metodą jest nawiązanie stałego połączenia z serwerem IRC z serwera pod naszą kontrolą, który jest włączony 24/7 i ustanowienie sesji SSH / tmux z nim za każdym razem, gdy chcemy sprawdzić ponownie na IRC. Kiedy skończymy, po prostu Odłącz sesję od C-a d na ekranie GNU lub C-b d na tmux. Rozwiązuje to problem braku wszystkich wiadomości wysyłanych na kanale, gdy nas nie było, ale to wszystko, co dostajesz. Jeśli szukasz rozwiązania, które oferuje znacznie więcej niż to, nadszedł czas, aby spojrzeć na bramkarzy.

co to jest serwer bouncer?

serwer bouncer to serwer, którego używamy jako proxy, aby uzyskać dostęp do IRC. Bramkarz weźmie nasze dane IRC i nawiąże połączenie z serwerem IRC w naszym imieniu, a nawet dołączy do listy wstępnie zdefiniowanych kanałów.

następnie łączymy się z tym serwerem bouncer z naszego klienta IRC zamiast bezpośrednio z serwerem IRC i od tego momentu nasze wiadomości będą „odbijane” przez bouncer do serwera docelowego.

bramkarze oferują szereg korzyści, w tym:

  • stałe sesje serwera i kanałów
  • rejestrowanie rozmów kanałów do pliku tekstowego w celu archiwizacji
  • uwierzytelnianie użytkownika Bouncer
  • automatyczne uwierzytelnianie serwera IRC za pośrednictwem NickServ lub SASL
  • Automatyzowanie statusów użytkowników IRC (pozostawianie & wiadomości wyjazdowych itp.
  • i wiele więcej!

Konfigurowanie serwera bouncer na AWS

zamierzamy skonfigurować własny serwer Bouncer przy użyciu ZNC, najpopularniejszej aplikacji serwera bouncer, na niedrogiej instancji AWS EC2.

uruchom nową instancję Ubuntu Server 16.04 t2.nano EC2 ze wszystkimi ustawieniami domyślnymi, z wyjątkiem następujących:

  • dane użytkownika: zainstaluj oprogramowanie bouncer (ZNC), Utwórz użytkownika dla procesu i katalog, w którym będzie przechowywał swoje pliki i plik jednostki systemd, aby uruchomić go podczas uruchamiania.
#!/bin/bashapt-get update && apt-get dist-upgrade -y && \apt-get install -y znc znc-dev znc-perl znc-python znc-tcl && \useradd -M -s /bin/false znc && usermod -L znc && \mkdir /opt/znc && \cat > /etc/systemd/system/znc.service <<- EOFDescription=ZNC IRC BouncerExecStart=/usr/bin/znc -d /opt/zncExecReload=/bin/kill -HUP $MAINPIDKillMode=processRestart=alwaysType=forkingUser=zncWantedBy=multi-user.targetAlias=znc.serviceEOF

ponieważ plik jednostki systemd został umieszczony bezpośrednio w /etc/systemd/system, zostanie on automatycznie uruchomiony podczas uruchamiania. Nie ma potrzeby tego włączać.

  • podsieć: upewnij się, że instancja zostanie uruchomiona w publicznej podsieci z dołączoną bramką internetową, aby była łatwo dostępna z Internetu.
  • wolumin EBS: Twoje hasło ZNC (Bouncer), hasło serwera IRC i logi rozmów IRC będą przechowywane w plikach tekstowych, więc zdecydowanie polecam zaszyfrować wolumin.
  • Utwórz nową grupę zabezpieczeń, aby dołączyć do niej, aby następujące porty były otwarte:
    • SSH: możemy więc skonfigurować instancję
    • TCP port 7078 (właściwie zrobi to każdy bez rezerwy): Port nasłuchowy ZNC
  • ustaw jego znacznik „Name”na coś sensownego, jeśli chcesz

teraz wygeneruj nowy elastyczny adres IP i powiąż go z instancją.

instalacja ZNC

SSH w nowo utworzonej instancji EC2 i uruchomienie procesu konfiguracji ZNC po raz pierwszy, który poprosi nas o ustawienie portu nasłuchującego dla bouncer i utworzenie konta administratora. Wybierz opcje jak poniżej.

$ znc --makeconf Checking for list of available modules... -- Global settings -- Listen on port (1025 to 65534): 7078 Listen using SSL (yes/no) : yes Verifying the listener... Unable to locate pem file: , creating it Writing Pem file ... Enabled global modules -- Admin user settings -- Username (alphanumeric): admin Enter password: Confirm password: Nick : Alternate nick : Ident : Real name (optional): Bind host (optional): Enabled user modules Set up a network? (yes/no) : no Writing config ... To connect to this ZNC you need to connect to it as your IRC server using the port that you supplied. You have to supply your login info as the IRC server password like this: user/network:pass. Try something like this in your IRC client... /server <znc_server_ip> +7078 admin:<pass> To manage settings, users and networks, point your web browser to https://<znc_server_ip>:7078/ Launch ZNC now? (yes/no) : no

spowoduje to wygenerowanie pliku konfiguracyjnego, który będzie przechowywany w katalogu domowym dla użytkownika, w którym ssh ’ D ’ D (ubuntu jeśli używasz domyślnego serwera Ubuntu AMI dostarczonego przez Amazon). Przenieśmy nowo utworzone pliki konfiguracyjne z tego katalogu do /opt/znc i nadajmy znc prawa do niego.

$ sudo mv ~/.znc/* /opt/znc$ rmdir ~/.znc$ sudo chown -R znc:znc /opt/znc

teraz możesz uruchomić ZNC

$ sudo systemctl start znc

upewnij się, że ZNC został pomyślnie uruchomiony

$ systemctl status znc● znc.service - ZNC IRC Bouncer Loaded: loaded (/etc/systemd/system/znc.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2018-07-29 13:02:07 UTC; 21min ago Process: 1181 ExecStart=/usr/bin/znc -d /opt/znc (code=exited, status=0/SUCCESS) Main PID: 1245 (znc) Tasks: 1 Memory: 10.8M CPU: 54ms CGroup: /system.slice/znc.service └─1245 /usr/bin/znc -d /opt/znc

Konfiguracja ZNC

pierwszy etap konfiguracji został zakończony. Teraz musimy dodać użytkownika, jako którego będziemy się logować oraz sieć IRC, aby powiązać go z tym użytkownikiem.

aby zastosować pozostałe ustawienia do bouncer, połączymy się z jego interfejsem konfiguracji web, dostępnym na porcie, na którym skonfigurowaliśmy go do nasłuchiwania (w moim przypadku, port 7078). W przeglądarce wpisz następujący URL: https://<bouncer_ip_address>:7078. Jeśli pojawi się błąd „Brak certyfikatu HTTPS” lub podobny, możesz go zignorować i polecić przeglądarce kontynuowanie. Teraz Zaloguj się jako użytkownik admin, który wcześniej utworzyłeś, używając wprowadzonego hasła.

ZNC web frontend

po zalogowaniu możesz kliknąć pozycję menu „Ustawienia globalne” po prawej stronie, aby zobaczyć ogólną konfigurację bramkarza.

ZNC instaluje kolekcję modułów (obiektów współdzielonych) w /usr/lib/znc, które można załadować lub rozładować podczas działania demona. Jeśli przewiniesz w dół, zobaczysz listę modułów globalnych wpływających na działanie bouncer, które możesz włączyć/wyłączyć, przełączając pola wyboru w kolumnie „Nazwa”. W moim przypadku mam włączoną opcję „log”, ponieważ chcę, aby mój bramkarz przechowywał w pliku tekstowym wszystkie wiadomości wysyłane w kanałach, których jestem członkiem.

ZNC Global Modules

Kliknij „Zarządzaj użytkownikami” w prawym menu, aby wyświetlić panel konfiguracji użytkownika. Teraz kliknij „Dodaj”, aby dodać nowego użytkownika i wypełnij Szczegóły: Nazwa użytkownika, hasło (pamiętaj, że to hasło będzie używane tylko do uwierzytelniania się za pomocą ZNC, nie będzie używane z serwerem IRC), szczegóły IRC i listę modułów, które możesz chcieć załadować specjalnie dla tego użytkownika.

szczegóły użytkownika ZNC

następnie kliknij „Zapisz i kontynuuj” na dole, abyśmy mogli dodać sieć IRC dla tego użytkownika.

dodawanie sieci do użytkownika

wypełnij szczegóły dotyczące sieci IRC, z którą ten użytkownik będzie powiązany, i opcjonalnie włącz dowolne moduły, które chcesz załadować automatycznie podczas łączenia się z tą siecią. Jednym z takich MODUĹ 'Ăłw moĹźe byÄ ‡ sasl jeĹ” li chcesz uwierzytelniaä ‡ za pomocÄ … tej metody z serwerem IRC. Włączę ten moduł w tej sieci.

w polu tekstowym” Serwery tej sieci IRC ” wprowadź informacje o serwerze IRC, z którym chcesz się połączyć, w formacie

<server> <port> <irc_password>

Dołącz do portu znak plus oznaczający połączenie SSL. <irc_password> to hasło użyte do rejestracji na serwerze IRC za pomocą polecenia /NickServ, które jest całkowicie oddzielone od hasła ustawionego na uwierzytelnianie do samego bouncer powyżej.

na przykład, aby połączyć się z siecią IRC Freenode za pośrednictwem SSL z wcześniej zarejestrowanym kontem, zawartość tego pola tekstowego byłaby

irc.freenode.net +6697 myNickServPassword123

w przeciwnym razie może to być po prostu

irc.freenode.net 6667

konfigurując sieć IRC

zauważysz, że Twoje hasło IRC jest przechowywane w postaci zwykłego tekstu na serwerze. Dlatego zalecałem podczas kroków konfiguracji VPS szyfrowanie woluminu EBS i oczywiście bardzo ścisłą kontrolę nad tym, kto może uzyskać dostęp do twojego serwera bouncer. Zalecane jest zablokowanie grupy zabezpieczeń VPS, aby umożliwić połączenia przychodzące tylko z bardzo małego podzbioru adresów IP.

kliknij ponownie „Zapisz i kontynuuj”. Możesz teraz opcjonalnie dodać listę kanałów, do których chcesz, aby bramkarz Cię zalogował, ale będzie również pamiętać te, które dołączysz do siebie po połączeniu się z nim.

mamy teraz AWS VPS (Virtual Private Server) hostujący w pełni funkcjonalną instalację ZNC. Ostatnią rzeczą do zrobienia jest skierowanie naszego klienta IRC na bramkarza.

łączenie się z bouncerem

zamierzam używać irssi, aby połączyć się z bouncerem. Oto kroki, które wykonałem, aby to działało. Twój przebieg może się różnić na innym kliencie, takim jak HexChat lub mIRC, ale same szczegóły powinny pozostać w większości takie same.

Uruchom irssi określając nick, który ma być użyty do połączenia z bouncerem

$ irssi -n <username>

Utwórz nową sieć o nazwie freenodebnc i dodaj do niej szczegóły bouncer. Ponieważ łączę się z serwerem IRC Freenode przez SSL, używam portu, który udostępnia dla bezpiecznych połączeń, 6697 i przekazuję flagę -ssl. username/freenode to kombinacja nazwy użytkownika i sieci, którą stworzyliśmy w panelu konfiguracyjnym użytkownika ZNC. password to hasło, którego używamy do uwierzytelniania za pomocą ZNC, a nie do serwera IRC.

/network add freenodebnc/server add -net freenodebnc -auto -ssl <bouncer_ip> 6697 username/freenode:password

uruchom następujące polecenia, aby zapisać te zmiany w pliku konfiguracyjnym irssi i połączyć się z bouncerem.

/save/connect freenodebnc

jeśli załadowałeś moduł SASL (możesz sprawdzić, czy jest załadowany, uruchamiając /msg *status ListModules), musisz go skonfigurować w tym momencie. Tak więc, po połączeniu się z bouncerem, uruchom następujące polecenia na swoim kliencie IRC.

/query *saslmechanism external plainset <NickServName> <password>

gdzie NickServName to twoja zarejestrowana nazwa użytkownika na serwerze IRC, a password hasło, którego używasz do uwierzytelnienia na wyżej wymienionym serwerze.

teraz połącz się ponownie z siecią IRC za pomocą ponownie skonfigurowanego modułu SASL.

/msg *status jump

może to potrwać kilka chwil, zanim bouncer nawiąże połączenie (zwłaszcza jeśli łączysz się przez SSL i używasz mechanizmów uwierzytelniania, takich jak SASL), ale po tym, uzyskasz stałą, bezpieczną sesję z serwerem IRC, którą możesz wstrzymać i wznowić, kiedy tylko chcesz. Miłej rozmowy!