С момента публикации на 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
Для его работы необходимо установить следующие пакеты.
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"rn' > /dev/ttyUSB0
vim /etc/sysconfig/network-scripts/pre-down-wwp6s0u1i1
#!/bin/bash
#
echo -en 'AT^NDISDUP=1,0,"internet.yota"rn' > /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
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="[$GREENu$RED@$BLUEH]$NORMALw# "
Настраиваем 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
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
{
"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
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
#!/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
Android 4.4
#!/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}
Android 4.2
#!/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
[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
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 ^ICYs[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
Автор: wmlex