среда, 15 июля 2009 г.

MikroTik - Списки и группы адресов



Когда настраивается маршрутизатор, который отвечает за доступ к сети для нескольких человек, то достаточно прописать правила для конкретных адресов в firewall filter rules и на этом успокоится, но когда ip, которым нужно прописать доступ, не один десяток?

Для решения проблемы управления большим количеством ip адресов в MiktoTik Router OS есть механизм сознания списков адресов и объединения их в группы. Дальше составления правил для firewall-а идет на основании этих групп. Адреса можно добавлять как в ручную, так и динамически с помощью правил.

Рассмотрим ручное добавление адресов:

Перейдем в раздел address-list.
/ip firewall address-list

Для дальнейших примеров будем использовать описанную ранее конфигурацию сети.

  • Mikrotik - 192.168.0.1

  • PC 5 - 192.168.0.2, web, ftp, mail сервер

  • PC 4 - 192.168.0.10, Администратор, полный доступ

  • PC 1 - 192.168.0.20, Простой доступ: http, https, icq, jabber, ftp

  • PC 2 - 192.168.0.21, Простой доступ: http, https, icq, jabber, ftp

  • PC 3 - 192.168.0.22, Простой доступ: http, https, icq, jabber, ftp


Сразу видно, что адреса можно разделить на три группы доступа:

  • SERVER (192.168.0.2)

  • FULL (192.168.0.10)

  • USER (192.168.0.20, 192.168.0.21, 192.168.0.22)


Группа создается простым упоминанием о ней. Добавим адрес 192.168.0.2 в группу SERVER:

[mkt@MikroTik] /ip firewall address-list> add address="192.168.0.2/32"
list="SERVER" comment="web, ftp, mail server"

Адрес 192.168.0.10 в группу FULL:
[mkt@MikroTik] /ip firewall address-list> add address="192.168.0.10/32"
list="FULL" comment="Administrator"

Адресa 192.168.0.20, 192.168.0.21, 192.168.0.22 в группу USER:
[mkt@MikroTik] /ip firewall address-list> add address="192.168.0.20/32"
list="USER" comment="User #1"
[mkt@MikroTik] /ip firewall address-list> add address="192.168.0.21/32"
list="USER" comment="User #2"
[mkt@MikroTik] /ip firewall address-list> add address="192.168.0.22/32"
list="USER" comment="User #3"

Посмотрим, что у нас получилось:
[mkt@MikroTik] /ip firewall address-list> print
Flags: X - disabled, D - dynamic
# LIST ADDRESS
0 ;;; web, ftp, mail server
SERVER 192.168.0.2
1 ;;; Administrator
FULL 192.168.0.10
2 ;;; User #1
USER 192.168.0.20
3 ;;; User #2
USER 192.168.0.21
4 ;;; User #3
USER 192.168.0.22

Теперь можно пересмотреть наши правила, созданные раннее.
Правила для администратора, написанные ранее:
[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.10/32
action=accept comment="Allow all for admin"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.10/32
action=accept comment="Allow all for admin"

Можно переписать так:
[mkt@MikroTik] > ip firewall filter add chain=forward dst-address-list="FULL
action=accept comment="Allow all for group FULL"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address-list="FULL
action=accept comment="Allow all for group FULL"

Изменим правила сервера, созданные ранне:
[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.2/32
protocol=tcp src-port=80 action=accept comment="Allow http for server (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.2/32
protocol=tcp dst-port=80 action=accept comment="Allow http for server (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.2/32
protocol=tcp src-port=25 action=accept comment="Allow smtp for server (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.2/32
protocol=tcp dst-port=25 action=accept comment="Allow smtp for server (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.2/32
protocol=tcp src-port=110 action=accept comment="Allow pop for server (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.2/32
protocol=tcp dst-port=110 action=accept comment="Allow pop for server (out)"

На эти:
[mkt@MikroTik] > ip firewall filter add chain=forward dst-address-list="SERVER"
protocol=tcp src-port=80 action=accept comment="Allow http for group SERVER (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address-list="SERVER"
protocol=tcp dst-port=80 action=accept comment="Allow http for group SERVER (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address-list="SERVER"
protocol=tcp src-port=25 action=accept comment="Allow smtp for group SERVER (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address-list="SERVER"
protocol=tcp dst-port=25 action=accept comment="Allow smtp for group SERVER (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address-list="SERVER"
protocol=tcp src-port=110 action=accept comment="Allow pop for group SERVER (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address-list="SERVER"
protocol=tcp dst-port=110 action=accept comment="Allow pop for group SERVER (out)"

Пока что оптимизация не большая, но сейчас займемся правилами для доступа простых пользователей и вместо блока, повторяющегося 3-и раза для каждой машины:
[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.20/32
protocol=tcp src-port=80 action=accept comment="Allow http for pc1 (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.20/32
protocol=tcp dst-port=80 action=accept comment="Allow http for pc1 (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.20/32
protocol=tcp src-port=443 action=accept comment="Allow https for pc1 (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.20/32
protocol=tcp dst-port=443 action=accept comment="Allow https for pc1 (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.20/32
protocol=tcp src-port=21 action=accept comment="Allow ftp for pc1 (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.20/32
protocol=tcp dst-port=21 action=accept comment="Allow ftp for pc1 (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.20/32
protocol=tcp src-port=5190 action=accept comment="Allow icq for pc1 (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.20/32
protocol=tcp dst-port=5190 action=accept comment="Allow icq for pc1 (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.20/32
protocol=tcp src-port=5222 action=accept comment="Allow jabber for pc1 (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.20/32
protocol=tcp dst-port=5222 action=accept comment="Allow jabber for pc1 (out)"

Создадим блок правил для группы USER:
[mkt@MikroTik] > ip firewall filter add chain=forward dst-address-list="USER"
protocol=tcp src-port=80 action=accept comment="Allow http for group USER (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address-list="USER"
protocol=tcp dst-port=80 action=accept comment="Allow http for group USER (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address-list="USER"
protocol=tcp src-port=443 action=accept comment="Allow https for group USER (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address-list="USER"
protocol=tcp dst-port=443 action=accept comment="Allow https for group USER (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address-list="USER"
protocol=tcp src-port=21 action=accept comment="Allow ftp for group USER (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address-list="USER"
protocol=tcp dst-port=21 action=accept comment="Allow ftp for group USER (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address-list="USER"
protocol=tcp src-port=5190 action=accept comment="Allow icq for group USER (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address-list="USER"
protocol=tcp dst-port=5190 action=accept comment="Allow icq for group USER (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address-list="USER"
protocol=tcp src-port=5222 action=accept comment="Allow jabber for group USER (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address-list="USER"
protocol=tcp dst-port=5222 action=accept comment="Allow jabber for group USER (out)"

Теперь, когда в сети появляется новая машина, которой нужно дать права для доступ в сеть, то достаточно добавить ее в соответствующую группу адресов.
На пример у нас появляется новая машина с адресом 192.168.0.23, которой нужен доступ как и остальных пользователей группы USER, но за исключением доступа к ICQ и JABBER, ну уж очень болтливый пользователь :)
Добавим его в группу USER, а так же в новую группу BLOCK_IM
[mkt@MikroTik] > ip firewall address-list add address="192.168.0.23/32"
list="USER" comment="User #4"
[mkt@MikroTik] > ip firewall address-list add address="192.168.0.23/32"
list="BLOCK_IM" comment="User #4"

Получим:
[mkt@MikroTik] > ip firewall address-list print
Flags: X - disabled, D - dynamic
# LIST ADDRESS
0 ;;; web, ftp, mail server
SERVER 192.168.0.2
1 ;;; Administrator
FULL 192.168.0.10
2 ;;; User #1
USER 192.168.0.20
3 ;;; User #2
USER 192.168.0.21
4 ;;; User #3
USER 192.168.0.22
5 ;;; User #4
USER 192.168.0.23
6 ;;; User #4
BLOCK_IM 192.168.0.23

Теперь машина с ip адресом 192.168.0.23 уже имеет доступ, оговоренный для группы USER, но не блокируется траффик ICQ и JABBER.
Создадим дополнительные правила для группы BLOCK_IM.
[mkt@MikroTik] > ip firewall filter add chain=forward src-address-list="BLOCK_IM"
protocol=tcp dst-port=5190 action=drop comment="Drop icq for group BLOCK_IM (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address-list="BLOCK_IM"
protocol=tcp src-port=5190 action=drop comment="Drop icq for group BLOCK_IM (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address-list="BLOCK_IM"
protocol=tcp dst-port=5222 action=drop comment="Drop jabber for group BLOCK_IM (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address-list="BLOCK_IM"
protocol=tcp src-port=5222 action=drop comment="Drop jabber for group BLOCK_IM (in)"

Посмотрим, что получилось:
[mkt@MikroTik] > ip firewall filter print
Flags: X - disabled, I - invalid, D - dynamic
0 ;;; Drop invalid connection
chain=forward action=drop connection-state=invalid

1 ;;; Allow established connections
chain=forward action=accept connection-state=established

2 ;;; Allow related connections
chain=forward action=accept connection-state=related

3 ;;; Allow UDP
chain=forward action=accept protocol=udp

4 ;;; Allow ICM Ping
chain=forward action=accept protocol=icmp

5 ;;; Allow all for group FULL
chain=forward action=accept dst-address-list=FULL

6 ;;; Allow all for group FULL
chain=forward action=accept src-address-list=FULL

7 ;;; Allow http for group SERVER (in)
chain=forward action=accept protocol=tcp dst-address-list=SERVER src-port=80

8 ;;; Allow http for group SERVER (out)
chain=forward action=accept protocol=tcp src-address-list=SERVER dst-port=80

9 ;;; Allow smtp for group SERVER (in)
chain=forward action=accept protocol=tcp dst-address-list=SERVER src-port=25

10 ;;; Allow smtp for group SERVER (out)
chain=forward action=accept protocol=tcp src-address-list=SERVER dst-port=25

11 ;;; Allow pop for group SERVER (in)
chain=forward action=accept protocol=tcp dst-address-list=SERVER src-port=110

12 ;;; Allow pop for group SERVER (out)
chain=forward action=accept protocol=tcp src-address-list=SERVER dst-port=110

13 ;;; Allow http for group USER (in)
chain=forward action=accept protocol=tcp dst-address-list=USER src-port=80

14 ;;; Allow http for group USER (out)
chain=forward action=accept protocol=tcp src-address-list=USER dst-port=80

15 ;;; Allow https for group USER (in)
chain=forward action=accept protocol=tcp dst-address-list=USER src-port=443

16 ;;; Allow https for group USER (out)
chain=forward action=accept protocol=tcp src-address-list=USER dst-port=443

17 ;;; Allow ftp for group USER (in)
chain=forward action=accept protocol=tcp dst-address-list=USER src-port=21

18 ;;; Allow ftp for group USER (out)
chain=forward action=accept protocol=tcp src-address-list=USER dst-port=21

19 ;;; Allow icq for group USER (in)
chain=forward action=accept protocol=tcp dst-address-list=USER src-port=5190

20 ;;; Allow icq for group USER (out)
chain=forward action=accept protocol=tcp src-address-list=USER dst-port=5190

21 ;;; Allow jabber for group USER (in)
chain=forward action=accept protocol=tcp dst-address-list=USER src-port=5222

22 ;;; Allow jabber for group USER (out)
chain=forward action=accept protocol=tcp src-address-list=USER dst-port=5222

23 ;;; Drop all
chain=forward action=drop

24 ;;; Drop icq for group BLOCK_IM (out)
chain=forward action=drop protocol=tcp src-address-list=BLOCK_IM dst-port=5190

25 ;;; Drop icq for group BLOCK_IM (in)
chain=forward action=drop protocol=tcp dst-address-list=BLOCK_IM src-port=5190

26 ;;; Drop jabber for group BLOCK_IM (out)
chain=forward action=drop protocol=tcp src-address-list=BLOCK_IM dst-port=5222

27 ;;; Drop jabber for group BLOCK_IM (in)
chain=forward action=drop protocol=tcp dst-address-list=BLOCK_IM src-port=5222

В таком варианте блокирование траффика IM не будет т.к. правила разрешающие его 19, 20, 21, 22 стоят выше, чем блокирующие 24, 25, 26, 27. Поднимем их повыше.
[mkt@MikroTik] > ip firewall filter move 24 5
[mkt@MikroTik] > ip firewall filter move 25 5
[mkt@MikroTik] > ip firewall filter move 26 5
[mkt@MikroTik] > ip firewall filter move 27 5

Теперь все работает, что надо пропустить - пропускается, что надо заблокирова - блокируется.

Но адреса можно добавлять не только в ручную, но и динамически, для этого используется таблица Mengle.

Рассмотрим динамическое добавление адресов.

К примеру, нам необходимо заблокировать пользователей, подключающихся из вне к маршрутизатору по протоколу Telnet.
Создаем правило в таблице Mangle, которое добавляет ip адрес источника при попытке подключиться по протоколу tcp на 23 порт через интерфейс ether1, который подключен к провайдеру в группу BLOCK.
[mkt@MikroTik] > ip firewall mangle add chain=prerouting protocol=tcp dst-port=23
in-interface=ether1 action=add-src-to-address-list address-list="BLOCK"

Теперь создадим правило, которое будет блокировать ip адреса, внесенные в группу BLOCK, а заодно поднимем правило на самый верх таблицы.
[mkt@MikroTik] > ip firewall filter add chain=forward src-address-list=BLOCK
action=drop comment="Block incomming from group BLOCK"

[mkt@MikroTik] > ip firewall filter move 28 0

После того, как кто то попробует подключиться к маршрутизатору из вне, то, он автоматически будет включен в группу BLOCK, как это получилось с адресом 192.168.1.217.
[mkt@MikroTik] > ip firewall address-list print
Flags: X - disabled, D - dynamic
# LIST ADDRESS
0 ;;; web, ftp, mail server
SERVER 192.168.0.2
1 ;;; Administrator
FULL 192.168.0.10
2 ;;; User #1
USER 192.168.0.20
3 ;;; User #2
USER 192.168.0.21
4 ;;; User #3
USER 192.168.0.22
5 ;;; User #4
USER 192.168.0.23
6 ;;; User #4
BLOCK_IM 192.168.0.23
7 D BLOCK 192.168.1.217

Это ни в коем случае не "рабочее" решение по защите маршрутизатора, а просто демонстрация работы таблицы Mangle и автоматического добавления адресов в группу.

Продолжение следует.
Progg it

Читать дальше...

пятница, 3 июля 2009 г.

MS SQL Function Split

Вариант реализации функции Split, которая разрезает строку на мини-таблицу, по умолчанию в качестве разделителя используется пробел.
CREATE FUNCTION [dbo].[fn_Split](
@text nvarchar(max),
@delimiter char(1) = ' '
)

RETURNS @Strings TABLE
(
position int IDENTITY PRIMARY KEY,
value nvarchar(max)
)
AS
BEGIN
DECLARE @INDEX int
SET @INDEX = -1
WHILE (LEN(@text) > 0)
BEGIN
SET @INDEX = CHARINDEX(@delimiter , @text)
IF (@INDEX = 0) AND (LEN(@text) > 0)
BEGIN
INSERT INTO @Strings VALUES (@text)
BREAK
END
IF (@INDEX > 1)
BEGIN
INSERT INTO @Strings VALUES (LEFT(@text, @INDEX - 1))
SET @text = RIGHT(@text, (LEN(@text) - @INDEX))
END
ELSE
SET @text = RIGHT(@text, (LEN(@text) - @INDEX))
END
RETURN
END
Пример:
SELECT * FROM [dbo].[fn_Split] (
'hello;world;split'
,';'
)
Результат:

positionVALUE
11hello
22world
33split


Читать дальше...

среда, 24 июня 2009 г.

MikroTik - Начальная настройка


В этой статье я расскажу как быстро настроить RouterOS MikroTik для работы в "простом" варианте, который подойдет многим не большим офисам, домашней сети и т.д...
Итак, допустим имеем канал доступа к сети Internet, локальную сеть на 5-ть компьютеров, 1 из которых сервер, необходимо разрешить работу рядовым пользователям по стандартным протоколам (http, https, icq, jabber, ftp), для рабочего места системного администратора сделать полный доступ к сети, разрешить работу почтового, фтп и web сервера.



IP адреса локальной сети:
  • Mikrotik - 192.168.0.1
  • PC 5 - 192.168.0.2
  • PC 4 - 192.168.0.10
  • PC 1 - 192.168.0.20
  • PC 2 - 192.168.0.21
  • PC 3 - 192.168.0.22

Провайдер может предоставлять Вам как белый так и серый ip адрес, допустим, что в нашем конкретном случае это серый адрес, где то в локальной сети провайдера.



Шаг 1.
Подключимся к маршрутизатору локально на консоль, и что бы обезопасить пользователя admin от взлома отключим его, а вместо него заведем нового.

[admin@MikroTik] > use add name=mkt password=P@S#w0Rd group=full
[admin@MikroTik] > quit

заходим под новым пользователем и отключаем admin-а

[mkt@MikroTik] > user disable admin
[mkt@MikroTik] > user print
Flags: X - disabled
# NAME GROUP ADDRESS
0 X;;; system default user
admin full 0.0.0.0/0
1 mkt full 0.0.0.0/0


Шаг 2. Настройка интерфейсов.
Тут есть несколько способов, первый воспользоваться мастером, второй задать вручную.
Сперва попробуем настроить интерфейсы при помощи мастера. Набираем команду setup.

[mkt@MikroTik] > setup
Setup uses Safe Mode. It means that all changes that are made during setup are
reverted in case of error, or if

Ctrl-C is used to abort setup. To keep changes exit setup using the 'x' key.

[Safe Mode taken]
Choose options by pressing one of the letters in the left column, before dash.
Pressing 'x' will exit current

menu, pressing Enter key will select the entry that is marked by an '*'. You can
abort setup at any time by

pressing Ctrl-C.
Entries marked by '+' are already configured.
Entries marked by '-' cannot be used yet.
Entries marked by 'X' cannot be used without installing additional packages.
r - reset all router configuration
+ l - load interface driver
+ a - configure ip address and gateway
d - setup dhcp client
* s - setup dhcp server
p - setup pppoe client
t - setup pptp client
x - exit menu
your choice [press Enter to setup dhcp server]:

Нажимаем "a", в появившемся меню нажимаем "a", набираем имя первого интерфейса, указываем IP адрес.

 + a - add ip address
+ g - setup default gateway
* x - exit menu
your choice: a
enable interface: ether1
ip address/netmask: 192.168.1.116/24
#Enabling interface
/interface enable ether1
#Adding IP address
/ip address add address=192.168.1.116/24 interface=ether1 comment="added by setup"


Это будет интерфейс провайдера. Так же указываем второй интерфейс для локальной сети и адрес для него.

 + a - add ip address
+ g - setup default gateway
* x - exit menu
your choice: a
enable interface: ether2
ip address/netmask: 192.168.0.1/24
#Enabling interface
/interface enable ether2
#Adding IP address
/ip address add address=192.168.0.1/24 interface=ether2 comment="added by setup"

Теперь указываем шлюз по умолчанию, выбираем клавишей "g" и вводим адрес.

your choice: g
gateway: 192.168.1.249
#Adding default route
/ip route add dst-address=0.0.0.0/0 gateway=192.168.1.249 comment="added by setup"

Выходим из второго уровня меню (клавиша "x"), и из первого (клавиша "x"), настройки ip адресов сохранены, шлюз по умолчанию прописан.


Испробуем второй вариант настройки - ручной.



Смотрим список доступных интерфесов.


[mkt@MikroTik] > interface print 
Flags: D - dynamic, X - disabled, R - running, S - slave

# NAME TYPE MTU

0 R ether1 ether 1500

1 R ether2 ether 1500

Активируем интерфейс 0, который будет подключен к провайдеру и зададим ему ip адрес.

[mkt@MikroTik] > interface enable 0 
[mkt@MikroTik] > ip address add address=192.168.1.116/24 interface=ether1

[mkt@MikroTik] > ip address print

Flags: X - disabled, I - invalid, D - dynamic

# ADDRESS NETWORK BROADCAST INTERFACE
0 192.168.1.116/24 192.168.1.0 192.168.1.255 ether1

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

[mkt@MikroTik] > interface enable 1 
[mkt@MikroTik] > ip address add address=192.168.0.1/24 interface=ether2

[mkt@MikroTik] > ip address print

Flags: X - disabled, I - invalid, D - dynamic

# ADDRESS NETWORK BROADCAST INTERFACE
0 192.168.1.116/24 192.168.1.0 192.168.1.255 ether1
1 192.168.0.1/24 192.168.0.0 192.168.0.255 ether2


Ну и наконец добавим шлюз по умолчанию.


[mkt@MikroTik] > ip route add gateway=192.168.1.249 
[mkt@MikroTik] > ip route print

Flags: X - disabled, A - active, D - dynamic, C - connect, S - static, r - rip,
b - bgp, o - ospf, m - mme,
B - blackhole, U - unreachable, P - prohibit
# DST-ADDRESS PREF-SRC GATEWAY DISTANCE
0 A S 0.0.0.0/0 192.168.1.249 r... 1
1 ADC 192.168.0.0/24 192.168.0.1 ether2 0
2 ADC 192.168.1.0/24 192.168.1.116 ether1 0


Теперь дальнейшую настройку можно продолжить с помощью графической оболочки winbox, но коль мы начали с консоли, то пройдем весь путь до конца в консоле, а потом повторим сделанное, начиная с шага 3 в графическом интерфейсе.


Шаг 3.
Настройка DNS.

[mkt@MikroTik] > ip dns set primary-dns=208.67.222.222 secondary-dns=208.67.220.220
allow-remote-requests=yes


[mkt@MikroTik] > ip dns print

primary-dns: 208.67.222.222

secondary-dns: 208.67.220.220

allow-remote-requests: yes

max-udp-packet-size: 512

cache-size: 2048KiB

cache-max-ttl: 1w

cache-used: 5KiB


Шаг 4. Настройка доступа к сети интернет.

Сперва включаем маскардинг.

[mkt@MikroTik] > ip firewall nat add chain=srcnat action=masquerade
out-interface
=!ether2

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

[mkt@MikroTik] > ip firewall filter add chain=forward connection-state=invalid
action=drop comment="Drop invalid connection packets"


[mkt@MikroTik] > ip firewall filter add chain=forward connection-state=established
action=accept comment="Allow established connections"


[mkt@MikroTik] > ip firewall filter add chain=forward connection-state=related
action=accept comment="Allow related connections"


[mkt@MikroTik] > ip firewall filter add chain=forward protocol=udp
action=accept comment="Allow UDP"


[mkt@MikroTik] > ip firewall filter add chain forward protocol=icmp

action=accept comment="Allow ICMP Ping"

Дальше добавляем правила для машины PC4.

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.10/32
action=accept comment="Allow all for admin"


[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.10/32
ac
tion=accept comment="Allow all for admin"

Разрешаем работу сервера до протоколу http, smtp, pop.


[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.2/32
protocol=tcp src-port=80
action=accept comment="Allow http for server (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.2/32

protocol=tcp dst-port=80
action=accept comment="Allow http for server (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.2/32
protocol=tcp src-port=25
action=accept comment="Allow smtp for server (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.2/32

protocol=tcp dst-port=25
action=accept comment="Allow smtp for server (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.2/32
protocol=tcp src-port=110
action=accept comment="Allow pop for server (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.2/32

protocol=tcp dst-port=110
action=accept comment="Allow pop for server (out)"

Таким же образом задаем правила для остальных машин, разрешая им http, https, ftp, icq, jabber.

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.20/32
protocol=tcp src-port=80
action=accept comment="Allow http for pc1 (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.20/32

protocol=tcp dst-port=80
action=accept comment="Allow http for pc1 (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.20/32
protocol=tcp src-port=443
action=accept comment="Allow https for pc1 (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.20/32

protocol=tcp dst-port=443
action=accept comment="Allow https for pc1 (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.20/32
protocol=tcp src-port=21
action=accept comment="Allow ftp for pc1 (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.20/32

protocol=tcp dst-port=21
action=accept comment="Allow ftp for pc1 (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.20/32
protocol=tcp src-port=5190
action=accept comment="Allow icq for pc1 (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.20/32

protocol=tcp dst-port=5190
action=accept comment="Allow icq for pc1 (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.20/32
protocol=tcp src-port=5222
action=accept comment="Allow jabber for pc1 (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.20/32

protocol=tcp dst-port=5222
action=accept comment="Allow jabber for pc1 (out)"

Повторяем эти правила для каждой машины, если необходимо разрешить дополнительные порты, то шаблон написания, я думаю, понятен.

Ну и под конец запрещаем все остальное, что не разрешили выше.

[mkt@MikroTik] > ip firewall filter add chain=forward action=drop comment="Drop all"


Шаг 5. Входящие.

Теперь надо разрешить что бы входящие соединения по http, smtp и pop автоматически попадали бы на сервер.

[mkt@MikroTik] > ip firewall nat add chain=dstnat dst-address=192.168.1.116/32
protocol=tcp dst-port=80 action=dst-nat to-addresses=192.168.0.2 to-ports=80
comment="NAT for http"


[mkt@MikroTik] > ip firewall nat add chain=dstnat dst-address=192.168.1.116/32
protocol=tcp dst-port=25 action=dst-nat to-addresses=192.168.0.2 to-ports=25
comment="NAT for smtp"


[mkt@MikroTik] > ip firewall nat add chain=dstnat dst-address=192.168.1.116/32
protocol=tcp dst-port=110 action=dst-nat to-addresses=192.168.0.2 to-ports=110
comment="NAT for pop"


Если мы говорим про абсолютный минимум и простоту, это на этом все. Какие действия были сделаны?

  1. Были включены два интерфейса ether1 и ether2.
  2. Назначены ip адреса для интерфейсов.
  3. Назначен шлюз по умолчанию.
  4. Заданы DNS сервера.
  5. Прописаны правила для машин с неограниченным доступом.
  6. Прописаны правила для машин с ограниченным доступом по портам.
  7. Прописаны правила преобразования сетевых адресов для доступа из вне к веб и почтовому серверам.
Теперь давайте вернемся в шагу №3 и сделаем все те же действия, но уже в графической оболочке winbox, что бы ее скачать необходимо зайти в веб интерфейс mikrotik-а, так называемый webbox, и скачать с главной страницы программку.


Запускаем, указываем адрес в локальной сети, который был назначен второму интерфейсу, имя и пароль пользователя, которого завели в самом начале.


Шаг 3. Настройка DNS.

В графическом интерфейсе все не на много сложнее чем в консоле. Выбираем в основном меню раздел IP, в нем подменю DNS.


Здесь можно завадать статически dns записи, а так же просматривать что сейчас есть в кэше. Нажимаем на кнопочку Settings и указываем адреса DNS серверов.


Шаг 4. Настройка доступа к сети интернет.

Включаем маскардинг. Основное меню IP, в подменю firewall, вкладка NAT.


Что бы добавить новую запись нажимаем на плюсик. А дальше все тоже самое, что и в консоле, на вкладке General chain=srcnat, Out interface=ether2 и ставим галочку, что означает "НЕ", вкладка Action выбираем masquerade.


Приводить кучу одинаковых скришотов на одну и туже тему я не вижу смысла, а понять что все теже самые параметры, которые набираются в консоле на 100% совпадают с названиями в графическом интерфейсе думаю не сложно. По это я приведу несколько картинок с добавлением правил в firewall. Выбираем в основном меню раздел ip, в нем подпункт firewall, в появившемся окне выбираем вкладку Filter Rules. Для добавления нового графила нажимаем на плюсик.


Разрешаем UDP.

Разрешаем исходящие соединения с адреса 192.168.0.2 к любым адресам по порту назначения 25, используюя протокол tcp.

Ну и под конец запрещаем все остальное, что не разрешили выше.

Получилось что то вроде этого.


Шаг 5. Входящие.
Выбираем в основном меню раздел ip, в нем подпункт firewall, в появившемся окне выбираем вкладку Nat. Для добавления нового графила нажимаем на плюсик.

Перенаправляем все соединения, приходящие на внешний адрес 192.168.1.116 по протоколу tcp, 25 порт на локальный адрес 192.168.0.2 на порт 25.

По такому же принципу строятся все остальные правила.

Из описанного выше видно, что любое действие можно сделать как минимум двумя вариантами, разговаривать с MikroTik-ом с помощью текстовых команд или упражняться с мышкой в графическом интерфейсе. И у то и у другого метода есть свои плюсы и минусы, консоль работает быстрее даже на очень слабом канале, графическая оболочка вообще перед началом работы скачивает модули интерфейса к себе, а потом в процессе работы порождает очень даже не маленький трафик, с консолью определенно сложнее работать, но поняв комманды и принцип работы становится не так важно какой интерфейс используется для настройки. В дальнейшем я расскажу как уменьшить количесво правил, используя списки адресов, как ограничивать скорость на upload или download, как разделить трафик между несколькими провайдерами или даже как заставить одну машину работать одновременно с несколькими провайдерами.

Продолжение следует.

Progg it


Читать дальше...

понедельник, 22 июня 2009 г.

Apple keyboard + Windows

Однажды появилась у меня клавиатура Apple Keyboard aluminum, удобная, красивая, но есть определенная несовместимость в раскладке к которой обычно привыкаешь.

Основной проблемой стало полное отсутствие клавиши Insert, на ее месте располагается клавиша Fn, которая расширяет возможности функциональных клавиш и абсолютно бесполезна в Windows т.к. при нажатии на нее не передается никакой scan код. Нет привычных Print Screen или Pause/Break, зато теоретически можно с помощью дополнительных драйверов научить клавиатуру от apple быть клавиатурой от apple, т.е. уметь регулировать яркость монитора, управлять медиаплеером, громкостью, открывать лоток CD-ROMа, теоретически, потому что мне это ничего не надо, так что не будем на это терять время.

Посмотрим на клавиатуру по ближе и поймем, чего на в ней нехватает и что тут лишнее.

Клавиша открытия лотка CD-ROMa нам не интересна, не трогаем ее.
С клавишей Fn ни чего поделать нельзя, так что она просто будет занимать место на клавиатуре.
Insert перенесем на F13.
Print Screen на F14.
Break на F15 (Pause работать не будет, только комбинация Ctrl+Break).


Далее меняем местами Alt и Command, что бы было привычнее.


Ну и чуть чуть мультимедиа.
F16 - уменьшить громкость
F17 - увеличить громкость
F18 - Отключить звук (mute)
Для всех этих действий можно воспользоваться готовыми программами, на пример SharpKeys, суть их работы заключается в правке ветки реестра [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout], но некоторые действия с помощью этих программ задать не получается (на пример назначить клавише F15 действие Break).

Попробуем разобраться что же это за параметр реестра и как самому задать необходимые клавиши.

В ветви реестра
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout
есть двоичный параметр с именем "Scancode Map". Он имеет следующую структуру:
Первые 8 байт заполнены нулями 00,00,00,00,00,00,00,00
Девятый байт равен количеству клавиш, которые необходимо переназначить + 1, т.е. если надо переназначить 2-е клавиши, то девятый байт равен 03
10, 11, 12 так же заполнены нулевыми значениями
Далее необходимо определить шестнадцатеричные скан-коды клавиш, которые вы хотите переназначить. Допустим, вы хотите изменить функцию клавиши Right Ctrl на Caps Lock. Находим код Right Ctrl - 1D E0 и код Caps Lock - 3A 00. Теперь дописываем в параметр "Scancode Map" сначала значение Caps Lock, а затем значение Right Ctrl.
Затем осталось дописать в конец параметра еще четыре нулевых байта.
Для примера с переназначеним Right Ctrl на Caps Lock параметр должен выглядеть так: 00,00,00,00,00,00,00,00,02,00,00,00,3A,00,1D,E0,00,00,00,00.

Чтобы переназначить более чем одну клавишу, необходимо таким же образом просто добавлять в конец параметра пары кодов клавиш (вначале клавишу "на которую", затем клавишу "с которой"). Например, чтобы переназначить Caps Lock на Left Shift и Left Alt на Backspace одновременно, параметр должен выглядеть так: 00,00,00,00,00,00,00,00,03,00,00,00,2A,00,3A,00,0E,00,38,00,00,00,00,0 0.

Чтобы просто заблокировать клавишу, следует переназначить её на "00,00".

Чтобы изменения вступили в силу, необходимо перезагрузить компьютер. Можно переназначить клавиши и для конкретного пользователя. В этом случае параметр "Scancode Map" следует разместить в ветви HKEY_CURRENT_USER\Keyboard Layout, а для вступлений изменений в силу будет достаточно перелогиниться.

Вот некоторые кода:

e0 1c (Keypad Enter) 1c (Enter)
e0 1d (RCtrl) 1d (LCtrl)
e0 2a (fake LShift) 2a (LShift)
e0 35 (Keypad-/) 35 (/?)
e0 36 (fake RShift) 36 (RShift)
e0 37 (Ctrl-PrtScn) 37 (*/PrtScn)
e0 38 (RAlt) 38 (LAlt)
e0 46 (Ctrl-Break) 46 (ScrollLock)
e0 47 (Grey Home) 47 (Keypad-7/Home)
e0 48 (Grey Up) 48 (Keypad-8/UpArrow)
e0 49 (Grey PgUp) 49 (Keypad-9/PgUp)
e0 4b (Grey Left) 4b (Keypad-4/Left)
e0 4d (Grey Right) 4d (Keypad-6/Right)
e0 4f (Grey End) 4f (Keypad-1/End)
e0 50 (Grey Down) 50 (Keypad-2/DownArrow)
e0 51 (Grey PgDn) 51 (Keypad-3/PgDn)
e0 52 (Grey Insert) 52 (Keypad-0/Ins)
e0 53 (Grey Delete) 53 (Keypad-./Del)

e0 5b (LeftWindow)
e0 5c (RightWindow)
e0 5d (Menu)


Set-1 make/break Set-2 make/break
Power e0 5e / e0 de e0 37 / e0 f0 37
Sleep e0 5f / e0 df e0 3f / e0 f0 3f
Wake e0 63 / e0 e3 e0 5e / e0 f0 5e

Ну а решение проблемы с клавиатурой будет выглядеть так:

REGEDIT4

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,0b,00,00,00,52,e0,64,00,37,e0,65,00,\ 46,e0,66,00,5b,e0,38,00,38,00,5b,e0,5c,e0,38,e0,38,e0,5c,e0,2e,e0,67,00,30,\ e0,68,00,20,e0,69,00,00,00,00,00

Progg it

Читать дальше...

пятница, 5 июня 2009 г.

Шрифт - Andale Mono


Шрифт, который приятно видеть при написании кода.
Скачать: для Windows, для Macintosh
Читать дальше...

MikroTik - Установка



Новая версия этой статьи

После краткого обзора возможностей MikroTiK RouterOS настало время собрать тестовую площадку для дальнйших экспериментов, поддерживает два варианта установки - с загрузочного CD и установка по сети.

Установка с CD на PC

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



Скачав образ (порядка 22Мб), записываем его на диск.

Конфигурация компьютера на который будет установлена MikroTiK RouterOS ... скажем так - может быть какой угодно. По своему опыту скажу, что главное, что бы системный блок был максимально надежный. Особое внимание стоит уделить блоку питания, что бы в случае отключения-включения электроэнергии сам мог загрузиться (так что тут подойдет даже AT корпус). Для офиса (на 200 клиентов, 2 провайдера (6-ть внешних IP адресов), 2 WEB сервера, 2 почтовых сервера (POP, SMTP, IMAP), VPN сервер, FTP, статистика на NetFlow, с общей нагрузкой порядка 10Гб в день) была собрана конфигурация из Celeron 500MHz, 128Мб RAM, CF Card 1Gb, старенький ATX корпус и все это работает не затрачивая и 10% своих ресурсов. Так что решать Вам, но все же стоит ориентироваться на перечень поддерживаемого железа (особенно это касается сетевых карт).

Указываем в BIOS загрузку с диска.


Загружаемся.


Отмечаем компоненты, которые нас интересуют, и нажимем кнопочку I для начала установки.

Если это не установка с нуля, а обновление, то на вопрос "Сохранять ли старую конфигурации?" лучше ответить "Y".

ВНИМАНИЕ! Все данные с диска будут уничтожены! Продолжаем?


Форматируется диск и устанавливаются компоненты, вся процедура занимает максимум пару минут (все зависит от размера жесткого диска и времени форматирования).

Установка завершена, перегружаемся.

Заходим в BIOS и отключаем загрузку с CD-ROM, а лучше вообще снимаем его как ненужное устройство.

Пара минут на первоначальную загрузку и ... слышим веселое "би-бибик", сигнализирующее об успешной загрузке.
Логин admin, пароль оставляем пустым.


На экрне видим сообщение из которого становится понятно, что наша установка будет работать 24 часа, для получения следующего уровня лицензии необходимо использовать software id. О различных уровнях лиценции можно прочитать на сайте производителя.

Установка по сети на PC

Для установки по сети понадобится утилита для удаленной установки (netinstall) и набор пакетов, скачать можно со страницы загрузки.


Распаковываем утилиту netinstall и пакеты обновлений в папку на диске.

Запускаем утилиту netinstall, нажимаем на кнопку "net booting" и включаем сервер загрузки по сети, указываем ip адрес клиента.


Теперь переходим к настройке клиента, заходим в BIOS и устанавливаем загрузку по сети.


Начнется загрузка...


При этом в утилите netinstall повляется информация о том, что устройство готово к установке (см 1). Автоматически определяется software id для получения лицензии (см 2). Если есть возможность установить этот ключ сразу, то он выбирается (см 3). Если есть необходимость сохранить конфигурацию, которая была ранее, то ставим галочку (см 4) или же указываем вручную какй IP адрес необходимо назначить адаптеру с которого идет загрузка, что бы в последствии через него сделать настройку. При необходимости можно указать конфигурационный скрипт (backup) вручную (см 5). В разделе Packages выбираем папку, куда распакованы пакеты и отмечаем те пакеты, которые необходимо установить.


Нажимаем кнопку install, начинается процесс установки, так же этот процесс видно на клиенте, который загрузился по сети.




Установка занимает чуть больше времени, чем установка с CD.
По завершению устаноки желательно отключить в BIOS загрузку по сети, оставив загрузку с жесткого диска.

Так же с помощью утилиты netinstall можено подготовить загрузочкую карту памяти для RouterBoard устройств.
Подключаем карту памяти через картридер, выбираем нужный диск в утилите netinstall, в разделе Packages выбираем набор пакетов, нажимаем кнопку "make floppy".


Ну и напоследок фото моего страшилища ... в смысле моего микротика (одного из 12 :))



Новая версия этой статьи

Продолжение следует.

Progg it

Читать дальше...