среда, 21 июля 2010 г.

Proxy server on DEBIAN 5.0

Задача сервера: обеспечить безопасность внутренней сети от угроз из интернета и предоставить доступ сотрудникам до сети интернета, с введенными правилами ограничений.
Операционная система: Linux Debian 5.0

Установленное программное обеспечение:
- прокси сервер SQUID 3.0,
- SARG для генерации отчетов по использованию интернета сотрудниками отеля,
- web-сервер apache2.0 для просмотра отчетов через web браузер,
- файрволл iptables fw-script для обеспечения безопасности внутренней сети отеля из глобальной сети интернет.

Сотрудники разбиты на 3 группы:
1. Группа администраторов, нет ограничений.
2. Группа сотрудников с ограниченным доступом до интернета.
3. Группа с доступом только на разрешенные сайты.
Все остальные сотрудники не имеют доступ в интернет через сервер.

Ограничения для 2-й группы:
- запрет на доступ следующих ресурсов:
.fishki.net
.odnoklasniki.ru
.vkontakte.ru
.youtube.ru
.youtube.com
.depositfiles.com
.vip-file.com
- запрет на заход интернет порталов, где в доменном имени присутствуют: sex, porno, love.
- запрет на заход интернет порталов находящихся в домене net, tv, т.к. в этих доменах в основном находятся развлекательные ресурсы.
- запрет на скачивание видео и музыки следующих форматов: .mp3, .acf, .wma, .avi, .mpeg, .mpeg4, .wmv, .flv, .asf.

3-я группа может заходить на следующие сайты:
.yandex.ru
.rambler.ru
.rbc.ru

Решение:
настраиваем сетевые интерфейсы
# The loopback network interface
auto lo
iface lo inet loopback

# Внешний сетевой интерфейс
allow-hotplug eth0
iface eth0 inet static
address x.x.x.x
netmask 255.255.255.252
gateway x.x.x.
#Запуск скрипта firewall на внешнем интерфейсе
pre-up /etc/init.d/fw-script start

# внутренний интерфейс
allow-hotplug eth1
iface eth1 inet static
address 192.168.1.1
netmask 255.255.255.0

создаем скрипт fw-script и кладем его /etc/init.d
#! /bin/sh

my_init() {
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -F
iptables -t nat -F
iptables -X
echo 1 > /proc/sys/net/ipv4/ip_forward
}
my_access() {
#################################################
echo "Create filter rules..."
echo "Create local rules..."
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -s 127.0.0.1/255.0.0.0 ! -i lo -j DROP

iptables -A OUTPUT -o eth1 -j ACCEPT
iptables -A INPUT -i eth1 -j ACCEPT
echo "Allow output tcp traffic..."
iptables -A OUTPUT -o eth0 -j ACCEPT

#forward packets
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

echo "Allow input ssh trafic on port 22..."
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
echo "Create input-output icmp traffic..."
iptables -A INPUT -i eth0 -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o eth0 -p icmp --icmp-type 0 -m state --state ESTABLISHED,RELATED -j ACCEPT


echo "Allow input traffic... rinetd is allow forwarding!!!!! not iptables!"

iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 3389 -j ACCEPT

echo #allow traffic on squid#
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp -m multiport --dport 80,8080 -j REDIRECT --to-port 3128

echo "Create main rules..."
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A OUTPUT -o eth0 -j ACCEPT

iptables -A INPUT -i eth0 -p UDP --dport 1194 -j ACCEPT

#NAT
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source X.X.X.240 #Внешний ip

}
case "$1" in
start|restart|reload)
echo -n "Starting Firewall configuration by VITAL "
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
my_init
#GO
# my_traf
my_access
# rc_status -v
;;
stop)
echo -n "Shutting down Firewall "
iptables -F
iptables -t nat -F
iptables -X
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
rc_status -v
;;
status)
echo "Current Firewall-rules "
echo "Current iptables rules in the filter table:"
echo "-------------------------------------------"
iptables -v -L -n
echo " "
echo "Current iptables rules in the nat table:"
echo "-------------------------------------------"
iptables -v -n -t nat -L
# rc_status -v
;;
*)
echo "Usage: $0 (start|restart|reload|status)"
exit 1
;;
esac
#rc_exit

Для проброса портов во внутрь сети устанавливаем rinetd
apt-get install rinetd
В rinetd.conf прописываем от куда и куда проброс во внутрь сети
X.X.X.240 3389 192.168.1.11 3389

Устанавливаем squid
apt-get install squid3

Редактируем squid.conf
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8

#acl office src 192.168.1.0/24
# Admins full internet
acl admin_users src "/etc/squid3/adminusers"
# Allow Users Inet in Office with restrict sait
acl inet_users src "/etc/squid3/internetusers"
# Restrict Inet for Users
acl inet_restrict src "/etc/squid3/restrictusers"
acl sait_restrict dstdomain src "/etc/squid3/restrictsait"
# Deny inet users
acl deny_inet src "/etc/squid3/denyusers"

#Запрет на домены
acl deny_domain dstdomain "/etc/squid3/denydomain"
#Запрет вход в домены содержащие в домене след-е слова
acl adult dstdom_regex sex porno love
#Запрет заход на домены
acl regexdomain dstdom_regex \.net$ \.tv$
#Files for deny: video and sound
acl media urlpath_regex -i .mp3$ .acf$ .wma$ .avi$ .mpeg$ .mpeg4$ .wmv$ .flv$ .asf$

acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

#Allow Inet for admin grups
http_access allow admin_users

# deny domain
http_access deny inet_users deny_domain
http_access deny inet_users adult
http_access deny inet_users regexdomain
http_access deny inet_users media
http_access allow inet_users

#Deny inet users
http_access deny deny_inet

#reeption
http_access allow inet_restrict sait_restrict
http_access deny inet_restrict

#http_access deny adult
#http_access deny regexdomain
#http_access deny deny_domain
#http_access allow office

http_access allow localhost
http_access deny all
icp_access deny all
htcp_access deny all
http_port 3128 transparent
hierarchy_stoplist cgi-bin ?
access_log /var/log/squid3/access.log squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern (cgi-bin|\?) 0 0% 0
refresh_pattern . 0 20% 4320
icp_port 3130
coredump_dir /var/spool/squid3

Создаем файлы командой touch
adminusers, denyusers и другие, в них через интер вводим нужные ip

Создаем denydomain
и вносим домены, куда доступ запрещен
.fishki.net
.odnoklasniki.ru
.vkontakte.ru
.youtube.ru
.youtube.com
.depositfiles.com
.vip-file.com

Создаем restrictsait
.yandex.ru
.rambler.ru
.rbc.ru

Все остальные настройки делаем по аналогии.

Сервер готов к работе!

четверг, 18 марта 2010 г.

Удаленная перезагрузка windows из под linux

linux debian
windows server 2003
Необходимо, чтобы в linux был пакет samba-common.
Если нет, то устанавливаем:
sudo apt-get install samba-common
Выключение windows:
net rpc shutdown -I [ip адресс] -U login%password
Если перезагрузка, то параметр -r

Все параметры данной команды:

net rpc info show basic info about a domain
net rpc join to join a domain
net rpc oldjoin to join a domain created in server manager
net rpc testjoin tests that a join is valid
net rpc user to add, delete and list users
net rpc password [] -Uadmin_username%admin_pass
net rpc group to list groups
net rpc share to add, delete, list and migrate shares
net rpc printer to list and migrate printers
net rpc file to list open files
net rpc changetrustpw to change the trust account password
net rpc getsid fetch the domain sid into the local secrets.tdb
net rpc vampire syncronise an NT PDC’s users and groups into the local passdb
net rpc samdump diplay an NT PDC’s users, groups and other data
net rpc trustdom to create trusting domain’s account or establish trust
net rpc abortshutdown to abort the shutdown of a remote server
net rpc shutdown to shutdown a remote server
net rpc rights to manage privileges assigned to SIDs
net rpc registry to manage registry hives
net rpc service to start, stop and query services
net rpc audit to modify global auditing settings
net rpc shell to open an interactive shell for remote server/account management

‘net rpc shutdown’ also accepts the following miscellaneous options:
-r or –reboot request remote server reboot on shutdown
-f or –force request the remote server force its shutdown
-t or –timeout= number of seconds before shutdown
-C or –comment= text message to display on impending shutdown

понедельник, 28 сентября 2009 г.

Protocol filter(PF) от DDos атак на сервер под freeBSD

Защита от Doss-атак для web сервера
1) Фаервол
2) И грамотно настроенный веб сервер!

Пример:
1) Фаерволл PF.

Обозначаем фильтер протоколов в rc.conf
pf=YES
pf_rules=/etc/pf.conf

Код: /etc/pf.conf
set block-policy drop # Если кто то попал под правило block молча откидаем его пакеты
set fingerprints "/etc/pf.os" # Файл с всеми извесными ОС, PF может резать людей по версиям ОС
set loginterface $ext_if # С какого интерфейса статистику снимать будем.
set optimization normal # Нормализация хождения трафика
scrub in all # Нормализация входящего трафика
scrub out all # Нормализация исходящего трафика

table persist # Создаём таблицу DDOS
block quick from to any # Всех кто в таблице DDOS рубим и не смотрим на остальные правила

# Защита от ДДОС атак на WWW сервер
pass in on $ext_if proto tcp from any to $int_if port www flags S/SA keep state
( max-src-conn-rate 50/5, overload flush)
# Если кто то хочет создать больше чем 50 линков за 5 сек добавлять в таблицу DDOS

Посмотреть всех кто попался на удочку так pfctl -t ddos -T show а очистить таблицу так pfctl -t ddos -T flush

Мини мануал по командам PF
pfctl -f /etc/pf.conf - Загрузить правила из файла /etc/pf.conf
pfctl -nf /etc/pf.conf - Проверить валидность правил из файла /etc/pf.conf - НО НЕ ЗАГРУЖАТЬ
pfctl -Nf /etc/pf.conf - Загрузить только правила NAT
pfctl -Rf /etc/pf.conf - Загрузить только фильтрующие правила
pfctl -sn - Посмотреть активные правила NAT ТРАНСЛЯЦИИ
pfctl -sr - Посмотреть активные правила фильтра
pfctl -ss - Показать текущую таблицу состояний (state table)
pfctl -si - Показать статистику
pfctl -sa - Показать ВСЁ что можна

Другие примеры PF:

# added by defsite.ru

set loginterface em0
set optimization aggressive
set limit {states 120000, frags 10000}
set limit src-nodes 70000

set skip on { lo0 }

pass in quick on em0 inet proto tcp from any to 77.91.229.144 port 80 flags S/SA synproxy state (max 100000, source-track rule, max-src-states 60, max-src-conn 50, if-bound, adaptive.start 60000, adaptive.end 120000)

Дополнительная информация по PF

2. web server
Устанавливаем в паре 2 веб сервера Nginx and Apache
На порту 80 работает Nginx а на 8080 работает Apache
Дуступ к порту 8080 разрешен только из интерфейса lo0.

И того Nginx выступает в качестве кешырующего веб сервера а апач в качестве выполняймого.
И вот когда Вас ДОСЯТ или ДДОСЯТ, Nginx первый раз берет страничку у апачаИ того Nginx выступает в качестве кешырующего веб сервера а апач в качестве выполняймого.
И вот когда Вас ДОСЯТ или ДДОСЯТ Nginx первый раз берет страничку у апача а второй и все последующие отдайот из кеша и сразу рубает линк с ДДОСЕРОМ, а второй и все последующие отдаёт из кеша и сразу рубает линк с ДДОСЕРОМ.

среда, 2 сентября 2009 г.

Виртуализация сервера на KVM

Задача: установить debian5 и создать на нем виртуализацию windows srv 2003 с помощью KVM.
Установка KVM:
apt-get install gcc libsdl1.2-dev zlib1g-dev libasound2-dev linux-kernel-headers pkg-config libgnutls-dev libpci-dev

Установка qemu:
apt-get install qemu

Создание образа на HDD:
qemu-img create -f qcow2 /usr/local/vm/win2003.img 20G
Создается образ /usr/local/vm/win2003.img размером в 20Гб

Установка windows 2003:
qemu -cdrom /dev/hda -hda /usr/local/vm/win2003.img -m 1288 -boot d -kernel-kqemu -no-kqemu -vnc :0 -localtime -daemonize
Выделил ОЗУ 1288МЬ
-daemonize не держать процесс до завершения работы виртуальной машины.

Подключение к образу через VNC
При нажатие F8, меню сочетания клавишь.

Для подключение к установленному windows через rdp:
rdesktop 192.168.X.X:3389 -u admin -f -a 24
-f это fullscreen, a 24 - 24 бит цветности
crl+alt+enter - свернуть fullscreen

Чтобы виртуальная машина была в сети, необходимо создать для неё виртуальный интерфейс и сделать мост между им и реальном lan.

Для этого был написан скрипт /etc/script-ifup:

#!/bin/sh
ifconfig eth1 down
ifconfig eth1 0.0.0.0 up
brctl addbr mybridge
brctl addif mybridge eth1
ifconfig mybridge 192.168.7.22 netmask 255.255.255.0
route add default gw 192.168.7.1
ifconfig mybridge up
sleep 2
vde_tunctl -b
ifconfig tap0 0.0.0.0 promisc up
brctl addif mybridge tap0
sleep 2
echo "most rabotaet)"

В win2003 прописываем сетевые настройки.

Виртуальный сервер win2003 теперь в сети. Рекомендую сделать копию образа 2003.

P.S.
1. Запускаем сервер.
2. Запускаем скрипт для виртуального инетрфейста или моста(можно скрипт в автозапуск поставить).
3. Запускаем виртуальную машину с виртуальным интерфейсом:
qemu -hda /usr/local/vm/win2003.img -kernel-kqemu -net nic,model=rtl8139 -net tap,ifname=tap0 -vnc :0 -m 758 -daemonize

понедельник, 6 апреля 2009 г.

DNS клиент

nslookup -type=a domen.ru показывает А-зону для domen.ru
nslookup -type=mx domen.ru показывает MX-зону для domen.ru(ip mail server)
nslookup -type=soa domen.ru показывает SOA запись для domen.ru
whois domen.ru выводит всю информацию по domen.ru
dig domain.ru mx вывод развернутой информации по mx зоны
host domain.ru выводит инфо об узле domain.ru

понедельник, 26 января 2009 г.

Web сервер apache

Сервер установил внутри локальной сети с ip: 192.168.х.х. На маршрутизаторе сделал проброс по 80 порту до apache.

В httpd.conf Apache HTTP сервера устанавливается в /usr/local/etc/apache/httpd.conf
ServerAdmin you@your.address - Адрес, на который должны будут отправляться сообщения о проблемах с сервером.
DocumentRoot "/usr/local/www/data" - Каталог, внутри которого будут храниться документы.
ServerName domen.com - обозначение имени сервера
Поменять:
#Directory /#
AllowOverride all
Order deny,allow
Allow from all
#/Directory#

# Virtual hosts
Include conf/extra/httpd-vhosts.conf Конфигурация виртальных хостов

#
/usr/local/sbin/apachectl start(stop/restart) Запуска APACHE

# /usr/local/sbin/apachectl graceful Для перезапуска Apache без прерывания имеющихся соединений
Для запуска Apache при старте системы в /etc/rc.conf:
apache_enable="YES"


Виртуальные хостинги.
Физический сервер связан с одним IP адресом. Несколько доменных имен связываются с этим IP адресом. Все логические веб-сервера прослушивают один единственный порт. Сервер различает запросы, используя поле HOST, которое является обязательным в HTTP запросах в HTTP версии 1.1.
httpd-vhosts.conf:
#VirtualHost *:80#
ServerName www.holdwest.com
DocumentRoot /home/vital/sait/wwwholdwest
ErrorLog "/var/log/httpd_wwwholdwestcom.log"
#/VirtualHost#

#VirtualHost *:80#
ServerName talisman.holdwest.com
DocumentRoot /home/vital/sait/talisman
ErrorLog "/var/log/httpd_talismanholdwestcom.log"
#/VirtualHost#

#VirtualHost *:80#
ServerName www.talisman.holdwest.com
DocumentRoot /home/vital/sait/wwwtalisman
ErrorLog "/var/log/httpd_wwwtalismanholdwestcom.log"
#/VirtualHost#


Установка MySQL:
cd /usr/ports/databases/mysql50-server
make install clean
mysql_install_db установка базы

В
/etc/ rc.conf:
mysql_enable=”YES”

Запуск MySQL:
/usr/local/etc/rc.d/mysql-server start

При 1-м запуске ругался на то, что не существует /tmp/mysql.sock, после рестарта все ок
/usr/local/etc/rc.d/mysql-server restart

В MySQL 5.0 по умолчанию пользователь root, после первоначальной установки сервера, создается без пароля. Вернее с пустым паролем. Поэтому задаем его сами:
mysqladmin -u root password новый_пароль

/usr/local/bin/mysqladmin version показывает версию sql
после установки пароля на root в sql:
/usr/local/bin/mysqladmin version --u=root --password=Pass

После смены пароля root для sql входить:
mysql --user=root --password=Новый пароль
После каждой команды необходимо вводить ";:"
help;

Выводит базы sql:
mysqlshow --u=root --password=Pass

Установка PHP5:
cd /usr/ports/lang/php5
make install clean
cd /usr/ports/lang/php5-extensions
make install clean

В httpd.conf дописываем, что бы apache понимал файлы php и phps:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps



четверг, 27 ноября 2008 г.

Почтовый сервер на *NIX

Определения MX-записей:
host -t mx www.ru
Более подробно:
nslookup -type=mx www.ru
Чем выше число MX, тем ниже его приоритет.