Tcpd: средства управления доступом
Начиная с открытия компьютера к сети, средство вовлекает много защиты. Приложения разработаны так, чтобы принять меры против различных типов решений. Некоторые из них, однако, могут быть с ошибками (наиболее ярко продемонстрированными RTM Internet worm), или не различают между безопасными хостами, от которых просьбы о частном обслуживании будут приняты, и опасными хостами, чьи запросы должны быть отклонены. Мы уже кратко обсуждали услуги finger и tftp выше.
# inetd services
ftp stream tcp nowait root /usr/sbin/ftpd in.ftpd -l
telnet stream tcp nowait root /usr/sbin/telnetd in.telnetd -b/etc/issue
#finger stream tcp nowait bin /usr/sbin/fingerd in.fingerd
#tftp dgram udp wait nobody /usr/sbin/tftpd in.tftpd
#tftp dgram udp wait nobody /usr/sbin/tftpd in.tftpd /boot/diskless
login stream tcp nowait root /usr/sbin/rlogind in.rlogind
shell stream tcp nowait root /usr/sbin/rshd in.rshd
exec stream tcp nowait root /usr/sbin/rexecd in.rexecd
Чтобы ограничить доступ к этим услугам "доверенным множествам" только, которые невозможны с обычной установкой, где inetd обеспечивает эту защиту всей клиентуре.
- Полезное средство для этого - tcpd, так называемый daemon wrapper. Для TCP услуги, которую вы хотите контролировать или защищать, вызывайте его вместо его программы сервера. Tcpd регистрирует запрос к syslog daemon, проверяя, позволяет ли удаленный хост использовать обслуживание, и только если это выполнено, в реальной программе сервера. Заметьте, что это не работает с udp-основанными услугами.
- Например, чтобы перенести finger daemon, вы должны изменить соответствующую строку в inetd.conf.
1. Написано Wietse Venema, wietse@wzv.win.tue.nl.
# wrap finger daemon
finger stream tcp nowait root /usr/sbin/tcpd in.fingerd
Без добавления какого-либо контроля доступа, это будет представлено клиенту точно так же, как и обычная установка finger, за исключением того, что любые запросы будут регистрироваться в syslog's auth facility. Управление доступом осуществляется посредством двух файлов, названных /etc/hosts.allow и /etc/hosts.deny. Они содержат разрешение входов и отрицание доступа, соответственно, к различным услугам и хостам. Когда tcpd обрабатывает просьбу об обслуживании finger от клиентского хоста, именованного Biff.foobar.com, он просматривает hosts.allow и hosts.deny (в этом порядке) для соответствующей записи.
- Servicelist - список имен услуг из /etc/services, или ключевое слово ALL. Чтобы соответствовать всем услугам, за исключением finger и tftp, используйте "ALL EXCEPT finger, tftp".
- Hostlist - список имен хостов или адресов IP, или ключевые слова ALL, LOCAL, или UNKNOWN. ALL соответствует любому хосту, в то время как LOCAL соответствует имени хоста, не содержащего точку. UNKNOWN соответствует любым хостам, чьи имена или адреса ошибочны.
- Name string, начиная с точки, соответствует всем хостам, чья область равна этому имени. Например, .foobar.com пара - Biff.foobar.com. Существуют условия для IP сетевых адресов и подсетей. Смотрите страницу справочника (5) для деталей.
Для отказа в доступе к услугам finger и tftp, кроме локальных хостов, поместите следующее в /etc/hosts.deny, и оставьте /etc/hosts.allow пустым:
in.tftpd, in.fingerd: ALL EXCEPT LOCAL, .your.domain
Произвольная область shellcmd может содержать командную оболочку, чтобы быть вызванной, когда запись согласована. Это полезно установить ловушку, которая может выявить потенциальных нападавших:
in.ftpd: ALL EXCEPT LOCAL, .vbrew.com :
echo "request from %d@%h" >> /var/log/finger.log;
if [ %h != "vlager.vbrew.com" ]; then
finger -l @%h >> /var/log/finger.log;
fi
Область псевдонимов позволяет точно определить альтернативные имена для одного и того же обслуживания. Обычно, вы не должны менять файл услуг, который приходит наряду с сетевым программным обеспечением на вашей Linux системе. Однако, мы даем небольшой пример из этого файла ниже:
# The services file:
# well-known services
echo 7/tcp # Echo
echo 7/udp
discard 9/tcp sink null # Discard
discard 9/udp sink null
daytime 13/tcp # Daytime
daytime 13/udp
chargen 19/tcp ttytst source # Character Generator
chargen 19/udp ttytst source
ftp-data 20/tcp # File Transfer Protocol (Data)
ftp 21/tcp # File Transfer Protocol (Control)
telnet 23/tcp # Virtual Terminal Protocol
smtp 25/tcp # Simple Mail Transfer Protocol
nntp 119/tcp readnews # Network News Transfer Protocol
# UNIX services
exec 512/tcp # BSD rexecd
biff 512/udp comsat # mail notification
login 513/tcp # remote login
who 513/udp whod # remote who and uptime
shell 514/tcp cmd # remote command, no passwd used
syslog 514/udp # remote system logging
printer 515/tcp spooler # remote print spooling
route 520/udp router routed # routing information protocol
Заметьте, что, например, обслуживание ECHO предлагается на порте 7 для обоих, и TCP, и UDP. Порт 512 используется для двух различных услуг: для СИСТЕМЫ СПУТНИКОВОЙ СВЯЗИ КОМСАТ daemon (которые сообщают пользователям о новой почте, см. xbiff(1x)) через UDP и для удаленного выполнения (rexec(1)) с использованием TCP.
# Internet (IP) protocols
ip 0 IP # internet protocol, pseudo protocol number
icmp 1 ICMP # internet control message protocol
igmp 2 IGMP # internet group multicast protocol
tcp 6 TCP # transmission control protocol
udp 17 UDP # user datagram protocol
raw 255 RAW # RAW IP interface