Теперь необходимо настроить защиту. Предполагаем, что защищаться мы будет только от "внешних врагов". Исходящие разрешены, входящие запрещены...пока. Создаём файл с таким содержанием:
#!/bin/sh echo "1" > /proc/sys/net/ipv4/ip_forward /sbin/iptables -F /sbin/iptables -t nat -F /sbin/iptables -P INPUT DROP /sbin/iptables -P OUTPUT DROP /sbin/iptables -P FORWARD DROP /sbin/iptables -A INPUT -i lo -j ACCEPT /sbin/iptables -A OUTPUT -o lo -j ACCEPT /sbin/iptables -A INPUT -i eth0 -j ACCEPT /sbin/iptables -A OUTPUT -o eth0 -j ACCEPT /sbin/iptables -A INPUT -i eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT ###/sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT ### open ssh ###/sbin/iptables -A INPUT -s XXX.XXX.XXX.XXX -j DROP #### drop IP ###/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT ### open http /sbin/iptables -A OUTPUT -o eth1 -j ACCEPT ### открыть в NAT #/sbin/iptables -A FORWARD -d 192.168.0.0/24 -i eth1 -j ACCEPT #/sbin/iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE #/sbin/iptables -A FORWARD -s 192.168.0.62 -o eth1 -j ACCEPT # даем доступ в интернет компьютеру с адресом 192.168.0.62 # иногда требуется например для активации Photoshop.сохраняем, назвав его например start_iptables. Делаем его исполняемым. Можно в mc "F9" -> "Файл" -> "Права (расширенные)". И добавляем его на запуск в файл /etc/rc.d/rc.local. Файл "положить" можно в тот же каталог. (для удобства)
iptables-save > /etc/sysconfig/iptablesТеперь после перезагрузки сервера, iptables будет восстанавливать правила.
### открыть в NAT /sbin/iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth1 -j MASQUERADE /sbin/iptables -A FORWARD -i eth0 -o eth1 -j ACCEPTПерегрузим компьютер, чтобы убедиться, что сетевые карты работают и защита включена:
[root@server /]# /sbin/iptables -L Chain INPUT (policy DROP) target prot opt source destination ACCEPT 0 -- anywhere anywhere ACCEPT 0 -- anywhere anywhere ACCEPT 0 -- anywhere anywhere state RELATED,ESTABLISHED Chain FORWARD (policy DROP) target prot opt source destination Chain OUTPUT (policy DROP) target prot opt source destination ACCEPT 0 -- anywhere anywhere ACCEPT 0 -- anywhere anywhere ACCEPT 0 -- anywhere anywhereТеперь можно и попробовать работу интернета. Предполагается, что модем настроен. После его включения попробовать ping www.mail.ru
Дальше будем запускать и настраивать службы DNS и DHCP. Сделаем так, чтобы при получении динамического адреса компьютером, он заносился в таблицу DNS. Проверяем файл /etc/sysconfig/network. Там должно быть две строчки - NETWORKING=yes и HOSTNAME=имя сервера. Допустим имя нашего сервера - server.corp . corp - как бы наш домен. Сначала настроим DNS. Предполагается, что пакет bind установлен. Обязательно проверить права доступа на каталог /var/named и его содержимое! "владелец" - named. Сначала сгенерируем ключ, чтобы обеспечить возможность обновление зон.
dnssec-keygen -a HMAC-MD5 -b 128 -n USER rndckeyПолучим файл примерно с таким содержимым:
rndckey. IN KEY 0 3 157 vox+MkM0yztMEHMqIw1mXe==Ключ vox+MkM0yztMEHMqIw1mXe== надо внести в named.conf и dhcp.conf.
options { forwarders { 84.XXX.XXX.XX1; 84.XXX.XXX.XX2; 192.168.0.1; 127.0.0.1; }; # 84.XXX - адреса DNS-серверов нашего провайдера forward first; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; listen-on {192.168.0.1; localhost;}; allow-transfer { 192.168.0.113; }; # это вторичный DNS; или { none; }, если его нет }; key rndckey { algorithm HMAC-MD5.SIG-ALG.REG.INT; secret "vox+MkM0yztMEHMqIw1mXe=="; }; #Добавляем прямую и обратную зоны zone "corp" { type master; file "corp.zone"; # файл описания прямой зоны (преобразование имя -> IP-адрес) allow-update { key rndckey; }; }; zone "168.192.in-addr.arpa" { type master; file "corp.local"; # файл описания обратной зоны (преобразование IP-адрес -> имя) allow-update { key rndckey; }; };Затем создаем эти два файла corp.zone и corp.local в каталоге /var/named/chroot/var/named. Возможно потребуется создать ссылки на них в каталоге /var/named (зависит от версии bind).
$ORIGIN . $TTL 86400 ; 1 day corp IN SOA server.corp. root.server.corp. ( 2012020221 ; serial 600 ; refresh (10 minutes) 60 ; retry (1 minute) 7200 ; expire (2 hours) 3600 ; minimum (1 hour) ) NS server.corp. NS server2.corp. # наш второй DNS - сервер MX 10 server.corp. # наш почтовый сервер $ORIGIN corp. $TTL 86400 ; 1 day server A 192.168.0.1 server2 A 192.168.0.113 electron A 192.168.0.2 # наш пользователь который должен иметь постоянный IP prog A 192.168.0.3 # тоже самое
$ORIGIN . $TTL 86400 ; 1 day 168.192.in-addr.arpa IN SOA server.corp. root.server.corp. ( 2012020238 ; serial 600 ; refresh (10 minutes) 60 ; retry (1 minute) 7200 ; expire (2 hours) 3600 ; minimum (1 hour) ) NS server.corp. NS server2.corp. $ORIGIN 0.168.192.in-addr.arpa. 1 PTR server.corp. # точка в конце обязательна! 113 PTR server2.corp. 2 PTR electron.corp. 3 PTR prog.corp.Если в сети должен функционировать домен на основе AD Windows 2000, 2003, 2008 (например имя сервера Win-serv-2008 (192.168.0.50), имя домена corp), нужно добавить еще несколько зон:
zone "corp" { type master; file "corp.zone"; allow-update { Win-serv-2008; key rndckey; }; // сюда добавляем возможность обновлять зоны AD }; zone "168.192.in-addr.arpa" { type master; file "corp.local"; allow-update { Win-serv-2008; key rndckey; }; // сюда добавляем возможность обновлять зоны AD }; ### for AD 2008 acl "Win-serv-2008" { 192.168.0.50; // адрес сервера AD (нужно также внести записи A и PTR в corp.local и corp.zone) }; zone "_msdcs.corp" { type master; allow-update {Win-serv-2008;}; check-names ignore; notify yes; file "_msdcs.corp"; }; zone "_sites.corp" { type master; allow-update {Win-serv-2008;}; check-names ignore; notify yes; file "_sites.corp"; }; zone "_tcp.corp" { type master; allow-update {Win-serv-2008;}; check-names ignore; notify yes; file "_tcp.corp"; }; zone "_udp.corp" { type master; allow-update {Win-serv-2008;}; check-names ignore; notify yes; file "_udp.corp"; }; zone "DomainDnsZones.corp" { type master; allow-update {Win-serv-2008;}; check-names ignore; notify yes; file "DomainDnsZones.corp"; }; zone "ForestDnsZones.corp" { type master; allow-update {Win-serv-2008;}; check-names ignore; notify yes; file "ForestDnsZones.corp"; };Создаем файлы зон:
$ORIGIN . $TTL 86400 ; 1 day DomainDnsZones.corp IN SOA server.corp. root.corp. ( 2012020200 ; serial 28800 ; refresh (8 hours) 7200 ; retry (2 hours) 2419200 ; expire (4 weeks) 86400 ; minimum (1 day) ) NS server.corp. $ORIGIN DomainDnsZones.corp.ForestDnsZones.corp
$ORIGIN . $TTL 86400 ; 1 day ForestDnsZones.corp IN SOA server.corp. root.corp. ( 2012020200 ; serial 28800 ; refresh (8 hours) 7200 ; retry (2 hours) 2419200 ; expire (4 weeks) 86400 ; minimum (1 day) ) NS server.corp. $ORIGIN ForestDnsZones.corp._msdcs.corp
$ORIGIN . $TTL 86400 ; 1 day _msdcs.corp IN SOA server.corp. root.corp. ( 2012020210 ; serial 28800 ; refresh (8 hours) 7200 ; retry (2 hours) 2419200 ; expire (4 weeks) 86400 ; minimum (1 day) ) NS server.corp. $ORIGIN _msdcs.corp._sites.corp
$ORIGIN . $TTL 86400 ; 1 day _sites.corp IN SOA server.corp. root.corp. ( 2012020204 ; serial 28800 ; refresh (8 hours) 7200 ; retry (2 hours) 2419200 ; expire (4 weeks) 86400 ; minimum (1 day) ) NS server.corp. $ORIGIN _tcp.Default-First-Site-Name._sites.corp._tcp.corp
$ORIGIN . $TTL 86400 ; 1 day _tcp.corp IN SOA server.corp. root.corp. ( 2012020204 ; serial 28800 ; refresh (8 hours) 7200 ; retry (2 hours) 2419200 ; expire (4 weeks) 86400 ; minimum (1 day) ) NS server.corp. $ORIGIN _tcp.corp._udp.corp
$ORIGIN . $TTL 86400 ; 1 day _udp.corp IN SOA server.corp. root.corp. ( 2012020201 ; serial 28800 ; refresh (8 hours) 7200 ; retry (2 hours) 2419200 ; expire (4 weeks) 86400 ; minimum (1 day) ) NS server.corp. $ORIGIN _udp.corp.
Далее настроим DHCP, для этого редактируем /etc/dhcpd.conf, внося наши данные о сети
ddns-update-style interim; authoritative; option netbios-scope ""; ignore client-updates; option subnet-mask 255.255.255.0; option domain-name "corp"; option domain-name-servers 192.168.0.1, 192.168.0.113; # имена DNS-серверов option time-offset -18000; # Eastern Standard Time option netbios-name-servers 192.168.0.1; # для windows машин option netbios-node-type 8; option ntp-servers 192.168.0.1; # сервер точного времени (если развернем) key rndckey { algorithm HMAC-MD5; secret vox+MkM0yztMEHMqIw1mXe==; } zone 168.192.in-addr.arpa. { primary 192.168.0.1 ; key "rndckey" ; } zone corp. { primary 192.168.0.1 ; key "rndckey" ; } subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.2 192.168.0.110; # Выделяем диапазон адресов range 192.168.0.114 192.168.0.240; ddns-updates on; ddns-domainname "corp"; ddns-rev-domainname "in-addr.arpa"; default-lease-time 7200; max-lease-time 10800; use-host-decl-names true; host electron.corp { # Эти компьютеры будут получать фиксированные адреса hardware ethernet 00:AD:C9:3A:B0:C9; # по MAC-адресу сетевой карты fixed-address 192.168.0.2; } host prog.corp { hardware ethernet 00:AD:C8:4A:B0:A9; fixed-address 192.168.0.3; } }
После старта этих служб можно опробовать их работу. В windows машине установить: получение динамического адреса. На значке сетевого соединения должна
появиться надпись "Получение сетевого адреса" и затем "Получено". В терминальном окне попробовать : ping server.corp . Пингование будет говорить о успешной работе
DNS. Также опробовать работу DNS можно командой nslookup. Например nslookup server.corp. Работает эта команда и в Windows и в Linux. Она выдаёт IP адреса хоста.
В файлах corp.zone и corp.local должны появится записи -
corp.zone: comp1 A 192.168.0.35 TXT "31f46044ffe806bcfa2f798b5bf55e53f9" corp.local: 35 PTR comp1.corp.Значит связка DNS и DHCP работают.
Теперь настроим раздачу интернета с помощбю Squid:
Правим squid.confhttp_port 8888 # порт прокси сервера, его вбивать в браузере клиента hierarchy_stoplist cgi-bin ? acl QUERY urlpath_regex cgi-bin \? no_cache deny QUERY cache_mem 512 MB cache_dir ufs /var/spool/squid 600 16 256 cache_access_log /var/log/squid/access.log cache_log /var/log/squid/cache.log cache_store_log /var/log/squid/store.log auth_param basic children 5 auth_param basic realm Squid proxy-caching web server auth_param basic credentialsttl 2 hours refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern . 0 20% 4320 acl all src 0.0.0.0/0.0.0.0 acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl electronik src 192.168.0.2/255.255.255.255 # описываем пользователя, который имеет доступ в интернет acl programmer src 192.168.0.3/255.255.255.255 acl to_localhost dst 127.0.0.0/8 acl SSL_ports port 443 563 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 563 # https, snews 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 acl piktime time MTWHF 8:00-16:55 # описываем время работы в интернете acl badfiles urlpath_regex "/etc/squid/badfiles.txt" # здесь перечисляем, какие файлы нельзя закачивать (по расширению) acl porn url_regex "/etc/squid/sites.txt" # в этом файле нехорошие сайты ################## acl nobanners src 0/0 acl banners url_regex "/etc/squid/ba" # в этом файле перечисленны возможные баннеры (для их резки) deny_info http://server.corp/squid/empty.gif banners # если у нас будет веб-сервер, на него выложить empty.gif, чтобы ################## # заменять баннеры на страницах. #deny_info ERR_NO_PORNO porn # если пользователь захочет попасть на нехороший сайт, он увидит стандартную запрещающую страницу deny_info http://server.corp/index1.html porn # или заготовленную нами страницу #deny_info http://maksim992.narod.ru/links2.html porn # или переведём его на нужную страницу в интернете http_access deny electronik porn # применяем к пользователю фильтр porn (нехорошие сайты) http_access deny electronik badfiles # фильтр закачки файлов http_access deny programmer porn #http_access deny programmer badfiles # программист может закачивать все файлы. ############################### http_access deny nobanners banners ############################### http_access allow electronik piktime # разрешаем работу в интернете и ограничиваем пользователя рабочим временем http_access allow programmer # разрешаем работу в интернете http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localhost http_access deny all http_reply_access allow all icp_access allow all ftp_user anonymous@mail.ru cache_mgr root@server.corp visible_hostname server coredump_dir /var/spool/squidДаём команду:
squid -zЭто мы создали дисковый кэш (необходимо при первом пуске!). Запускаем службу squid:
service squid startУ пользователя прописываем в браузере адрес прокси и порт. Примеры файлов ba и badfiles.txt можно скачать тут ba, и тут badfiles.txt