Тонкий клиент HP в качестве домашнего роутера и файл-сервера

от автора

С момента публикации на Geektimes первой части статьи, кое-что изменилось. Я обновил тонкий клиент на HP t610 Plus и перешел на CentOS 7. Поэтому, публикую эту статью не как продолжение предыдущей, а как новую.


Задачи, у домашнего сервера, следующие:

  • раздавать интернет по Ethernet и WiFi
  • резать рекламные баннеры по спискам AdBlock
  • просматривать ресурсы в сети Tor
  • выполнять функцию файл сервера (NFS и SAMBA)
  • поднимать туннель до моей работы
  • скачивать файлы по разным протоколам

Расскажу немного про железо. Тонкий клиент построен на процессоре AMD Dual-Core T56N 1.65 ГГц и видео-чипе Radeon HD 6320. Так же, большими плюсами данной модели являются: наличие полноценного разъема PCI Express 16x и отсека для установки жесткого диска (теперь не придется изобретать велосипед).

Полная конфигурация сервера такова:

  • Процессор AMD Dual-Core T56N 1.65 ГГц
  • Чипсет AMD A55E
  • Видеокарта Radeon HD 6320
  • Память 2 x 2Gb SO-DIMM 1600Mhz PC3-12800 Elpida DDR3EBJ20UF8BDU0-GN-F
  • Первый Ethernet адаптер Broadcom BCM57781 Gigabit Ethernet
  • Второй Ethernet адаптер Intel 82574L Gigabit Ethernet
  • Беспроводной WiFi адаптер Intel Advanced-N 6230
  • Жесткий диск Seagate ST500LT012-9WS142

Предвидя комментарии типа «Да он же дорогой!», приведу список всех компонентов, которые приобретались и укажу их стоимость. Всё приобреталось, на всем известном, сайте бесплатных объявлений.

  • Тонкий клиент HP t610 Plus — 3500 руб.
  • Память 2 x 2Gb SO-DIMM 1600Mhz — 1500 руб.
  • WiFi адаптер Intel Advanced-N 6230 — 300 руб.
  • Ethernet адаптер Intel 82574L — 400 руб.

ИТОГО: 5700 руб.

Ниже приведу немного фотографий.

Фото

Описывать установку операционной системы я не буду, в интернете есть очень много подробных руководств, поэтому, приступим сразу к настройке.

Настройка сети

Отключаем NetworkManager, чтобы он не перезаписывал настройки.

systemctl stop NetworkManager systemctl mask NetworkManager systemctl stop NetworkManager-wait-online.service systemctl mask NetworkManager-wait-online.service 

Проверяем какие интерфейсы определились в системе и доступны для настроики.

ip a 

У меня доступны 4 интерфейса: enp5s0, wlp2s0, enp1s0, и wwp6s0u1i1. Интерфейсы enp5s0 и wlp2s0 будут объединены в br0 и смотрят в локальную сеть. Интерфейсы enp1s0 и wwp6s0u1i1 смотрит наружу.

Создаем и настраиваем наш бридж интерфейс.

vi /etc/sysconfig/network-scripts/ifcfg-br0 

DEVICE="br0" NAME="br0" TYPE="Bridge" ONBOOT="yes" BOOTPROTO="static" BROADCAST=192.168.2.255 IPADDR=192.168.2.1 NETMASK=255.255.255.0 NETWORK=192.168.2.0 NM_CONTROLLED="no" IPV6INIT="no" NOZEROCONF="yes" ZONE="internal" 

Настраиваем Ethernet интерфейс, который смотрит в локальную сеть и добавляем его в наш бридж.

vi /etc/sysconfig/network-scripts/ifcfg-enp5s0 

DEVICE="enp5s0" NAME="enp5s0" TYPE="Ethernet" ONBOOT="yes" BOOTPROTO="none" HWADDR="XX:XX:XX:XX:XX:XX" NM_CONTROLLED="no" DEFROUTE="yes" PEERDNS="yes" PEERROUTES="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="no" BRIDGE="br0" 

Настраиваем WiFi интерфейс.

vi /etc/sysconfig/network-scripts/ifcfg-wlp2s0 

DEVICE="wlp2s0" NAME="wlp2s0" TYPE="Ethernet" ONBOOT="yes" BOOTPROTO="none" HWADDR="XX:XX:XX:XX:XX:XX" NM_CONTROLLED="no" DEFROUTE="yes" PEERDNS="yes" PEERROUTES="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="no" BRIDGE="br0" 

Настраиваем интерфейс который смотрит в Internet.

vi /etc/sysconfig/network-scripts/ifcfg-enp1s0 

DEVICE="enp1s0" TYPE="Ethernet" HWADDR="XX:XX:XX:XX:XX:XX" NM_CONTROLLED="no" BOOTPROTO="dhcp" DNS1=127.0.0.1 DNS2=127.0.0.1 DNS3=127.0.0.1 ONBOOT="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="no" NOZEROCONF="yes" ZONE="external" 

Устанавливаем bridge-utils для поддержки bridge.

yum install bridge-utils 

Перезапускаем сервис управление сетью.

systemctl restart network.service 

4G Internet

Сейчас у меня нет возможности пользоваться проводным интернетом, поэтому для доступа использую 4G модем Huawei прошитый в STICK.
Для его работы необходимо установить следующие пакеты.

yum install usb_modeswitch usb_modeswitch-data 

Настраиваем интерфейс 4G.

vim /etc/sysconfig/network-scripts/ifcfg-wwp6s0u1i1 

DEVICE="wwp6s0u1i1" NAME="wwp6s0u1i1" TYPE="Ethernet" ONBOOT="yes" BOOTPROTO="dhcp" HWADDR="XX:XX:XX:XX:XX:XX" NM_CONTROLLED="no" DNS1=127.0.0.1 DNS2=127.0.0.1 DNS3=127.0.0.1 NOZEROCONF="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="no" ZONE="external" 

Создаем скрипты для активации и де активации интернета при включении или отключении интерфейса.

vim /sbin/ifup-pre-local 

#!/bin/bash # PREUP="/etc/sysconfig/network-scripts/pre-up-${1:6}" if [ -x $PREUP ]; then exec $PREUP fi 

vim /sbin/ifdown-pre-local 

#!/bin/bash # PREDOWN="/etc/sysconfig/network-scripts/pre-down-$1" if [ -x $PREDOWN ]; then exec $PREDOWN fi 

vim /etc/sysconfig/network-scripts/pre-up-wwp6s0u1i1 

#!/bin/bash # echo -en 'AT^NDISDUP=1,1,"internet.yota"\r\n' > /dev/ttyUSB0 

vim /etc/sysconfig/network-scripts/pre-down-wwp6s0u1i1 

#!/bin/bash # echo -en 'AT^NDISDUP=1,0,"internet.yota"\r\n' > /dev/ttyUSB0 

Поднимаем интерфейс и проверяем.

ifup wwp6s0u1i1 ip a 

DNSMasq

Настраиваем DHCP и DNS сервер.

vi /etc/dnsmasq.conf 

log-queries log-dhcp log-facility=/var/log/dnsmasq.log conf-dir=/etc/dnsmasq.d 

Настраиваем DHCP.

vi /etc/dnsmasq.d/dhcp.conf 

dhcp-authoritative dhcp-option=1,255.255.255.0 dhcp-option=2,192.168.2.1 dhcp-option=28,192.168.2.255 dhcp-option=42,192.168.2.1 dhcp-range=192.168.2.11,192.168.2.254,24h  dhcp-host=2c:35:f8:41:6e:68,192.168.2.2,PC 

Настраиваем DNS.

vi /etc/dnsmasq.d/dns.conf 

listen-address=127.0.0.1,192.168.2.1 interface=br0 except-interface=enp1s0,wwp6s0u1i1, tun0 domain-needed     bogus-priv  strict-order  no-resolv proxy-dnssec server=127.0.0.1#5353           # Для использования DNSCrypt #server=77.88.8.88 server=/onion/127.0.0.1#5300    # Для использования tor address=/router/192.168.2.1 #no-hosts addn-hosts=/etc/dnsmasq.hosts 

Заблокируем сайты телеметрии microsoft и рекламу в некторых приложениях.

vi /etc/dnsmasq.hosts 

dnsmasq.hosts

############### microsoft spy ###############
127.0.0.1 vortex.data.microsoft.com
127.0.0.1 vortex-win.data.microsoft.com
127.0.0.1 telecommand.telemetry.microsoft.com
127.0.0.1 telecommand.telemetry.microsoft.com.nsatc.net
127.0.0.1 oca.telemetry.microsoft.com
127.0.0.1 oca.telemetry.microsoft.com.nsatc.net
127.0.0.1 sqm.telemetry.microsoft.com
127.0.0.1 sqm.telemetry.microsoft.com.nsatc.net
127.0.0.1 watson.telemetry.microsoft.com
127.0.0.1 watson.telemetry.microsoft.com.nsatc.net
127.0.0.1 redir.metaservices.microsoft.com
127.0.0.1 choice.microsoft.com
127.0.0.1 choice.microsoft.com.nsatc.net
127.0.0.1 df.telemetry.microsoft.com
127.0.0.1 reports.wes.df.telemetry.microsoft.com
127.0.0.1 wes.df.telemetry.microsoft.com
127.0.0.1 services.wes.df.telemetry.microsoft.com
127.0.0.1 sqm.df.telemetry.microsoft.com
127.0.0.1 telemetry.microsoft.com
127.0.0.1 watson.ppe.telemetry.microsoft.com
127.0.0.1 telemetry.appex.bing.net
127.0.0.1 telemetry.urs.microsoft.com
127.0.0.1 telemetry.appex.bing.net:443
127.0.0.1 settings-sandbox.data.microsoft.com
127.0.0.1 vortex-sandbox.data.microsoft.com
127.0.0.1 survey.watson.microsoft.com
127.0.0.1 watson.live.com
127.0.0.1 watson.microsoft.com
127.0.0.1 statsfe2.ws.microsoft.com
127.0.0.1 corpext.msitadfs.glbdns2.microsoft.com
127.0.0.1 compatexchange.cloudapp.net
127.0.0.1 cs1.wpc.v0cdn.net
127.0.0.1 a-0001.a-msedge.net
127.0.0.1 statsfe2.update.microsoft.com.akadns.net
127.0.0.1 sls.update.microsoft.com.akadns.net
127.0.0.1 fe2.update.microsoft.com.akadns.net
127.0.0.1 65.55.108.23
127.0.0.1 65.39.117.230
127.0.0.1 23.218.212.69
127.0.0.1 134.170.30.202
127.0.0.1 137.116.81.24
127.0.0.1 diagnostics.support.microsoft.com
127.0.0.1 corp.sts.microsoft.com
127.0.0.1 statsfe1.ws.microsoft.com
127.0.0.1 pre.footprintpredict.com
127.0.0.1 204.79.197.200
127.0.0.1 23.218.212.69
127.0.0.1 i1.services.social.microsoft.com
127.0.0.1 i1.services.social.microsoft.com.nsatc.net
127.0.0.1 feedback.windows.com
127.0.0.1 feedback.microsoft-hohm.com
127.0.0.1 feedback.search.microsoft.com
############### skype & yuotube ###############
127.0.0.1 pubads.g.doubleclick.net
127.0.0.1 static.doubleclick.net
127.0.0.1 devads.skypeassets.net
127.0.0.1 devapps.skype.net
127.0.0.1 qawww.skypeassets.net
127.0.0.1 qaapi.skype.net
127.0.0.1 preads.skypeassets.net
127.0.0.1 preapps.skype.net
127.0.0.1 static.skypeassets.com
127.0.0.1 serving.plexop.net
127.0.0.1 preg.bforex.com
127.0.0.1 ads1.msads.net
127.0.0.1 flex.msn.com
127.0.0.1 apps.skype.com
127.0.0.1 api.skype.com
127.0.0.1 cdn.mbstatic.org
127.0.0.1 marathonbet.com
127.0.0.1 megogo.net
127.0.0.1 adselector.ru
127.0.0.1 pluso.ru
127.0.0.1 flash.begun.ru
127.0.0.1 ad.adriver.ru

vim /etc/resolv.conf 

nameserver 127.0.0.1 

Активируем и перезапускаем сервис dnsmasq.

systemctl enable dnsmasq.service systemctl start dnsmasq.service 

DNSCrypt

Я использую DNSCrypt, в купе с Tor, помогоает упростить жизнь.

yum localinstall https://dl.dropboxusercontent.com/u/2709550/HP%20t610%20PLUS/dnscrypt-proxy-1.6.0-1.el7.centos.x86_64.rpm 

В конфигурационном файле меняем номер порта на тот, который был указан в конфигурации dnsmasq.

vim /etc/sysconfig/dnscrypt-proxy 

DNSCRYPT_LOCALPORT=5353 

Активируем и перезапускаем сервис dnscrypt

systemctl enable dnscrypt-proxy.service systemctl start dnscrypt-proxy.service 

EPEL

Подключаем дополнительный репозиторий EPEL.

yum localinstall http://mirror.yandex.ru/epel/7/x86_64/e/epel-release-7-5.noarch.rpm yum update 

Устанавливаем дополнительные пакеты.

yum install bash-completion vim mc iftop wget smartmontools hdparm tmux 

Создаем нового пользователя.

useradd -G wheel user passwd user 

Включаем форвардинг в ядре.

echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/forwarding.conf  sysctl --system 

Изменяем польтику selinux.

vim /etc/selinux/config  SELINUX=permissive 

Раскрашиваем консоль.

vim /root/.bashrc 

# .bashrc  # User specific aliases and functions  alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' alias tmuxx='tmux attach || tmux new'  # Source global definitions if [ -f /etc/bashrc ]; then         . /etc/bashrc fi  NORMAL="\[\e[0m\]" RED="\[\e[1;31m\]" GREEN="\[\e[1;32m\]" BLUE="\[\e[1;34m\]"  export PS1="[$GREEN\u$RED@$BLUE\H]$NORMAL\w# " 

Настраиваем tmux.

vim ~/.tmux.conf 

setw -g c0-change-trigger 10 setw -g c0-change-interval 250 set -g set-titles on  set -g set-titles-string "tmux.#I.#W"  set -g base-index 1 set -g history-limit 5000 set -g bell-action any setw -g monitor-activity on set -g visual-activity on bind-key k confirm kill-window bind-key K confirm kill-server set -g terminal-overrides 'xterm*:smcup@:rmcup@' set -g display-time 2000 

Устраняем долгий логин по SSH.

vim /etc/ssh/sshd_config 

GSSAPIAuthentication no UseDNS no 

Активируем rc.local и отключаем спящий режим у жесткого диска (продлит его срок службы).

chmod a+x /etc/rc.local  vim /etc/rc.d/rc.local  hdparm -B 255 /dev/sda hdparm -S 0 /dev/sda 

Создаем дополнительные каталоги.

mkdir /home/store mkdir /home/www 

NTP

Настраиваем синхронизвцию времяни по NTP.

yum install ntp 

vim /etc/sysconfig/ntpd SYNC_HWCLOCK=yes 

driftfile /var/lib/ntp/drift logfile /var/log/ntp.log  restrict 127.0.0.1 restrict ::1  restrict 192.168.2.0 mask 255.255.255.0 nomodify notrap  server ntp1.stratum2.ru iburst server ntp2.stratum2.ru iburst server ntp3.stratum2.ru iburst server ntp4.stratum2.ru iburst server ntp5.stratum2.ru iburst 

systemctl enable ntpd.service 

systemctl start ntpd.service 

Синхронизируем время.

systemctl stop ntpd.service && ntpdate ntp1.stratum2.ru && systemctl start ntpd.service 

Hostapd

Устанавливаем Hostapd, для организации WiFI. Этот пакет собран с noscan.patch.

yum localinstall https://dl.dropboxusercontent.com/u/2709550/HP%20t610%20PLUS/Hostapd/hostapd-2.4-3.el7.centos.x86_64.rpm 

Здесь указываем: интерфейсы, SSID и пароль.

vim /etc/hostapd/hostapd.conf 

hostapd.conf

interface=wlp2s0 bridge=br0 driver=nl80211  logger_syslog=-1 logger_syslog_level=2 logger_stdout=-1 logger_stdout_level=2  ctrl_interface=/var/run/hostapd ctrl_interface_group=wheel  ##### IEEE 802.11 related configuration #######################################  ssid=Home country_code=RU hw_mode=g channel=5 macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0 wmm_enabled=1  ##### IEEE 802.11n related configuration ######################################  ieee80211n=1 ht_capab=[HT40-][HT40+][SHORT-GI-40][DSSS_CCK-40] noscan=1  ##### WPA/IEEE 802.11i configuration ##########################################  wpa=2 wpa_passphrase=qwerty1234 wpa_key_mgmt=WPA-PSK #wpa_pairwise=CCMP rsn_pairwise=CCMP #wpa_group_rekey=600 

Активируеи и запускаем сервис.

systemctl enable hostapd.service systemctl start hostapd.service 

Transmission

Устанавливаем торрент-клиент transmission.

yum install transmission-daemon transmission-cli 

systemctl enable transmission-daemon.service systemctl start transmission-daemon.service systemctl stop transmission-daemon.service 

Настраиваем доступ к Web-интерфейсу и каталогам для загрузки файлов. Все изменения необходимо производить при остановленом сервисе, иначе настроики не сохранятся.

vim /var/lib/transmission/.config/transmission-daemon/settings.json 

settings.json

{     "alt-speed-down": 50,     "alt-speed-enabled": false,     "alt-speed-time-begin": 540,     "alt-speed-time-day": 127,     "alt-speed-time-enabled": false,     "alt-speed-time-end": 1020,     "alt-speed-up": 50,     "bind-address-ipv4": "0.0.0.0",     "bind-address-ipv6": "::",     "blocklist-enabled": false,     "blocklist-url": "http://www.example.com/blocklist",     "cache-size-mb": 4,     "dht-enabled": true,     "download-dir": "/home/store/Ваша папка",     "download-queue-enabled": true,     "download-queue-size": 5,     "encryption": 1,     "idle-seeding-limit": 30,     "idle-seeding-limit-enabled": false,     "incomplete-dir": "/home/store/Torrent",     "incomplete-dir-enabled": false,     "lpd-enabled": false,     "message-level": 2,     "peer-congestion-algorithm": "",     "peer-id-ttl-hours": 6,     "peer-limit-global": 200,     "peer-limit-per-torrent": 50,     "peer-port": 51413,     "peer-port-random-high": 65535,     "peer-port-random-low": 49152,     "peer-port-random-on-start": false,     "peer-socket-tos": "default",     "pex-enabled": true,     "port-forwarding-enabled": true,     "preallocation": 1,     "prefetch-enabled": 1,     "queue-stalled-enabled": true,     "queue-stalled-minutes": 30,     "ratio-limit": 2,     "ratio-limit-enabled": false,     "rename-partial-files": true,     "rpc-authentication-required": false,     "rpc-bind-address": "0.0.0.0",     "rpc-enabled": true,     "rpc-password": "Сюда вписать пароль",     "rpc-port": 9091,     "rpc-url": "/transmission/",     "rpc-username": "Сюда логин",     "rpc-whitelist": "127.0.0.1",     "rpc-whitelist-enabled": false,     "scrape-paused-torrents-enabled": true,     "script-torrent-done-enabled": false,     "script-torrent-done-filename": "",     "seed-queue-enabled": false,     "seed-queue-size": 10,     "speed-limit-down": 100,     "speed-limit-down-enabled": false,     "speed-limit-up": 100,     "speed-limit-up-enabled": false,     "start-added-torrents": true,     "trash-original-torrent-files": false,     "umask": 0,     "upload-slots-per-torrent": 14,     "utp-enabled": true } 

systemctl start transmission-daemon.service 

Aria2

Устанавливаем мультипротокольный менеджер загрузок.

yum install aria2.x86_64 

mkdir /etc/aria2 touch /etc/aria2/aria2.conf touch /etc/aria2/session.lock touch /var/log/aria2.log && chown nobody:nobody /var/log/aria2.log chown nobody:nobody /etc/aria2 -R 

Создаем сервис для systemd.

vim /lib/systemd/system/aria2.service 

[Unit] Description=Aria2 User Service by %u After=network.target  [Service] Type=forking User=nobody Group=nobody ExecStart=/usr/bin/aria2c --conf-path=/etc/aria2/aria2.conf --log=/var/log/aria2.log  [Install] WantedBy=multi-user.target 

Ркедактируем файл настроек, задаем дериктории для загрузок и ключ RPC, для удаленного управления.

vim /etc/aria2/aria2.conf 

daemon=true continue=true enable-rpc rpc-allow-origin-all=true rpc-listen-all=true # Для генерации ключа выполните openssl rand -hex 15 rpc-secret=616d343b1465b51ca65675b2bfef98  dir=/home/store/Download save-session=/etc/aria2/session.lock input-file=/etc/aria2/session.lock dht-file-path=/etc/aria2/dht.dat disable-ipv6=true  log-level=warn 

Создаем preset для firewalld.

vim /etc/firewalld/services/aria2.xml 

<?xml version="1.0" encoding="utf-8"?> <service>  <short>aria2</short>  <description>aria2 command-line download utility</description>  <port protocol="tcp" port="6800"/> </service> 

cd /etc/firewalld/services restorecon aria2.xml chmod 640 aria2.xml 

Активируем и запускаем сервис.

systemctl enable aria2.service systemctl start aria2.service 

Aria2 WebUI

Устанавливаем и настраиваем Web-интерфейс для aria2.

wget https://codeload.github.com/ziahamza/webui-aria2/zip/master -O webui-aria2.zip && unzip webui-aria2.zip -d /home/www/ && mv /home/www/webui-aria2-master /home/www/webui-aria2 && chown nobody:nobody /home/www/webui-aria2 -R 

vim /home/www/webui-aria2/configuration.js 

configuration.js

angular .module('webui.services.configuration',  []) .constant('$name', 'Aria2 WebUI')  // name used across the entire UI .constant('$titlePattern', 'active: {active} - waiting: {waiting} - stopped: {stopped} — {name}') .constant('$pageSize', 11)         // number of downloads shown before pagination kicks in .constant('$authconf', {           // default authentication configuration, never fill it in case the webui is hosted in public IP as it can be compromised   host: '192.168.2.1',   path: '/jsonrpc',   port: 6800,   encrypt: false,   auth: {                          // either add the token field or the user and pass field, not both.   token: '616d343b1465b51ca65675b2bfef98'   /*-----------------------------*/   // user: '*YOUR_USERNAME*',   // pass: '*YOUR_SECRET_PASS*'   },   directURL: ''                   // If supplied, links will be created to enable direct download from the aria2 server, requires appropriate webserver to be configured }) .constant('$enable', {    torrent: true,  // bittorrent support only enabled if supported by aria2 build, set to false otherwise to permanently disable it    metalink: true, // metalink support only enabled if supported by aria2 build, set to false to permanently disable it    sidebar: {            // configuration related to the sidebar next to the list of downloads     show: true,         // set to false to completely hide the sidebar. Other elements inside will be automatically hidden      stats: true,        // set to false to hide the global statistic section (contains the speed graph for now)      filters: true,      // set to false to hide the  Download Filters      starredProps: true // only shown when at least one property is added to the starred list, set to false to permanently hide the Quick Access Settings inside the sidebar   } }) .constant('$starredProps', [   // default list of Quick Access Properties. Can be overridden by making modification through the Global Settings dialog   // go to Global Settings dialog to see their description   'dir', 'conf-path', 'auto-file-renaming', 'max-connection-per-server' ]) .constant('$downloadProps', [ // Similar to starred Quick Access properties but for adding new downloads.   // go to Advance Download Options when adding a new download to view the list of possible options   'http-user', 'http-passwd', 'pause', 'dir', 'max-connection-per-server' ]) .constant('$globalTimeout', 1000)  // interval to update the individual downloads ; 

vim /usr/local/bin/aria2-webui 

aria2-webui

#!/usr/bin/env python  import os import posixpath import urllib import BaseHTTPServer from SimpleHTTPServer import SimpleHTTPRequestHandler  # modify this to add additional routes ROUTES = ( ##  [url_prefix ,  directory_path]     ['',       '/home/www/webui-aria2'],  # empty string for the 'default' match #   ['/media', '/var/www/media'] )  class RequestHandler(SimpleHTTPRequestHandler):      def translate_path(self, path):         """translate path given routes"""          # set default root to cwd         root = os.getcwd()          # look up routes and set root directory accordingly         for pattern, rootdir in ROUTES:             if path.startswith(pattern):                 # found match!                 path = path[len(pattern):]  # consume path up to pattern len                 root = rootdir                 break          # normalize path and prepend root directory         path = path.split('?',1)[0]         path = path.split('#',1)[0]         path = posixpath.normpath(urllib.unquote(path))         words = path.split('/')         words = filter(None, words)          path = root         for word in words:             drive, word = os.path.splitdrive(word)             head, word = os.path.split(word)             if word in (os.curdir, os.pardir):                 continue             path = os.path.join(path, word)          return path  if __name__ == '__main__':     BaseHTTPServer.test(RequestHandler, BaseHTTPServer.HTTPServer) 

Код взят здесь.

chmod 755 /usr/local/bin/aria2-webui 

Создаем systemd сервис.

vim /lib/systemd/system/aria2-webui.service 

[Unit] Description=Aria2 WebUI After=network.target After=aria2.service  [Service] Type=simple User=nobody Group=nobody ExecStart=/usr/local/bin/aria2-webui  [Install] WantedBy=multi-user.target 

Активируем и запускаем сервис.

systemctl enable aria2-webui.service systemctl start aria2-webui.service 

Создаем preset для firewalld.

vim /etc/firewalld/services/aria2-webui.xml 

<?xml version="1.0" encoding="utf-8"?> <service>  <short>Aria2-WebUI</short>  <description>WebUI for Aria2</description>  <port protocol="tcp" port="8000"/> </service> 

cd /etc/firewalld/services restorecon aria2-webui.xml chmod 640 aria2-webui.xml 

OpenVPN

Если есть необходимость, устанавливаем и настраиваем openvpn.

yum install openvpn 

vim /etc/openvpn/client.conf 

client dev tun proto tcp remote xxx.xxx.xxx.xxx 1194 resolv-retry infinite nobind tun-mtu 1500 tun-mtu-extra 32 mssfix 1450 persist-key persist-tun ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/home.crt key /etc/openvpn/keys/home.key #tls-auth /etc/openvpn/keys/ta.key 1 #comp-lzo verb 3 

systemctl enable openvpn@client systemctl start openvpn@client systemctl status -l openvpn@client 

NFS

Устанавливаем и настраиваем поддержку nfs, для доступа с linux машин.

yum install nfs-utils 

vim /etc/idmapd.conf 

Domain = router.local 

vim /etc/exports 

/home/store 192.168.2.0/24(rw,sync,no_root_squash,no_subtree_check) 

Активируем и запускаем сервис.

systemctl start rpcbind nfs-server systemctl enable rpcbind nfs-server 

Проверяем.

exportfs 

Bonus.

Это скрипты для автоматического монтирования nfc шары при загрузке TV-приставки на Android.
4.4.2 SuperSU

#!/system/bin/sh  S_MOUNT="NFS" T_MOUNT="store" IP="192.168.2.1"  # Make sure networking is up before mounting while : do    check_if_up=($(netcfg | grep -e eth0 -e wlan0 | busybox awk '{print $2}'))    if [[ (${check_if_up[0]} = UP) || (${check_if_up[1]} = UP) ]]; then     break    fi    sleep 1 done sleep 1  if [ ! -d /data/media/0/${S_MOUNT} ] ; then   mkdir /data/media/0/${S_MOUNT} fi sleep 30  su --mount-master -c busybox mount -o rw,nosuid,nodev,nolock,rsize=32768,wsize=32768,intr,noatime -t nfs ${IP}:/home/${T_MOUNT} /data/media/0/${S_MOUNT} 

4.2.2 SuperSU

#!/system/bin/sh  S_MOUNT="NFS" T_MOUNT="store" IP="192.168.2.1"  # Make sure networking is up before mounting while : do    check_if_up=($(netcfg | grep -e eth0 -e wlan0 | busybox awk '{print $2}'))    if [[ (${check_if_up[0]} = UP) || (${check_if_up[1]} = UP) ]]; then     break    fi    sleep 1 done sleep 1  if [ ! -d /mnt/${S_MOUNT} ] ; then   mkdir /mnt/${S_MOUNT} fi sleep 30  busybox mount -o rw,nolock ${IP}:/home/${T_MOUNT} /mnt/${S_MOUNT} 

SAMBA

Устанавливаем и настраиваем поддержку samba, для доступа с windows машин.

 yum install samba  mv /etc/samba/smb.conf /etc/samba/smb.conf.orig 

vim /etc/samba/smb.conf 

smb.conf

[global]         workgroup = WORKGROUP         server string = ROUTER         netbios name = ROUTER         interfaces = lo br0         hosts allow = 127. 192.168.2.         bind interfaces only = yes         security = USER         map to guest = Bad User         guest account = nobody         encrypt passwords = true         passdb backend = tdbsam         load printers = no         show add printer wizard = no         printcap name = /dev/null         disable spoolss = yes         unix charset = UTF8         socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536  [store]         comment = all         path = /home/store         browseable = no         read only = no         guest ok = yes         writable = yes         create mask = 0777         directory mask = 0777         available = yes         public = yes 

Активируем и запускаем сервис.

 systemctl enable smb.service  systemctl start smb.service 

Squid

Устанавливаем и настраиваем кеширующий прокси сервер squid.
Сквид собран с патчем для bio.cc и позволяет осуществлять прозрачную фильтрацию HTTPS ресурсов без подмены сертификатов.
Подробнее можно ознакомится здесь.
Так же на сквиде мы будем резать рекламу и заворачивать запросы, к некоторым сайтам, через tor.
Добавляем репозиторий Squid, но запрещаем установку пакетов squid squid-helpers.

vim /etc/yum.repos.d/Squid.repo 

[squid] name=Squid repo for CentOS Linux - $basearch #IL mirror baseurl=http://www1.ngtech.co.il/repo/centos/$releasever/$basearch/ failovermethod=priority enabled=1 gpgcheck=0 # Exclude=squid squid-helpers 

yum update 

Скачиваем и устанавливаем Squid.

yum localinstall https://dl.dropboxusercontent.com/u/2709550/HP%20t610%20PLUS/Squid/squid-3.5.8-4.el7.centos.x86_64.rpm yum localinstall https://dl.dropboxusercontent.com/u/2709550/HP%20t610%20PLUS/Squid/squid-helpers-3.5.8-4.el7.centos.x86_64.rpm 

cd /etc/squid mkdir ssl_cert chown squid:squid ssl_cert chmod 700 ssl_cert cd ssl_cert openssl req -new -newkey rsa:1024 -days 365 -nodes -x509 -keyout squidCA.pem -out squidCA.pem 

/usr/lib64/squid/ssl_crtd -c -s /var/lib/ssl_db chown squid:squid -R /var/lib/ssl_db 

vim /etc/squid/squid.conf 

squid.conf

visible_hostname router.local #---------------------------------------------------------------- mime_table /etc/squid/mime.conf global_internal_static on icon_directory /usr/share/squid/icons #---------------------------------------------------------------- acl localnet src 192.168.2.0/24 acl office_hours        time            00:00-24:00 #---------------------------------------------------------------- acl SSL_ports port 443          # https acl SSL_ports port 563          # snews acl SSL_ports port 873          # rsync #---------------------------------------------------------------- acl Safe_ports port 21          # ftp acl Safe_ports port 25          # smtp acl Safe_ports port 70          # gopher acl Safe_ports port 80          # http acl Safe_ports port 210         # wais acl Safe_ports port 280         # http-mgmt acl Safe_ports port 443         # https acl Safe_ports port 488         # gss-http acl Safe_ports port 591         # filemaker acl Safe_ports port 631         # cups acl Safe_ports port 777         # multiling http acl Safe_ports port 873         # rsync acl Safe_ports port 901         # SWAT acl Safe_ports port 1025-65535  # unregistered ports acl purge method PURGE acl CONNECT method CONNECT #---------------------------------------------------------------- acl windowsupdate dstdomain windowsupdate.microsoft.com acl windowsupdate dstdomain .update.microsoft.com acl windowsupdate dstdomain download.windowsupdate.com acl windowsupdate dstdomain redir.metaservices.microsoft.com acl windowsupdate dstdomain images.metaservices.microsoft.com acl windowsupdate dstdomain c.microsoft.com acl windowsupdate dstdomain www.download.windowsupdate.com acl windowsupdate dstdomain wustat.windows.com acl windowsupdate dstdomain crl.microsoft.com acl windowsupdate dstdomain sls.microsoft.com acl windowsupdate dstdomain productactivation.one.microsoft.com acl windowsupdate dstdomain ntservicepack.microsoft.com #----------------------------------------------------------------- acl onion_domain dstdomain .onion acl tor_url dstdom_regex -i "/etc/squid/tor.url" #----------------------------------------------------------------- cache_peer 127.0.0.1 parent 8118 0 no-query no-digest default cache_peer_access 127.0.0.1 allow onion_domain cache_peer_access 127.0.0.1 allow tor_url cache_peer_access 127.0.0.1 deny all #----------------------------------------------------------------- http_access allow windowsupdate localnet #----------------------------------------------------------------- never_direct allow onion_domain never_direct allow tor_url always_direct deny onion_domain always_direct deny tor_url always_direct allow all #---------------------------------------------------------------- sslproxy_cert_error allow all sslproxy_flags DONT_VERIFY_PEER acl blocked ssl::server_name  "/etc/squid/denied_https.conf" acl step1 at_step SslBump1 ssl_bump peek step1 ssl_bump terminate blocked ssl_bump splice all sslcrtd_program /usr/lib64/squid/ssl_crtd -s /var/lib/ssl_db -M 4MB #---------------------------------------------------------------- acl js urlpath_regex -i \.js(\?.*)?$ acl adblock-android dstdomain "/etc/squid/adblock-android.conf" acl adblock url_regex "/etc/squid/adblock.acl" acl badsites    dstdomain "/etc/squid/denied-sites.conf" #---------------------------------------------------------------- http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access deny  localnet adblock-android http_access deny  localnet adblock http_access allow localhost localnet Safe_ports #---------------------------------------------------------------- http_access allow localnet CONNECT http_access allow localnet office_hours #---------------------------------------------------------------- deny_info TCP_RESET adblock js deny_info http://192.168.2.1:3128/squid-internal-static/icons/null.gif adblock #---------------------------------------------------------------- http_access deny all #---------------------------------------------------------------- icp_access allow localnet icp_access deny all #---------------------------------------------------------------- http_port 192.168.2.1:3127 options=NO_SSLv3:NO_SSLv2 http_port 192.168.2.1:3128 intercept options=NO_SSLv3:NO_SSLv2 https_port 192.168.2.1:3129 intercept ssl-bump options=ALL:NO_SSLv3:NO_SSLv2 connection-auth=off cert=/etc/squid/ssl_cert/squidCA.pem #---------------------------------------------------------------- access_log stdio:/var/log/squid/access.log squid cache_log /var/log/squid/cache.log cache_store_log stdio:/var/log/squid/store.log pid_filename /var/run/squid.pid debug_options ALL,1 #---------------------------------------------------------------- refresh_pattern ^ftp:           1440    20%     10080 refresh_pattern ^gopher:        1440    0%      1440 refresh_pattern -i (/cgi-bin/|\?) 0     0%      0 refresh_pattern (Release|Package(.gz)*)$        0       20%     2880 refresh_pattern .               0       20%     4320 acl shoutcast rep_header X-HTTP09-First-Line ^ICY\s[0-9] acl apache rep_header Server ^Apache #---------------------------------------------------------------- hosts_file /etc/hosts coredump_dir /var/spool/squid error_directory /usr/share/squid/errors/ru-ru cache_mgr wmlex@yandex.ru cache_dir ufs /var/spool/squid 2000 48 256 shutdown_lifetime 5 seconds 

Скачиваем файлы блокировок рекламы

wget -P /etc/squid/ https://dl.dropboxusercontent.com/u/2709550/HP%20t610%20PLUS/Squid/adblock-android.conf wget -P /etc/squid/ https://dl.dropboxusercontent.com/u/2709550/HP%20t610%20PLUS/Squid/adblock.acl wget -P /usr/share/squid/icons/ https://dl.dropboxusercontent.com/u/2709550/HP%20t610%20PLUS/Squid/null.gif touch /etc/squid/denied_https.conf touch /etc/squid/tor.url 

vim /etc/squid/tor.url 

config.privoxy.org check.torproject.org/?lang=ru 

vim /etc/squid/mime.conf 

null.gif$       image/gif                       null.gif                        -       image   +download +view 

systemctl enable squid.service squid -z systemctl restart squid.service 

vim /etc/firewalld/services/squid.xml 

<?xml version="1.0" encoding="utf-8"?> <service>  <short>Suid</short>  <description>Squid caching proxy server</description>  <port protocol="tcp" port="3127"/>  <port protocol="tcp" port="3128"/>  <port protocol="tcp" port="3129"/> </service> 

cd /etc/firewalld/services restorecon squid.xml chmod 640 squid.xml 

Tor

Устанавливаем tor, для доступа к доменам .onion и другим сайтам. Так же необходимо установить и настроить privoxy, так как tor не сможет работать напрямую со squid.

vim /etc/yum.repos.d/torproject.repo 

[tor] name=Tor repo enabled=1 baseurl=https://deb.torproject.org/torproject.org/rpm/el/7/$basearch/ gpgcheck=1 gpgkey=https://deb.torproject.org/torproject.org/rpm/RPM-GPG-KEY-torproject.org.asc repo_gpgcheck=1  [tor-source] name=Tor source repo enabled=0 autorefresh=0 baseurl=https://deb.torproject.org/torproject.org/rpm/el/7/SRPMS gpgcheck=1 gpgkey=https://deb.torproject.org/torproject.org/rpm/RPM-GPG-KEY-torproject.org.asc repo_gpgcheck=1 

vim /etc/yum.repos.d/epel.repo 

Исключаем установку пакеа из репозитария epel.

Exclude=tor 

yum update yum install tor privoxy 

vim /etc/tor/tor-rpm-defaults-torrc 

# You probably want to edit torrc file instead of this one. # These are just fallback variables for --defaults-torrc Tor option. # DataDirectory /var/lib/tor PidFile /var/run/tor/tor.pid RunAsDaemon 1 User _tor SocksPort 9050 SocksListenAddress 127.0.0.1 #ControlSocket /var/run/tor/control #ControlSocketsGroupWritable 1 CookieAuthentication 1 Log notice file /var/log/tor/tor.log ExcludeNodes {ru}, {ua}, {by} VirtualAddrNetworkIPv4 10.192.0.0/10 DNSPort 5300 DNSListenAddress 127.0.0.1 AutomapHostsOnResolve 1 

Настраиваем privoxy.

vim /etc/privoxy/config 

confdir /etc/privoxy logdir /var/log/privoxy logfile privoxy.log actionsfile match-all.action # Actions that are applied to all sites and maybe overruled later on. actionsfile default.action   # Main actions file actionsfile user.action      # User customizations filterfile default.filter filterfile user.filter      # User customizations listen-address  127.0.0.1:8118 forward-socks5t / 127.0.0.1:9050 . max-client-connections 4096 toggle  1 enable-remote-toggle  0 enable-remote-http-toggle  0 enable-edit-actions 0 enforce-blocks 0 buffer-limit 4096 enable-proxy-authentication-forwarding 0 forwarded-connect-retries  0 accept-intercepted-requests 0 allow-cgi-request-crunching 0 split-large-forms 0 keep-alive-timeout 5 tolerate-pipelining 1 socket-timeout 300 

Активируем и запускаем сервисы.

systemctl enable tor systemctl restart tor systemctl enable privoxy.service systemctl start privoxy.service 

Firewalld

Настраиваем файрволл.

firewall-cmd --set-default-zone=internal  firewall-cmd --permanent --zone=external --add-icmp-block=echo-reply firewall-cmd --permanent --zone=external --add-icmp-block=destination-unreachable firewall-cmd --permanent --zone=external --add-icmp-block=echo-request firewall-cmd --permanent --zone=external --add-icmp-block=time-exceeded firewall-cmd --permanent --zone=external --add-icmp-block=parameter-problem  firewall-cmd --permanent --zone=external --change-interface=enp1s0 firewall-cmd --permanent --zone=external --add-masquerade  # Если вы используете 4G firewall-cmd --direct --permanent --passthrough ipv4 -t mangle -A POSTROUTING -o wwp6s0u1i1 -j TTL --ttl-set 64 firewall-cmd --permanent --zone=external --change-interface=wwp6s0u1i1  firewall-cmd --permanent --zone=internal --change-interface=br0  firewall-cmd --permanent --zone=internal --add-masquerade  firewall-cmd --permanent --zone=internal --add-port=9091/tcp firewall-cmd --permanent --zone=internal --add-service=samba firewall-cmd --permanent --zone=internal --add-service=dns firewall-cmd --permanent --zone=internal --add-service=dhcp firewall-cmd --permanent --zone=internal --add-service=nfs firewall-cmd --permanent --zone=internal --add-service=ntp firewall-cmd --permanent --zone=internal --add-service=mountd firewall-cmd --permanent --zone=internal --add-service=rpc-bind firewall-cmd --permanent --zone=internal --add-service=ssh firewall-cmd --permanent --zone=internal --add-service=aria2 firewall-cmd --permanent --zone=internal --add-service=aria2-webui  firewall-cmd --permanent --zone=internal --add-service=squid firewall-cmd --permanent --zone=internal --add-forward-port=port=80:proto=tcp:toport=3128:toaddr=192.168.2.1 firewall-cmd --permanent --zone=internal --add-forward-port=port=443:proto=tcp:toport=3129:toaddr=192.168.2.1  firewall-cmd --reload 

firewall-cmd --list-all-zones 

systemctl restart network.service systemctl restart firewalld.service 

ссылка на оригинал статьи http://habrahabr.ru/post/273547/