суббота, 21 декабря 2019 г.

Легковесный RDP-сервер на Debian 8 + XFCE (с русскоязычным интерфейсом)

1. Ставим Debian, выбираем русскую локаль
Если локаль по умолчанию английская, сменить её можно так:
https://wiki.debian.org/ChangeLanguage
# env | grep LANG
# export LANG=ru_RU.UTF-8
# dpkg-reconfigure locales


2. Настраиваем Iptables
Перед настройкой IPtables (запланировать перезагрузку через 10 минут)
shutdown -t 10 –r
shutdown –c


2.1. Создаем скрипт для iptables (не забываем chmod 0740)
nano /usr/local/firewall/firewall_static.sh

2.2. Правила
#!/bin/sh

PATH='/sbin'
ALLOW_SSH='10.10.10.0/24,192.168.1.1/32'
ALLOW_RDP='10.10.10.0/24,192.168.1.1/32'
WAN='eth0'

# Flush previous rules, delete chains and reset counters
iptables -F
iptables -X
iptables -Z
iptables -t nat -F

# Default policies
iptables -P FORWARD DROP
iptables -P INPUT   DROP
iptables -P OUTPUT  DROP

# Disable source-routed packets
echo -n '0' > /proc/sys/net/ipv4/conf/all/accept_source_route
# Disable ICMP Redirect Acceptance
echo -n '0' > /proc/sys/net/ipv4/conf/all/accept_redirects
# Enable broadcast echo protection
echo -n '1' > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# Enable bad error message protection
echo -n '1' > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

# Enable loopback traffic
iptables -A INPUT  -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Enable statefull rules (after that, only need to allow NEW conections)
iptables -A INPUT   -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT  -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT


# Drop invalid state packets
iptables -A INPUT   -m conntrack --ctstate INVALID -j DROP
iptables -A OUTPUT  -m conntrack --ctstate INVALID -j DROP
iptables -A FORWARD -m conntrack --ctstate INVALID -j DROP

# Allow SSH management
iptables -A INPUT -i $WAN -s $ALLOW_SSH -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT

# Enable all outgoing traffic to internet
iptables -A OUTPUT -o $WAN -d 0.0.0.0/0 -j ACCEPT

# Allow RDP
iptables -A INPUT -i $WAN -s $ALLOW_RDP -p tcp --dport 3389 -m conntrack --ctstate NEW -j ACCEPT


## LOGGING to /var/log/messages
#iptables -A INPUT   -j LOG --log-level debug --log-prefix '[FW INPUT]:    '
#iptables -A OUTPUT  -j LOG --log-level debug --log-prefix '[FW OUTPUT]:   '
#iptables -A FORWARD -j LOG --log-level debug --log-prefix '[FW FORWARD ]: '


2.3 Создаем также правила для ipv6 в файле /usr/local/firewall/ipv6_firewall.sh
(не забываем chmod 0740)
#!/bin/sh
PATH='/sbin'

# Flush the tables to apply changes
ip6tables -F

#ACCEPT POLICY
ip6tables -P INPUT DROP #If it doesn't match a rule Drop it
ip6tables -P FORWARD DROP #NO ROUTING POLICY DROP
ip6tables -P OUTPUT ACCEPT #If it doesn't match a rule

########
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -m state --state ESTABLISHED,RELATED -A INPUT -j ACCEPT
ip6tables -A INPUT -p icmpv6 -j ACCEPT


2.4. Добавляем . /usr/local/firewall/firewall_static.sh и . /usr/local/firewall/ipv6_firewall.sh
в /etc/rc.local перед exit0

2.5. Проверяем счетчики iptables
iptables -vL


3. Ставим XFCE
apt update
apt install mc
apt install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils


4. Собираем xrdp
https://github.com/neutrinolabs/xrdp/wiki/Building-on-Debian-8

apt-get install git autoconf libtool pkg-config gcc g++ make  libssl-dev libpam0g-dev libjpeg-dev libx11-dev libxfixes-dev libxrandr-dev  flex bison libxml2-dev intltool xsltproc xutils-dev python-libxml2 g++ xutils libfuse-dev libmp3lame-dev nasm libpixman-1-dev xserver-xorg-dev

mkdir Downloads
cd Downloads
git clone https://github.com/neutrinolabs/xrdp.git
git clone https://github.com/neutrinolabs/xorgxrdp.git


cd /home/user/Downloads/xrdp
./bootstrap
./configure --enable-fuse --enable-jpeg
make
make install


cd /home/user/Downloads/xorgxrdp
./bootstrap
./configure
make
make install


systemctl daemon-reload
systemctl enable xrdp.service
systemctl enable xrdp-sesman.service
systemctl start xrdp

systemctl status xrdp


5. Ставим браузер и офис с пакетом локализации
apt install iceweasel libreoffice xfonts-mathml libreoffice-l10n-ru myspell-ru hyphen-ru libreoffice-grammarcheck-ru libreoffice-help-ru mythes-ru

6. Создаём группу rdp-users и добавляем в неё пользователей
addgroup rdp-users
adduser <username> --ingroup rdp-users


7. Смотрим логи
tail -F /var/log/xrdp.log
tail -F /var/log/xrdp-sesman.log


8. Для того, чтобы добавить клавиатурный шорткат для смены раскладки в xfce сначала добавляем на панель индикатор раскладки, далее, щёлкнув по нему правой кнопкой переходим в настройку параметров и выбираем шорткат.