Настройка Squid с поддержкой ntlm
Материал из Gentoo Linux Wiki
- Вернуться в раздел руководства
Содержание |
[править] Подготовка необходимых пакетов
Пожалуйста приведите эту статью в соответствиe с wiki разметкой, и затем удалите {{Wikify}} из текста статьи
- Для реализации данной задачи нам понадобятся следующие пакеты:
emerge -av sys-apps/net-tools emerge -av net-dns/bind-tools emerge -av app-crypt/mit-krb5 USE="kerberos ldap winbind" emerge -av net-fs/samba USE="ldap pam snmp ssl" emerge -av \>=net-proxy/squid-2.6
- Для нормальной работы samba необходимо указать USE="kerberos ldap" и собирать её после mit-krb5, только тогда будет нормально работать winbind. Со squid примерно тоже самое, только в моем описании версия не должна быть ниже 2.6 у squid
[править] SQUID И АВТОРИЗАЦИЯ ПОЛЬЗОВАТЕЛЕЙ В AD
Очень часто в средних и крупных организациях используют AD (здесь и далее AD - Active Directory). Но, как правило, на шлюзах ставят unix системы freebsd/linux и т.п. Для выхода в интернет из локальной сети используют две технологии: NAT (Network Adress Translation) и прокси сервер. Для ограничения доступа к прокси серверу необходимо настроить аутентификацию пользователей. Squid поддерживает очень много схем аутентификации, но при наличии AD самым разумным и оптимальным было бы сделать так, чтобы squid брал информацию прямо из AD. При таком методе мы получаем единое хранилище учетных записей. При большом количестве пользователей 50 и более это очень удобно и эффективно. Так как нам не надо заводить для каждого пользователя отдельную учетную запись на шлюзе.
- ИСХОДНЫЕ ДАННЫЕ
Контроллер домена - windows 2000 server SP4, Native mode. (2003 sp1) 10.0.0.0/24 - наша локальная сеть. 10.0.0.1 - ip контроллера домена. 10.0.0.10 - внутренний ip шлюза. # emerge-webrsync # и поехали :)
[править] mit-krb5
- Настроим mit-krb5:
cat /etc/krb5.conf
[libdefaults]
default_realm = YOURDOMAIN.DOM.DOM
# Еще можно и:
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
[realms]
HERITAGE.MSK.RU = {
kdc = YOURPDC.YOURDOMAIN.DOM.DOM
# Опять же не плохо бы еще:
admin_server = YOURPDC.YOURDOMAIN.DOM.DOM
default_domain = YOURDOMAIN.DOM.DOM
}
# Также можно еще и секцию добавить:
[domain_realm]
.yourdomain.dom.dom = YOURDOMAIN.DOM.DOM
yourdomain.dom.dom = YOURDOMAIN.DOM.DOM
# И, конечно, никуда без логов
[logging]
default = FILE:/var/log/krb/krb5/krb5libs.log
kdc = FILE:/var/log/krb/krb5/krb5kdc.log
admin_server = FILE:/var/log/krb/krb5/kadmind.log
- Небольшое примечание, если какие-то проблемы:
Можно попробовать сделать "kdestroy" не только под root, но и под вашим пользователем, далее kinit (под пользователем у меня ничего не спрашивал, и отработал на ура), под root - "kinit YOUR_DOMAIN_ADMIN_USERNAME@YOURDOMAIN.DOM.DOM" - только так и отработало.
[править] SAMBA
- Итак, начнем по порядку.
Сделаем не просто squid, но и доступ на samba шары по учеткам из AD (точнее возможность доступа по учеткам – более подробно – в другой статье)
- Хорошо бы посмотреть в /var/log/portage/net-fs\:samba-3.0.24\:200*-*.log (в общем в вашем логе emerg'a samba) следующие строчки
... checking for LDAP support... yes ... checking whether LDAP support is used... yes checking for Active Directory and krb5 support... yes ... checking whether Active Directory and krb5 support is used... yes ...
- Создаем конфигурационный файл и настраиваем самбу
# cd /etc/samba/ # cp smb.conf.default smb.conf #======================= Global Settings ======================= [global] # netbios имя домена workgroup = YOURDOMAIN # Строка комментария сервера server string = Squid with LDAP auth # Режим безопасности, в нашем случае ads security = ads # Разрешаем доступ только с нашей сети hosts allow = 10.0.0.127. # расположение лог файла и его размер log file = /var/log/samba/samba.log max log size = 500 # Здесь необходимо указать dns имя или ip контроллера домена, # если указываете dns имя необходимо убедиться, что разрешение # имен работает правильно password server = yourpdc.yourdomain.dom # dns имя Active Directory realm = yourdomain.dom # Тип хранилища. passdb backend = tdbsam # Сетевые настройки. socket options = TCP_NODELAY # Указываем, что самба не является PDC local master = no domain master = no preferred master = no domain logons = no os level = 0 # Настройка кириллицы display charset = UTF-8 unix charset = UTF-8 dos charset = cp866 # Использовать шифрованные пароли encrypt passwords = yes # Настройки winbind winbind use default domain = no winbind uid = 10000-20000 winbind gid = 10000-20000 winbind enum users = yes winbind enum groups = yes
- Теперь необходимо изменить nsswitch.conf, чтобы winbind смог получать информацию из AD
# cat /etc/nsswitch.conf | grep winbind group: files winbind passwd: files winbind shadow: files winbind
- Проверяем работу dns и производим синхронизацию времени
# nslookup yourpdc.yourdomain.dom Server: 10.0.0.1 Address: 10.0.0.1#53 Name: yourpdc.yourdomain.dom Address: 10.0.0.1
# net time set Tue Jan 31 22:04:51 EET 2006
Пользователь DomainAdminAccount - должен обладать правом добавлять машины в домен. Естественно вы должны использовать своего пользователя. Во избежание проблем настоятельно рекомендую не использовать русские символы в логине и пароле. Как видно из сообщения машина добавлена в домен. Для того, чтобы убедиться в этом необходимо открыть оснастку - "Active Directory - пользователи и компьютеры" Настраиваем запуск winbind вместе с системой, а также включаем режим отладки, облегчающий найти и устранить неисправность.
# winbindd -i # интерактивный режим – очень хорошо видны все проблемы (на крайний случай -d 9)
- Во время настройки – лучше всего использовать интерактивный режим, после – можно и в скрипт запустить.
- Теперь у нас все готово для ввода машины в домен,но, не помню где прочитал - но автору респект! Когда отрабатывает "net ads join" - имя разрешается по "/etc/hosts" !!! (Тем не менее надо проверить корректность отображения вашего хоста на серверах DNS) !!! В результате ошибка:
Using short domain name -- YOURDOMAIN Failed to set servicePrincipalNames. Please ensure that the DNS domain of this server matches the AD domain, Or rejoin with using Domain Admin credentials. Disabled account for 'YOURHOST' in realm 'YOURDOMAIN.DOM.DOM'
После указания в /etc/hosts
10.0.0.YOURIP yourhost.yourdomain.dom.dom yourhost
Все отработало, как в примере ниже:
# net ads join -U DomainAdminAccount%123456 Using short domain name -- YOURDOMAIN Joined 'GentooRouter' to realm 'YOURDOMAIN.DOM'
Возможно, эта ошибка возникает из-за отсутствия вашего хоста в виде записи на DNS сервере - не проверял, но если кто знает точно - напишите пожалуйста ...
Для работы данной связки запускать smbd и nmbd нет необходимости..
- Не забудьте выставить права
# chown -R root:squid /var/cache/samba/winbindd_privileged/ # chmod -R 750 /var/cache/samba/winbindd_privileged/
- На время тестирования и поиска неисправностей лучше указывать большой уровень информативности 7-9. При этом уровне, в логах будет очень много полезной информации, которая в 95% случаев поможет найти ошибку. После того, как вы полнсотью настроили данную связку, отладку можно вообще выключить или задать самый маленький уровень информативности - 1.
- Теперь для проверки работоспособности winbind проведем ряд тестов. Для этого воспользуемся программой wbinfo
# wbinfo -p Ping to winbindd succeeded on fd 4 # wbinfo -t checking the trust secret via RPC calls succeeded # wbinfo -u YOURDOMAIN\DomainAdminAccount YOURDOMAIN\администратор YOURDOMAIN\гость YOURDOMAIN\tsinternetuser YOURDOMAIN\krbtgt YOURDOMAIN\freebsd$ YOURDOMAIN\server$ # wbinfo -g YOURDOMAIN\компьютеры домена YOURDOMAIN\контроллеры домена YOURDOMAIN\администраторы схемы YOURDOMAIN\администраторы предприятия YOURDOMAIN\издатели сертификатов YOURDOMAIN\администраторы домена YOURDOMAIN\пользователи домена YOURDOMAIN\гости домена YOURDOMAIN\владельцы-создатели групповой политики YOURDOMAIN\серверы ras и ias YOURDOMAIN\dnsadmins YOURDOMAIN\dnsupdateproxy
- Если у вас такие же результаты, то значит все нормально и winbind работает правильно. Теперь просмотрим информацию о домене и AD.
# wbinfo -D YOURDOMAIN Name : YOURDOMAIN Alt_Name : YOURDOMAIN.DOM SID : S-1-5-21-220523388-842925246-839522115 Active Directory : Yes Native : Yes Primary : Yes Sequence : 3143 # net ads info LDAP server: 10.0.0.1 LDAP server name: yourpdc Realm: YOURDOMAIN.DOM Bind Path: dc=YOURDOMAIN,dc=DOM LDAP port: 389 Server time: Tue, 31 Jan 2006 22:34:27 EET KDC server: 10.0.0.1 Server time offset: -7
- Проверим аутентификацию
# wbinfo --authenticate=YOURDOMAIN\\DomainAdminAccount%123456 plaintext password authentication succeeded challenge/response password authentication succeeded
- Проверим утилитой id доменного пользователя
# id YOURDOMAIN\\DomainAdminAccount uid=10000(YOURDOMAIN\domoradova) gid=10005(YOURDOMAIN\администраторы домена) groups=10005(YOURDOMAIN\администраторы домена), 10006(YOURDOMAIN\пользователи домена)
- Если у вас такие же результаты, то поздравляю, самбу мы настроили. Теперь осталось только указать пользователя, от имени которого будет проходить аутентификация.
# wbinfo --set-auth-user=YOURDOMAIN\\DomainAdminAccount%123456 # wbinfo --get-auth-user YOURDOMAIN\DomainAdminAccoun%123456
Теперь добавляем winbind в автозагрузку:
| Файл: /etc/conf.d/samba |
... daemon_list="smbd nmbd winbind" ... |
И стартуем самбу:
| Code: Запуск samba |
# /etc/init.d/samba start * samba -> start: smbd ... [ ok ] * samba -> start: nmbd ... [ ok ] * samba -> start: winbind ... [ ok ] |
- Дополнительные ресурсы:
- http://us1.samba.org/samba/docs/man/domain-member.html#ads-member
- http://us1.samba.org/samba/docs/man/winbind.html
- http://linuxquestions.org/questions/history/161506
- http://www.mail-archive.com/samba%40lists.samba.org/msg36617.html
[править] SQUID
- Настраиваем squid:
Производим минимальную настройку squid. Все изменения необходимо вводить после соответствующих тегов.
# # /etc/squid/squid.conf # # TAG: http_port # Указываем squid на каком порту и интерфейсе он будет работать. Именно эти # параметры необходимо будет указывать в настройках интернет проводника. http_port 10.0.0.10:8080 # TAG: maximum_object_size_in_memory (bytes) # Объекты больше этого размера не будут сохраняться в памяти. # По умолчанию 8КБ что очень мало на текущий момент, т.к. средний объем # web странички ~75-100 КБ maximum_object_size_in_memory 102400 # TAG: hierarchy_stoplist hierarchy_stoplist cgi-bin ? # TAG: cache acl QUERY urlpath_regex cgi-bin \? cache deny QUERY # TAG: broken_vary_encoding acl apache rep_header Server ^Apache broken_vary_encoding allow apache # TAG: cache_dir # Объем кеша и его месторасположение. Объем задается в мегабайтах. (4096 ~ 4Гб) cache_dir ufs /usr/local/squid/cache 4096 16 256 # TAG: access_log # Этот файл содержит log активности клиентов со строчками каждого HTTP или ICP запроса access_log /var/log/squid/access.log squid # TAG: refresh_pattern # Выражения, контролирующие обновления страниц refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern . 0 20% 4320 # TAG: icp_access # Разрешает или запрещает доступ к ICP порту, основываясь на листе контроля icp_access allow all # TAG: forwarded_for on|off # Если включено, Squid будет добавлять ваш IP адрес или имя в HTTP запрос, # который перенаправляет forwarded_for off # TAG: coredump_dir # В стандартных настройках, Squid оставляет файл дампа ядра в директории, откуда стартует # Если вы установите 'coredump_dir' в директорию, которая существует Squid # сделает chdir() в эту директорию во время старта и дамп ядра останется там. coredump_dir /var/cache/squid # TAG: dns_nameservers # Здесь необходимо указать днс сервер(а). В принципе если ничего не указывать, # то squid автоматически добавит сервер(а), которые указаны в /etc/resolv.conf # Я указал адрес самого сервера, т.к. у меня на нем работает кеширующий днс. # Если у вас нет своего днс сервера, то необходимо указывать днс провайдера. dns_nameservers 212.45.2.5 10.0.0.1 # TAG: auth_param # Здесь мы указываем squid как следуею производить аутентификацию и настраиваем # соответствущие схемы аутентифиуации. Внимание: порядок описания схем имеет # значение, поэтому первой должна идти ntlm аутентификация. # C помощью таких настроек мы разрешили доступ к прокси серверу только для # пользователей группы InternetUsers. Если нам необходимо закрыть доступ # определенному человеку, мы просто удалим его из группы InternetUsers. auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp --require-membership-of=YOURDOMAIN\\InternetUsers auth_param ntlm children 5 auth_param ntlm keep_alive on auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic --require-membership-of=YOURDOMAIN\\InternetUsers auth_param basic children 5 auth_param basic realm Squid proxy-caching web server auth_param basic credentialsttl 2 hours auth_param basic casesensitive off # TAG: acl # ACL - Access Control List. Списки доступа к нашему прокси серверу. # Здесь мы указываем кто имеет право, а кто нет, использовать наш прокси. # ACL очень гибкое и мощное средство разграничения прав, но лично я для этих # целей использую редиректор squidGuard. # Разрешаем использовать наш прокси только прошедшим авторизацию. 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 to_localhost dst 127.0.0.0/8 acl YOURDOMAIN proxy_auth REQUIRED acl SSL_ports port 443 acl purge method PURGE acl CONNECT method CONNECT # TAG: cache_effective_user # Пользователь и группа, от которых работает squid cache_effective_user squid # TAG: cache_effective_group cache_effective_group squid # TAG: http_access # Разрешает или запрещает доступ, основываясь на листе доступа http_access allow manager localhost YOURDOMAIN http_access deny manager http_access allow purge localhost http_access deny purge http_access allow YOURDOMAIN http_access allow localhost http_access deny all http_reply_access allow all # TAG: http_reply_access # Разрешает ответы клиенту. Это дополнение к http_access. http_reply_access allow all # TAG: visible_hostname # Данное имя будет указываться в различных сообщениях (об ошибках и т.п.) # По умолчанию будет подставляться значение, возвращаемое функцией gethostname() visible_hostname gentoorouter.yourdomain.dom
Это лишь минимальная настройка, на самом деле, squid имеет очень много параметров конфигурации. К счастью squid.conf имеет очень хорошие комментарии к каждому из параметров.
О том, как настроить squidGuard читаем здесь http://turbogaz.kharkov-ua.com/unix/www/squidGuard.php Если вы впервый раз запускаете squid, то перед запуском необходимо создать иерархию папок для кеша. Для этого запускаем squid со следующими ключами:
# squid -D -d 3 -z 2006/03/19 17:50:02| Creating Swap Directories
- Ну а теперь настало время проверить нашу связку и добавить скрипт запуска.
rc-update add winbindd default
- Запускаем squid и смотрим логи
# /etc/init.d/squid start Starting squid.
# cat /var/log/squid/cache.log 2006/03/19 17:59:14| Starting Squid Cache version 2.6.STABLE7 for i386-portbld-freebsd5.4... 2006/03/19 17:59:14| Process ID 72232 2006/03/19 17:59:14| With 7296 file descriptors available 2006/03/19 17:59:14| DNS Socket created at 0.0.0.0, port 50201, FD 5 2006/03/19 17:59:14| Adding nameserver 192.168.127.230 from squid.conf 2006/03/19 17:59:14| helperStatefulOpenServers: Starting 5 'ntlm_auth' processes 2006/03/19 17:59:14| helperOpenServers: Starting 5 'ntlm_auth' processes 2006/03/19 17:59:14| User-Agent logging is disabled. 2006/03/19 17:59:14| Unlinkd pipe opened on FD 10 2006/03/19 17:59:14| Swap maxSize 4194304 KB, estimated 322638 objects 2006/03/19 17:59:14| Target number of buckets: 393 2006/03/19 17:59:14| Using 16384 Store buckets 2006/03/19 17:59:14| Max Mem size: 8192 KB 2006/03/19 17:59:14| Max Swap size: 102400 KB 2006/03/19 17:59:14| Local cache digest enabled; rebuild/rewrite every 3600 sec 2006/03/19 17:59:14| Rebuilding storage in /usr/local/squid/cache (DIRTY) 2006/03/19 17:59:14| Using Least Load store dir selection 2006/03/19 17:59:14| Set Current Directory to /usr/local/squid/cache 2006/03/19 17:59:14| Loaded Icons. 2006/03/19 17:59:14| Accepting HTTP connections at 192.168.127.230, port 3128,FD 11. 2006/03/19 17:59:14| Accepting ICP messages at 0.0.0.0, port 3130, FD 12. 2006/03/19 17:59:14| Accepting HTCP messages on port 4827, FD 13. 2006/03/19 17:59:14| Accepting SNMP messages on port 3401, FD 14. 2006/03/19 17:59:14| Ready to serve requests. 2006/03/19 17:59:20| Done scanning /usr/local/squid/cache (0 entries) 2006/03/19 17:59:20| Finished rebuilding storage from disk. 2006/03/19 17:59:20| 0 Entries scanned 2006/03/19 17:59:20| 0 Invalid entries. 2006/03/19 17:59:20| 0 With invalid flags. 2006/03/19 17:59:20| 0 Objects loaded. 2006/03/19 17:59:20| 0 Objects expired. 2006/03/19 17:59:20| 0 Objects cancelled. 2006/03/19 17:59:20| 0 Duplicate URLs purged. 2006/03/19 17:59:20| 0 Swapfile clashes avoided. 2006/03/19 17:59:20| Took 6.5 seconds ( 0.0 objects/sec). 2006/03/19 17:59:20| Beginning Validation Procedure 2006/03/19 17:59:21| Completed Validation Procedure 2006/03/19 17:59:21| Validated 0 Entries 2006/03/19 17:59:21| store_swap_size = 0k 2006/03/19 17:59:21| storeLateRelease: released 0 objects
В настройках любимого интернет проводника указываем адрес нашего прокси и проверяем его работу. Если все правильно настроено, то в логах должно быть следующее
# cat /var/log/squid/access.log 1138745487.991 354 192.168.127.1 TCP_IMS_HIT/304 283 GET http://192.168.127.230/ YOURDOMAIN\ DomainAdminAccount NONE/- text/html
Теперь удалим пользователя из группы InternetUsers и повторим попытку. При этом на экране должно появиться окно авторизации. Независимо от того, какие данные будем вводить мы должны увидеть подобную страничку окно авторизации При этом в логах должно быть следующее
# cat /usr/local/squid/logs/access.log | grep DENIED 1138746473.277 3 192.168.127.10 TCP_DENIED/407 1805 GET http://192.168.127.230/test.php - NONE/- text/html 1138746473.300 21 192.168.127.10 TCP_DENIED/407 1801 GET http://192.168.127.230/test.php - NONE/- text/html
- Дополнительные ресурсы:
http://turbogaz.kharkov-ua.com/unix/www/squidGuard.php
[править] IPTABLES
- Теперь можно и запустить скрипт на iptables
#!/bin/bash
# ********** VARIABLE DEFINITIONS **********
# Внешний интерфейс
EXTIF="eth1"
# Внутренний интерфейс
INTIF="eth0"
# Внутренние сети, кроме сети с внутреннего интерфейса
OURLAN="10.0.1.0/255.255.255.0"
# Интерфейс "обратной петли"
LPDIF="lo"
LPDIP="127.0.0.1"
LPDMSK="255.0.0.0"
LPDNET="$LPDIP/$LPDMSK"
# Пути к утилитам
IPT="/sbin/iptables"
IFC="/sbin/ifconfig"
G="/bin/grep"
SED="/bin/sed"
AWK="/usr/bin/awk"
ECHO="/bin/echo"
# Устанавливаем переменные окружения, описывающие внешний интерфейс
# Установите значение переменной LC_ALL в "en"
# чтобы awk и ему подобные нормально работали в случае локализованного
# вывода данных на консоль
export LC_ALL="en"
EXTIP="`$IFC $EXTIF|$AWK /$EXTIF/'{next}//{split($0,a,":");split(a[2],a," ");print a[1];exit}'`"
EXTBC="255.255.255.255"
EXTMSK="`$IFC $EXTIF|$G Mask:|$SED 's/.*Mask:\([^ ]*\)/\1/'`"
EXTMSK="`$IFC $EXTIF|$AWK /$EXTIF/'{next}//{split($0,a,":");split(a[4],a," ");print a[1];exit}'`"
EXTNET="`echo $EXTIP| sed 's/\.[0-9]*$/\.0/' `/$EXTMSK"
$ECHO "EXTIP=$EXTIP EXTBC=$EXTBC EXTMSK=$EXTMSK EXTNET=$EXTNET"
# Поскольку широковещательный адрес EXTBC на внешнем интерфейсе не определён,
# устанавливаем его вручную, равным 255.255.255.255, что (я надеюсь)
# не будет неправильным
# Устанавливаем переменные окружения, описывающие внутренний интерфейс
INTIP="`$IFC $INTIF|$AWK /$INTIF/'{next}//{split($0,a,":");split(a[2],a," ");print a[1];exit}'`"
INTBC="`$IFC $INTIF|$AWK /$INTIF/'{next}//{split($0,a,":");split(a[3],a," ");print a[1];exit}'`"
INTMSK="`$IFC $INTIF|$AWK /$INTIF/'{next}//{split($0,a,":");split(a[4],a," ");print a[1];exit}'`"
INTNET="`echo $INTIP| sed 's/\.[0-9]*$/\.0/' `/$INTMSK"
$ECHO "INTIP=$INTIP INTBC=$INTBC INTMSK=$INTMSK INTNET=$INTNET"
OURLAN="$INTNET $OURLAN"
# Очищаем все правила
$IPT -F
$IPT -Z
$IPT -t nat -F
# Flush all existing chains and erase personal chains
CHAINS=`cat /proc/net/ip_tables_names 2>/dev/null`
for i in $CHAINS
do
$IPT -t $i -F
done
for i in $CHAINS
do
$IPT -t $i -X
done
# Создаем правила для логирования цепочек
$IPT -N DROPl 2> /dev/null
$IPT -N REJECTl 2> /dev/null
$IPT -N ACCEPTl 2> /dev/null
$IPT -N INPUTl 2> /dev/null
$IPT -N OUTPUTl 2> /dev/null
$IPT -N FORWARDl 2> /dev/null
##########################################################################
# Здесь устанавливаем логирование
$IPT -A DROPl -j LOG --log-prefix 'firewall drop '
$IPT -A REJECTl -j LOG --log-prefix 'firewall reject '
# For testing, a logging ACCEPT chain
$IPT -A ACCEPTl -j LOG --log-prefix 'firewall accept '
# Log for chains
$IPT -A INPUTl -j LOG --log-prefix 'firewall input '
$IPT -A OUTPUTl -j LOG --log-prefix 'firewall output '
$IPT -A FORWARDl -j LOG --log-prefix 'firewall forward '
###########################################################################
$IPT -A DROPl -j DROP
$IPT -A REJECTl -j REJECT
$IPT -A ACCEPTl -j ACCEPT
#Установим политики по умолчанию для трафика, не соответсвующего ни
#одному из правил
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
##(Необязательно) Разрешаем доступ к нашему ssh-серверу изнутри
$IPT -A INPUT -p TCP --dport ssh -i ${INTIF} -j ACCEPTl
##(Необязательно) Разрешаем доступ к нашему ssh-серверу извне
# $IPT -A INPUT -p TCP --dport ssh -i ${EXTIF} -j ACCEPTl
#Отбросим все TCP/UDP-пакеты, обращающиеся к привилегированным портам
# $IPT -A INPUT -p TCP -i ! ${INTIF} -d 0/0 --dport 0:1023 -j DROPl
# $IPT -A INPUT -p UDP -i ! ${INTIF} -d 0/0 --dport 0:1023 -j DROPl
# lo
$IPT -A INPUT -i ${LPDIF} -j ACCEPTl
$IPT -A OUTPUT -o ${LPDIF} -j ACCEPTl
# Блокируем широковещательный трафик
$IPT -A INPUT -i $EXTIF -d $EXTBC -j DROPl
# $IPT -A INPUT -i $INTIF -d $INTBC -j DROPl
$IPT -A OUTPUT -o $EXTIF -d $EXTBC -j DROPl
# $IPT -A OUTPUT -o $INTIF -d $INTBC -j DROPl
$IPT -A FORWARD -o $EXTIF -d $EXTBC -j DROPl
$IPT -A FORWARD -o $INTIF -d $INTBC -j DROPl
# Блокируем доступ к вутренней сети из внешней
$IPT -A INPUT -i $EXTIF -d ! $EXTIP -j DROPl
## For EMULE ip forwarding
EMULEPORT=4662
EMULEUDP=4672
EMULEUDP2=`expr $EMULEPORT + 3`
EMULEHOST=10.0.0.2
$IPT -A FORWARD -m ipp2p --ipp2p -j ACCEPT
$IPT -A FORWARD -p tcp --dport 4321 -j ACCEPT
$IPT -A FORWARD -p tcp --dport 4242 -j ACCEPT
$IPT -A FORWARD -p tcp --dport 4662 -j ACCEPT
$IPT -A INPUT -p tcp --dport 4662 -j ACCEPT
$IPT -A FORWARD -p tcp --dport 4665 -j ACCEPT
$IPT -A FORWARD -p tcp --sport 4665 -j ACCEPT
$IPT -A FORWARD -p udp --dport 4665 -j ACCEPT
$IPT -A FORWARD -p udp --sport 4665 -j ACCEPT
$IPT -A FORWARD -p tcp --dport 4663 -j ACCEPT
$IPT -A FORWARD -p tcp --sport 49900 -j ACCEPT
$IPT -A FORWARD -p tcp --dport 53943 -j ACCEPT
$IPT -A FORWARD -p tcp --dport 4666 -j ACCEPT
$IPT -A FORWARD -m ipp2p --ipp2p -j ACCEPT
# В принципе эта строчка не обязательна, но если хотите, то в начале emerge -av net-firewall/ipp2p
$IPT -A FORWARD -m ipp2p --ipp2p -j ACCEPT
echo -n "FW: Allowing Forward eMule service port:"
$IPT -t nat -A PREROUTING -i $EXTIF -p tcp --destination-port $EMULEPORT -j DNAT --to-destination $EMULEHOST:$EMULEPORT
$IPT -t nat -A PREROUTING -i $EXTIF -p udp --destination-port $EMULEUDP -j DNAT --to-destination $EMULEHOST:$EMULEUDP
$IPT -t nat -A PREROUTING -i $EXTIF -p udp --destination-port $EMULEUDP2 -j DNAT --to-destination $EMULEHOST:$EMULEUDP2
$IPT -A FORWARD -i $EXTIF -o $INTIF -d $EMULEHOST -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -i $EXTIF -o $INTIF -p udp --dport $EMULEUDP -d $EMULEHOST -j ACCEPT
$IPT -A FORWARD -i $EXTIF -o $INTIF -p udp --dport $EMULEUDP2 -d $EMULEHOST -j ACCEPT
echo ""
for ourlans in $OURLAN;
do
## Разрешим пока 80
#$IPT -A FORWARD -p TCP -i ${INTIF} -d 0/0 --dport 80 -j ACCEPTl
#$IPT -A FORWARD -p TCP -i ${EXTIF} -d $ourlans --sport 80 -j ACCEPTl
#$IPT -A INPUT -p TCP -i ${INTIF} -d $INTIP --dport 80 -j ACCEPTl
#$IPT -A OUTPUT -p TCP -o ${INTIF} -d $ourlans --dport 80 -j ACCEPTl
#$IPT -A OUTPUT -p TCP -o ${INTIF} -d $ourlans --sport 80 -j ACCEPTl
# Разрешим squid 8080
$IPT -A INPUT -p TCP -i ${INTIF} -d $INTIP --dport 8080 -j ACCEPTl
$IPT -A OUTPUT -p TCP -o ${INTIF} -d $ourlans --dport 8080 -j ACCEPTl
$IPT -A OUTPUT -p TCP -o ${INTIF} -d $ourlans --sport 8080 -j ACCEPTl
$IPT -A INPUT -p TCP -i ${EXTIF} -d $EXTIP --sport 80 -j ACCEPTl
$IPT -A OUTPUT -p TCP -o ${EXTIF} -d 0/0 --dport 80 -j ACCEPTl
# ICMP
$IPT -A FORWARD -p icmp -i ${INTIF} -d 0/0 --icmp-type 8 -j ACCEPTl
$IPT -A FORWARD -p icmp -i ${EXTIF} -d $ourlans --icmp-type 0 -j ACCEPTl
$IPT -A FORWARD -p icmp -i ${EXTIF} -d $ourlans --icmp-type 11 -j ACCEPTl
# PING меня
$IPT -A INPUT -p icmp --icmp-type 0 -j ACCEPTl
$IPT -A INPUT -p icmp --icmp-type 8 -j ACCEPTl
$IPT -A INPUT -p icmp --icmp-type 11 -j ACCEPTl
$IPT -A OUTPUT -p icmp -d 0/0 --icmp-type 0 -j ACCEPTl
$IPT -A OUTPUT -p icmp -d 0/0 --icmp-type 8 -j ACCEPTl
$IPT -A OUTPUT -p icmp -d 0/0 --icmp-type 11 -j ACCEPTl
# Разрешим FTP
$IPT -A INPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPTl
$IPT -A OUTPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPTl
$IPT -A FORWARD -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPTl
$IPT -A FORWARD -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPTl
# Active FTP
$IPT -A INPUT -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPTl
$IPT -A OUTPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPTl
$IPT -A FORWARD -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPTl
$IPT -A FORWARD -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPTl
# Passive FTP
$IPT -A INPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED -j ACCEPTl
$IPT -A OUTPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPTl
$IPT -A FORWARD -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED -j ACCEPTl
$IPT -A FORWARD -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPTl
# SSH
$IPT -A INPUT -p tcp --dport 22 -j ACCEPTl
$IPT -A OUTPUT -p tcp --sport 22 -j ACCEPTl
# SMB
$IPT -A INPUT -p TCP -i ${INTIF} -d $INTIP --dport 139 -j ACCEPTl
$IPT -A INPUT -p TCP -i ${INTIF} -d $INTIP --dport 445 -j ACCEPTl
$IPT -A INPUT -p UDP -i ${INTIF} --sport 137 --dport 137 -j ACCEPTl
$IPT -A INPUT -p UDP -i ${INTIF} --sport 138 --dport 138 -j ACCEPTl
$IPT -A INPUT -p UDP -i ${INTIF} --dport 138 -j ACCEPTl
$IPT -A OUTPUT -p TCP -o ${INTIF} --sport 139 -j ACCEPTl
$IPT -A OUTPUT -p TCP -o ${INTIF} --sport 445 -j ACCEPTl
$IPT -A OUTPUT -p UDP -o ${INTIF} --dport 138 -j ACCEPTl
$IPT -A OUTPUT -p UDP -o ${INTIF} --dport 137 -j ACCEPTl
# SMB Login in Domain
$IPT -A OUTPUT -p TCP -o ${INTIF} --dport 445 -j ACCEPTl
$IPT -A OUTPUT -p UDP -o ${INTIF} --dport 137 -j ACCEPTl
$IPT -A OUTPUT -p UDP -o ${INTIF} --dport 389 -j ACCEPTl
$IPT -A INPUT -p TCP -i ${INTIF} --sport 445 -j ACCEPTl
$IPT -A INPUT -p UDP -i ${INTIF} --dport 137 -j ACCEPTl
$IPT -A INPUT -p UDP -i ${INTIF} --sport 389 -j ACCEPTl
$IPT -A INPUT -p UDP -i ${INTIF} --sport 137 -j ACCEPTl
# Login in Domain
$IPT -A INPUT -p TCP -i ${INTIF} --sport 139 -j ACCEPTl
$IPT -A INPUT -p TCP -i ${INTIF} --sport 88 -j ACCEPTl
$IPT -A INPUT -p TCP -i ${INTIF} --sport 389 -j ACCEPTl
$IPT -A INPUT -p UDP -i ${INTIF} --sport 88 -j ACCEPTl
$IPT -A OUTPUT -p TCP -o ${INTIF} --dport 88 -j ACCEPTl
$IPT -A OUTPUT -p TCP -o ${INTIF} --dport 389 -j ACCEPTl
$IPT -A OUTPUT -p TCP -o ${INTIF} --dport 139 -j ACCEPTl
$IPT -A OUTPUT -p TCP -o ${INTIF} --sport 35646 --dport 139 -j ACCEPTl
$IPT -A OUTPUT -p UDP -o ${INTIF} --dport 88 -j ACCEPTl
$IPT -A OUTPUT -p UDP -o ${INTIF} --dport 750 -j ACCEPTl
$IPT -A OUTPUT -p UDP -o ${INTIF} --dport 389 -j ACCEPTl
# DNS
$IPT -A INPUT -p TCP -d 0/0 --sport 53 -j ACCEPTl
$IPT -A INPUT -p UDP -d 0/0 --sport 53 -j ACCEPTl
$IPT -A OUTPUT -p TCP --dport 53 -j ACCEPTl
$IPT -A OUTPUT -p UDP --dport 53 -j ACCEPTl
$IPT -A FORWARD -p UDP --sport 53 -j ACCEPTl
$IPT -A FORWARD -p UDP --dport 53 -j ACCEPTl
$IPT -A FORWARD -p TCP --sport 53 -j ACCEPTl
$IPT -A FORWARD -p TCP --dport 53 -j ACCEPTl
# DrWeb
$IPT -A FORWARD -p TCP -i ${INTIF} -d 0/0 --dport 5190 -j ACCEPTl
$IPT -A FORWARD -p TCP -i ${EXTIF} -d $ourlans --dport 1205 --sport 5190 -j ACCEPTl
# RDP outgoing
$IPT -A FORWARD -p TCP -i ${INTIF} -d 0/0 --dport 3389 -j ACCEPTl
$IPT -A FORWARD -p TCP -i ${EXTIF} --sport 3389 -j ACCEPTl
# ICQ
$IPT -A FORWARD -p TCP -i ${INTIF} -d 0/0 --dport 5190 -j ACCEPTl
$IPT -A FORWARD -p TCP -i ${EXTIF} -d $ourlans --sport 5190 -j ACCEPTl
# Jabber
$IPT -A FORWARD -p TCP -i ${INTIF} -d 0/0 --dport 5222 -j ACCEPTl
$IPT -A FORWARD -p TCP -i ${EXTIF} -d $ourlans --sport 5222 -j ACCEPTl
# SVN
$IPT -A FORWARD -p TCP -i ${INTIF} -d 0/0 --dport 443 -j ACCEPTl
$IPT -A FORWARD -p TCP -i ${EXTIF} -d $ourlans --sport 443 -j ACCEPTl
$IPT -A FORWARD -p TCP -i ${INTIF} -d 0/0 --dport 8080 -j ACCEPTl
$IPT -A FORWARD -p TCP -i ${EXTIF} -d $ourlans --sport 8080 -j ACCEPTl
# KTorrent
$IPT -A FORWARD -p TCP -i ${INTIF} -d 0/0 --dport 6881 -j ACCEPTl
$IPT -A FORWARD -p TCP -i ${EXTIF} -d $ourlans --sport 6881 -j ACCEPTl
# TheBat
# Outgoing
$IPT -A FORWARD -p TCP -i ${INTIF} -d 0/0 --dport 25 -j ACCEPTl
$IPT -A FORWARD -p TCP -i ${EXTIF} -d $ourlans --sport 25 -j ACCEPTl
# Incoming
$IPT -A FORWARD -p TCP -i ${INTIF} -d 0/0 --dport 110 -j ACCEPTl
$IPT -A FORWARD -p TCP -i ${EXTIF} -d $ourlans --sport 110 -j ACCEPTl
# RDP incoming
$IPT -A INPUT -p TCP -i ${INTIF} --sport 3389 -j ACCEPTl
$IPT -A OUTPUT -p TCP -o ${INTIF} --dport 3389 -j ACCEPTl
# NTP-Client
$IPT -A OUTPUT -p UDP -o ${INTIF} --dport 123 -j ACCEPTl
$IPT -A INPUT -p UDP -i ${INTIF} --sport 123 -j ACCEPTl
# MailRu Agent
#$IPT -A FORWARD -p TCP -i ${INTIF} --dport 80 --sport 1349 -j ACCEPTl
##$IPT -A FORWARD -p TCP -o ${INTIF} --dport 3389 -j ACCEPTl
done
$IPT -A INPUT -j INPUTl
$IPT -A OUTPUT -j OUTPUTl
$IPT -A FORWARD -j FORWARDl
#В конце добавляем правила для NAT
# $IPT -A FORWARD -i ${INTIF} -d 10.0.0.0/255.255.0.0 -j DROPl
# $IPT -A FORWARD -i ${INTIF} -s 10.0.0.0/255.255.0.0 -j ACCEPTl
# $IPT -A FORWARD -i ${EXTIF} -d 10.0.0.0/255.255.0.0 -j ACCEPTl
###test start
# $IPT -A FORWARD -i ${INTIF} -s 10.0.1.0/255.255.0.0 -j ACCEPTl
# $IPT -A FORWARD -i ${EXTIF} -d 10.0.1.0/255.255.0.0 -j ACCEPTl
###test stop
$IPT -t nat -A POSTROUTING -o ${EXTIF} -j MASQUERADE
#Сообщаем ядру, что ip-форвардинг разрешен
echo 1 > /proc/sys/net/ipv4/ip_forward
for f in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 1 > $f ; done
#Все баним в конце
$IPT -A INPUT -j DROPl
$IPT -A OUTPUT -j DROPl
$IPT -A FORWARD -j DROPl
- А если еще привести скрипт syslog-ng к похожему на это:
# $Header: /var/cvsroot/gentoo-x86/app-admin/syslog-ng/files/syslog-ng.conf.gentoo,v 1.5 2005/05/12 05:46:10 mr_bones_ Exp $
#
# Syslog-ng default configuration file for Gentoo Linux
# contributed by Michael Sterrett
options {
chain_hostnames(off);
sync(0);
# The default action of syslog-ng 1.6.0 is to log a STATS line
# to the file every 10 minutes. That's pretty ugly after a while.
# Change it to every 12 hours so you get a nice daily update of
# how many messages syslog-ng missed (0).
stats(43200);
};
source src { unix-stream("/dev/log"); internal(); pipe("/proc/kmsg"); };
###############################################
# Destination's #
###############################################
destination messages { file("/var/log/messages"); };
# By default messages are logged to tty12...
destination console_all { file("/dev/tty12"); };
# ...if you intend to use /dev/console for programs like xconsole
# you can comment out the destination line above that references /dev/tty12
# and uncomment the line below.
#destination console_all { file("/dev/console"); };
destination samba_nmbd_smbd { file("/var/log/samba_nmbd_smbd"); };
destination firewall_drop { file("/var/log/firewal_drop.log"); };
destination firewall_reject { file("/var/log/firewal_reject.log"); };
destination firewall_accept { file("/var/log/firewal_accept.log"); };
destination firewall_input { file("/var/log/firewal_input.log"); };
destination firewall_output { file("/var/log/firewal_output.log"); };
destination firewall_forward { file("/var/log/firewal_forward.log"); };
###############################################
# Filter's #
###############################################
# Samba
filter f_nmbd { match("^nmbd *"); };
filter f_smbd { match("^smbd *"); };
# IPTables
filter f_firewall_drop { match("^firewall drop *"); };
filter f_firewall_reject { match("^firewall reject *"); };
filter f_firewall_accept { match("^firewall accept *"); };
filter f_firewall_input { match("^firewall input *"); };
filter f_firewall_output { match("^firewall output *"); };
filter f_firewall_forward { match("^firewall forward *"); };
# и на всякий случай, чтобы не забивал 12-ю консоль
filter f_kern { facility(kern) and not match("^firewall *"); };
###############################################
# Log's #
###############################################
# Samba
log { source(src); filter(f_nmbd); destination(samba_nmbd_smbd); };
log { source(src); filter(f_smbd); destination(samba_nmbd_smbd); };
# IPTables
log { source(src); filter(f_firewall_drop); destination(firewall_drop); };
log { source(src); filter(f_firewall_reject); destination(firewall_reject); };
log { source(src); filter(f_firewall_accept); destination(firewall_accept); };
log { source(src); filter(f_firewall_input); destination(firewall_input); };
log { source(src); filter(f_firewall_output); destination(firewall_output); };
log { source(src); filter(f_firewall_forward); destination(firewall_forward); };
# Console and messages
log { source(src); filter(f_kern); destination(messages); };
log { source(src); filter(f_kern); destination(console_all); };
То можно все логировать и логи потом изучать
