Административная утилита Ipchains.
Опции, описываемые ниже, лишь некоторые из существующих, которые наиболее часто используются. Для получения полной информации обо всех параметрах запуска ipchains читайте страницы руководства (man) и документацию.
ipchains
Утилита ipchains используется для администрирования firewall-а на Linux. Мы можем использовать ее для установки правил firewall-а, так как мы уже делали в этой книге. Когда правила созданы, мы можем, используя ряд команд, поддерживать и контролировать их.
• Для просмотра всех правил в выбранной цепочке используйте команду:
[root@deep /]# ipchains -L
Если название цепочки не определено, то выводятся все правила.
• Для получения всех правил в цепочке input используйте команду:
[root@deep /]# ipchains -L input
• Для получения всех правил в цепочке output используйте команду:
[root@deep /]# ipchains -L output
• Для получения всех правил в цепочке forward используйте команду:
[root@deep /]# ipchains -L forward
Это, конечно, работает только, если вы настроили маскарадинг на вашем сервере.
• Для получения списка всех правил маскарадинга в выбранной цепочке используйте команду:
[root@deep /]# ipchains -ML
Эта опция позволяет просматривать текущие маскарадные соединения. Чтобы эта команда работала, вам надо на сервере иметь настроенный маскарадинг.
• Для получения списка правил в цифровом формате (выводятся адреса, а не имена) в выбранной цепочке используйте команду:
[root@deep /]# ipchains -nL
Дополнительная документация.
Для получения большей информации, Вы можете прочитать следующие man-ы:
$ ipchains (8) – управление IP firewall-ом
$ ipchains-restore (8) – восстановление цепочек IP firewall-а из stdin
$ ipchains-save (8) - запись цепочек IP firewall-а в stdout
Конфигурация скрипта “/etc/rc.d/init.d/firewall” для Шлюза.
Это конфигурационный скрипт для шлюза. Он позволяет неограниченный трафик через Loopback интерфейс, ICMP, DNS сервер и клиент (53), SSH сервер и клиент (22), HTTP сервер и клиент (80), HTTPS сервер и клиент (443), POP клиент (110), NNTP NEWS клиент (119), SMTP сервер и клиент (25), IMAP сервер (143), IRC клиент (6667), ICQ клиент (4000), FTP клиент (20, 21), RealAudio / QuickTime клиент и исходящий TRACEROUTE.
Если вы не хотите использовать какие-нибудь сервисы открытые в этом файле по умолчанию, закомментируйте их, добавив в начало строки символ “#”. Если же вы хотите использовать сервисы, которые я запретил – удалите символ комментария “#”. Если вы настраиваете на сервере маскарадинг, не забудьте раскомментировать модули необходимые для маскарадинга нужных вам сервисов (ip_masq_irc.o, ip_masq_raudio.o и т.д) в секции “MODULES MASQUERADING”.
Создайте скрипт firewall (touch /etc/rc.d/init.d/firewall) на шлюзе:
#!/bin/sh # # ---------------------------------------------------------------------------- # Last modified by Gerhard Mourani: 04-25-2000 # ---------------------------------------------------------------------------- # Copyright (C) 1997, 1998, 1999 Robert L. Ziegler # # Permission to use, copy, modify, and distribute this software and its # documentation for educational, research, private and non-profit purposes, # without fee, and without a written agreement is hereby granted. # This software is provided as an example and basis for individual firewall # development. This software is provided without warranty. # # Any material furnished by Robert L. Ziegler is furnished on an # "as is" basis. He makes no warranties of any kind, either expressed # or implied as to any matter including, but not limited to, warranty # of fitness for a particular purpose, exclusivity or results obtained # from use of the material. # ---------------------------------------------------------------------------- # # Invoked from /etc/rc.d/init.d/firewall. # chkconfig: - 60 95 # description: Starts and stops the IPCHAINS Firewall \ # used to provide Firewall network services. # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. if [ ${NETWORKING} = "no" ] then exit 0 fi if [ ! -x /sbin/ipchains ]; then exit 0 fi # See how we were called. case "$1" in start) echo -n "Starting Firewalling Services: " # Некоторые определения для упрощения управления. # ---------------------------------------------------------------------------- # EDIT THESE TO SUIT YOUR SYSTEM AND ISP. EXTERNAL_INTERFACE="eth0" # Интерфейс подключенный к Интернет LOCAL_INTERFACE_1="eth1" # Внутренний LAN интерфейс LOOPBACK_INTERFACE="lo" # loopback интерфейс IPADDR="my.ip.address" # Ваш IP адрес LOCALNET_1="192.168.1.0/24" # Диапазон внутренних адресов, которые вы используете IPSECSG="my.ipsecsg.address" # разделяемый пробелами список удаленных VPN шлюзов FREESWANVI="ipsec0" # разделяемый пробелам список виртуальных интерфейсов ANYWHERE="any/0" # Совпадает с любыми IP адресами NAMESERVER_1="my.name.server.1" # 1-й DNS сервер NAMESERVER_2="my.name.server.2" # 2-й DNS сервер MY_ISP="my.isp.address.range/24" # диапазон адресов ISP & NOC SMTP_SERVER="my.smtp.server" # Ваш сервер концентратор почты. POP_SERVER="my.pop.server" # Внешний pop сервер, если любой NEWS_SERVER="my.news.server" # Внешний news сервер, если любой SYSLOG_SERVER="syslog.internal.server" # Ваш внутренний сервер syslog LOOPBACK="127.0.0.0/8" # Зарезервированный диапазон loopback адресов CLASS_A="10.0.0.0/8" # Приватная сеть класса A CLASS_B="172.16.0.0/12" # Приватная сеть класса B CLASS_C="192.168.0.0/16" # Приватная сеть класса C CLASS_D_MULTICAST="224.0.0.0/4" # Широковещательные адреса класса D CLASS_E_RESERVED_NET="240.0.0.0/5" # Зарезервированные адреса класса E BROADCAST_SRC="0.0.0.0" # Широковещательный адрес источника BROADCAST_DEST="255.255.255.255" # Широковещательный адрес получателя PRIVPORTS="0:1023" # Диапазон привилегированных портов UNPRIVPORTS="1024:65535" # Диапазон непривилегированных портов # ---------------------------------------------------------------------------- # SSH стартует на 1023 и работает до 513 для # каждого дополнительного одновременно входящего соединения. SSH_PORTS="1022:1023" # диапазон привилегированных портов для SSH # traceroute обычно использует -S 32769:65535 -D 33434:33523 TRACEROUTE_SRC_PORTS="32769:65535" TRACEROUTE_DEST_PORTS="33434:33523" # ---------------------------------------------------------------------------- # Политика по умолчанию DENY # Явно разрешаются входящие и исходящие соединения # Удаления всех существующих правил принадлежащих этому фильтру ipchains -F # Очистка всех существующих правил и пользовательских цепочек ipchains -X # Установка политики по умолчанию deny. # Don't even bother sending an error message back. ipchains -P input DENY ipchains -P output DENY ipchains -P forward DENY # установка таймаута для маскарадинга в 10 часов для tcp соединений ipchains -M -S 36000 0 0 # Не перенаправлять фрагменты. Предварительно их собирать. ipchains -A output -f -i $LOCAL_INTERFACE_1 -j DENY # ---------------------------------------------------------------------------- # MODULES MASQUERADING # Раскомментируйте все необходимые вам модули перечисленные ниже # Эти модели нужны для маскарадинга их собственных сервисов. /sbin/modprobe ip_masq_ftp /sbin/modprobe ip_masq_raudio ports=554,7070,7071,6970,6971 /sbin/modprobe ip_masq_irc #/sbin/modprobe ip_masq_vdolive #/sbin/modprobe ip_masq_cuseeme #/sbin/modprobe ip_masq_quake # ---------------------------------------------------------------------------- # LOOPBACK # Неограниченный трафик на loopback интерфейсe. ipchains -A input -i $LOOPBACK_INTERFACE -j ACCEPT ipchains -A output -i $LOOPBACK_INTERFACE -j ACCEPT # ---------------------------------------------------------------------------- # Сетевые вампиры # Запрещение доступа jerks # /etc/rc.d/rc.firewall.blocked содержит список # ipchains -A input -i $EXTERNAL_INTERFACE -s address -j DENY # правил для блокирования любого доступа. # Сброс любых соединений от проблемных сайтов #if [ -f /etc/rc.d/rc.firewall.blocked ]; then # . /etc/rc.d/rc.firewall.blocked #fi # ---------------------------------------------------------------------------- # SPOOFING & BAD ADDRESSES # Сброс поддельных пакетов. # Игнорирование заведомо неправильных адресов отправителя. # Защита вас от отправки пакетов с плохими адресами. # Блокирование поддельных пакетов имеющих ваш адрес, как адрес отправителя. ipchains -A input -i $EXTERNAL_INTERFACE -s $IPADDR -j DENY –l # Блокирование пакетов идущих как бы в или из приватной сети класса A ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_A -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -d $CLASS_A -j DENY -l ipchains -A output -i $EXTERNAL_INTERFACE -s $CLASS_A -j REJECT -l ipchains -A output -i $EXTERNAL_INTERFACE -d $CLASS_A -j REJECT -l # Блокирование пакетов идущих как бы в или из приватной сети класса B ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_B -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -d $CLASS_B -j DENY -l ipchains -A output -i $EXTERNAL_INTERFACE -s $CLASS_B -j REJECT -l ipchains -A output -i $EXTERNAL_INTERFACE -d $CLASS_B -j REJECT -l # Блокирование пакетов идущих как бы в или из приватной сети класса C # ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_C -j DENY -l # ipchains -A input -i $EXTERNAL_INTERFACE -d $CLASS_C -j DENY -l # ipchains -A output -i $EXTERNAL_INTERFACE -s $CLASS_C -j REJECT -l # ipchains -A output -i $EXTERNAL_INTERFACE -d $CLASS_C -j REJECT -l # Блокирование пакетов идущих как из loopback интерфейса ipchains -A input -i $EXTERNAL_INTERFACE -s $LOOPBACK -j DENY -l ipchains -A output -i $EXTERNAL_INTERFACE -s $LOOPBACK -j REJECT -l # Блокирование пакетов с широковещательным адресом в качестве адреса отправителя ipchains -A input -i $EXTERNAL_INTERFACE -s $BROADCAST_DEST -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -d $BROADCAST_SRC -j DENY -l # Блокирование широковещательных адресов класса D (in.h) (NET-3-HOWTO) # Широковещательный адрес не может быть адресом отправителя. # Широковещание использует UDP. ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_D_MULTICAST -j DENY -l # Блокирование зарезервированных адресов класса E ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_E_RESERVED_NET -j DENY -l # Блокирование адресов определенных как зарезервированные IANA # 0.*.*.*, 1.*.*.*, 2.*.*.*, 5.*.*.*, 7.*.*.*, 23.*.*.*, 27.*.*.* # 31.*.*.*, 37.*.*.*, 39.*.*.*, 41.*.*.*, 42.*.*.*, 58-60.*.*.* # 65-95.*.*.*, 96-126.*.*.*, 197.*.*.*, 201.*.*.* (?), 217-223.*.*.* ipchains -A input -i $EXTERNAL_INTERFACE -s 1.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 2.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 5.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 7.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 23.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 27.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 31.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 37.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 39.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 41.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 42.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 58.0.0.0/7 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 60.0.0.0/8 -j DENY -l #65: 01000001 - /3 includes 64 - need 65-79 spelled out ipchains -A input -i $EXTERNAL_INTERFACE -s 65.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 66.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 67.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 68.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 69.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 70.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 71.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 72.0.0.0/8 -j DENY –l ipchains -A input -i $EXTERNAL_INTERFACE -s 73.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 74.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 75.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 76.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 77.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 78.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 79.0.0.0/8 -j DENY -l #80: 01010000 - /4 masks 80-95 ipchains -A input -i $EXTERNAL_INTERFACE -s 80.0.0.0/4 -j DENY -l # 96: 01100000 - /4 makses 96-111 ipchains -A input -i $EXTERNAL_INTERFACE -s 96.0.0.0/4 -j DENY -l #126: 01111110 - /3 includes 127 - need 112-126 spelled out ipchains -A input -i $EXTERNAL_INTERFACE -s 112.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 113.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 114.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 115.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 116.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 117.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 118.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 119.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 120.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 121.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 122.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 123.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 124.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 125.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 126.0.0.0/8 -j DENY -l #217: 11011001 - /5 includes 216 - need 217-219 spelled out ipchains -A input -i $EXTERNAL_INTERFACE -s 217.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 218.0.0.0/8 -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -s 219.0.0.0/8 -j DENY -l #223: 11011111 - /6 masks 220-223 ipchains -A input -i $EXTERNAL_INTERFACE -s 220.0.0.0/6 -j DENY -l # ---------------------------------------------------------------------------- # ICMP # Предотвращение denial of service атак, базирующихся на ICMP bombs, filter # incoming Redirect (5) и outgoing Destination Unreachable (3). # Заметим, что отключение Destination Unreachable (3), обычно, не целесообразно # так как он используется при согласовании размера фрагмента пакета. # Для двунаправленного ping. # Типы сообщений: Echo_Reply (0), Echo_Request (8) # Для предотвращения атак ограничьте адрес отправителя диапазоном Ip адресов вашего ISP. # # Для исходящих traceroute. # Типы сообщений: INCOMING Dest_Unreachable (3), Time_Exceeded (11) # default UDP base: 33434 to base+nhops-1 # # Для входящих traceroute. # Типы сообщений: OUTGOING Dest_Unreachable (3), Time_Exceeded (11) # Для блокирования этого, запретите OUTGOING 3 и 11 # 0: echo-reply (pong) # 3: destination-unreachable, port-unreachable, fragmentation-needed, etc. # 4: source-quench # 5: redirect # 8: echo-request (ping) # 11: time-exceeded # 12: parameter-problem ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \ -s $ANYWHERE 0 -d $IPADDR -j ACCEPT ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \ -s $ANYWHERE 3 -d $IPADDR -j ACCEPT ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \ -s $ANYWHERE 4 -d $IPADDR -j ACCEPT ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \ -s $ANYWHERE 11 -d $IPADDR -j ACCEPT ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \ -s $ANYWHERE 12 -d $IPADDR -j ACCEPT ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \ -s $MY_ISP 8 -d $IPADDR -j ACCEPT ipchains -A output -i $EXTERNAL_INTERFACE -p icmp \ -s $IPADDR 0 -d $MY_ISP -j ACCEPT ipchains -A output -i $EXTERNAL_INTERFACE -p icmp \ -s $IPADDR 3 -d $MY_ISP -j ACCEPT ipchains -A output -i $EXTERNAL_INTERFACE -p icmp \ -s $IPADDR 4 -d $ANYWHERE -j ACCEPT ipchains -A output -i $EXTERNAL_INTERFACE -p icmp \ -s $IPADDR 8 -d $ANYWHERE -j ACCEPT ipchains -A output -i $EXTERNAL_INTERFACE -p icmp \ -s $IPADDR 12 -d $ANYWHERE -j ACCEPT ipchains -A output -i $EXTERNAL_INTERFACE -p icmp \ -s $IPADDR 11 -d $MY_ISP -j ACCEPT # ---------------------------------------------------------------------------- # UDP INCOMING TRACEROUTE # traceroute обычно использует -S 32769:65535 -D 33434:33523 ipchains -A input -i $EXTERNAL_INTERFACE -p udp \ -s $MY_ISP $TRACEROUTE_SRC_PORTS \ -d $IPADDR $TRACEROUTE_DEST_PORTS -j ACCEPT -l ipchains -A input -i $EXTERNAL_INTERFACE -p udp \ -s $ANYWHERE $TRACEROUTE_SRC_PORTS \ -d $IPADDR $TRACEROUTE_DEST_PORTS -j DENY -l # ---------------------------------------------------------------------------- # DNS сервер # ---------- # DNS: полный сервер # сервер/клиент к серверу запросы и ответы ipchains -A input -i $EXTERNAL_INTERFACE -p udp \ -s $ANYWHERE $UNPRIVPORTS \ -d $IPADDR 53 -j ACCEPT ipchains -A output -i $EXTERNAL_INTERFACE -p udp \ -s $IPADDR 53 \ -d $ANYWHERE $UNPRIVPORTS -j ACCEPT # DNS клиент (53) # --------------- ipchains -A input -i $EXTERNAL_INTERFACE -p udp \ -s $NAMESERVER_1 53 \ -d $IPADDR $UNPRIVPORTS -j ACCEPT ipchains -A output -i $EXTERNAL_INTERFACE -p udp \ -s $IPADDR $UNPRIVPORTS \ -d $NAMESERVER_1 53 -j ACCEPT ipchains -A input -i $EXTERNAL_INTERFACE -p udp \ -s $NAMESERVER_2 53 \ -d $IPADDR $UNPRIVPORTS -j ACCEPT ipchains -A output -i $EXTERNAL_INTERFACE -p udp \ -s $IPADDR $UNPRIVPORTS \ -d $NAMESERVER_2 53 -j ACCEPT # TCP запросы от клиентов разрешены если UDP закончились # ошибкой. Это случается очень редко. Обычно, клиенты используют # TCP для пересылки зон от первичного к вторичному серверу # или хакером. ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \ -s $NAMESERVER_1 53 \ -d $IPADDR $UNPRIVPORTS -j ACCEPT ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \ -s $IPADDR $UNPRIVPORTS \ -d $NAMESERVER_1 53 -j ACCEPT ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \ -s $NAMESERVER_2 53 \ -d $IPADDR $UNPRIVPORTS -j ACCEPT ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \ -s $IPADDR $UNPRIVPORTS \ -d $NAMESERVER_2 53 -j ACCEPT # ---------------------------------------------------------------------------- # Принимаем TCP только для избранных портов # --------------------------------- # ------------------------------------------------------------------ # SSH сервер (22) # --------------- ipchains -A input -i $EXTERNAL_INTERFACE -p tcp \ -s $ANYWHERE $UNPRIVPORTS \ -d $IPADDR 22 -j ACCEPT ipchains -A output -i $EXTERNAL_INTERFACE -p tcp ! -y \ -s $IPADDR 22 \ -d $ANYWHERE $UNPRIVPORTS -j ACCEPT ipchains -A input -i $EXTERNAL_INTERFACE -p tcp \ -s $ANYWHERE $SSH_PORTS \ -d $IPADDR 22 -j ACCEPT ipchains -A output -i $EXTERNAL_INTERFACE -p tcp ! -y \ -s $IPADDR 22 \ -d $ANYWHERE $SSH_PORTS -j ACCEPT # SSH клиент (22) # --------------- ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \ -s $ANYWHERE 22 \ -d $IPADDR $UNPRIVPORTS -j ACCEPT ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \ -s $IPADDR $UNPRIVPORTS \ -d $ANYWHERE 22 -j ACCEPT ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \ -s $ANYWHERE 22 \ -d $IPADDR $SSH_PORTS -j ACCEPT ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \ -s $IPADDR $SSH_PORTS \ -d $ANYWHERE 22 -j ACCEPT # ------------------------------------------------------------------ # HTTP клиент (80) # ---------------- ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \ -s $ANYWHERE 80 \ -d $IPADDR $UNPRIVPORTS -j ACCEPT ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \ -s $IPADDR $UNPRIVPORTS \ -d $ANYWHERE 80 -j ACCEPT # ------------------------------------------------------------------ # HTTPS клиент (443) # ------------------ ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \ -s $ANYWHERE 443 \ -d $IPADDR $UNPRIVPORTS -j ACCEPT ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \ -s $IPADDR $UNPRIVPORTS \ -d $ANYWHERE 443 -j ACCEPT # ------------------------------------------------------------------ # POP клиент (110) # ---------------- ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \ -s $POP_SERVER 110 \ -d $IPADDR $UNPRIVPORTS -j ACCEPT ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \ -s $IPADDR $UNPRIVPORTS \ -d $POP_SERVER 110 -j ACCEPT # ------------------------------------------------------------------ # NNTP NEWS клиент (119) # ---------------------- ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \ -s $NEWS_SERVER 119 \ -d $IPADDR $UNPRIVPORTS -j ACCEPT ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \ -s $IPADDR $UNPRIVPORTS \ -d $NEWS_SERVER 119 -j ACCEPT # ------------------------------------------------------------------ # FINGER клиент (79) # ------------------ # ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \ # -s $ANYWHERE 79 \ # -d $IPADDR $UNPRIVPORTS -j ACCEPT # ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \ # -s $IPADDR $UNPRIVPORTS \ # -d $ANYWHERE 79 -j ACCEPT # ------------------------------------------------------------------ # SYSLOG клиент (514) # ----------------- # ipchains -A output -i $LOCAL_INTERFACE_1 -p udp \ # -s $IPADDR 514 \ # -d $SYSLOG_SERVER 514 -j ACCEPT # ------------------------------------------------------------------ # AUTH сервер (113) # ----------------- # Reject лучше чем deny, для пакетов входящих на порт auth. (NET-3-HOWTO) ipchains -A input -i $EXTERNAL_INTERFACE -p tcp \ -s $ANYWHERE \ -d $IPADDR 113 -j REJECT # AUTH клиент (113) # ----------------- # ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \ # -s $ANYWHERE 113 \ # -d $IPADDR $UNPRIVPORTS -j ACCEPT # ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \ # -s $IPADDR $UNPRIVPORTS \ # -d $ANYWHERE 113 -j ACCEPT # ------------------------------------------------------------------ # SMTP клиент (25) # ---------------- ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \ -s $ANYWHERE 25 \ -d $IPADDR $UNPRIVPORTS -j ACCEPT ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \ -s $IPADDR $UNPRIVPORTS \ -d $ANYWHERE 25 -j ACCEPT # ------------------------------------------------------------------ # IRC клиент (6667) # ----------------- ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \ -s $ANYWHERE 6667 \ -d $IPADDR $UNPRIVPORTS -j ACCEPT ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \ -s $IPADDR $UNPRIVPORTS \ -d $ANYWHERE 6667 -j ACCEPT # ------------------------------------------------------------------ # ICQ клиент (4000) # ----------------- ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \ -s $ANYWHERE 2000:4000 \ -d $IPADDR $UNPRIVPORTS -j ACCEPT ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \ -s $IPADDR $UNPRIVPORTS \ -d $ANYWHERE 2000:4000 -j ACCEPT ipchains -A input -i $EXTERNAL_INTERFACE -p udp \ -s $ANYWHERE 4000 \ -d $IPADDR $UNPRIVPORTS -j ACCEPT ipchains -A output -i $EXTERNAL_INTERFACE -p udp \ -s $IPADDR $UNPRIVPORTS \ -d $ANYWHERE 4000 -j ACCEPT # ------------------------------------------------------------------ # FTP клиент (20, 21) # ------------------- # исходящий запрос ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \ -s $ANYWHERE 21 \ -d $IPADDR $UNPRIVPORTS -j ACCEPT ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \ -s $IPADDR $UNPRIVPORTS \ -d $ANYWHERE 21 -j ACCEPT # NORMAL режим, канал данных ipchains -A input -i $EXTERNAL_INTERFACE -p tcp \ -s $ANYWHERE 20 \ -d $IPADDR $UNPRIVPORTS -j ACCEPT # NORMAL mode, ответ канал данных ipchains -A output -i $EXTERNAL_INTERFACE -p tcp ! -y \ -s $IPADDR $UNPRIVPORTS \ -d $ANYWHERE 20 -j ACCEPT # PASSIVE mode, создание канала данных ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \ -s $IPADDR $UNPRIVPORTS \ -d $ANYWHERE $UNPRIVPORTS -j ACCEPT # PASSIVE mode, ответ канала данных ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \ -s $ANYWHERE $UNPRIVPORTS \ -d $IPADDR $UNPRIVPORTS -j ACCEPT # ------------------------------------------------------------------ # RealAudio / QuickTime клиент # ---------------------------- ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \ -s $ANYWHERE 554 \ -d $IPADDR $UNPRIVPORTS -j ACCEPT ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \ -s $IPADDR $UNPRIVPORTS \ -d $ANYWHERE 554 -j ACCEPT # TCP – более безопасный метод: 7070:7071 ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \ -s $ANYWHERE 7070:7071 \ -d $IPADDR $UNPRIVPORTS -j ACCEPT ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \ -s $IPADDR $UNPRIVPORTS \ -d $ANYWHERE 7070:7071 -j ACCEPT # UDP предпочтительный метод: 6970:6999 # Для машин из LAN, UDP требует модуля маскарадинга RealAudio и # программу ipmasqadm. ipchains -A input -i $EXTERNAL_INTERFACE -p udp \ -s $ANYWHERE $UNPRIVPORTS \ -d $IPADDR 6970:6999 -j ACCEPT ipchains -A output -i $EXTERNAL_INTERFACE -p udp \ -s $IPADDR $UNPRIVPORTS \ -d $ANYWHERE $UNPRIVPORTS -j ACCEPT # ------------------------------------------------------------------ # WHOIS клиент (43) # ----------------- # ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \ # -s $ANYWHERE 43 \ # -d $IPADDR $UNPRIVPORTS -j ACCEPT # ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \ # -s $IPADDR $UNPRIVPORTS \ # -d $ANYWHERE 43 -j ACCEPT # ------------------------------------------------------------------ # OUTGOING TRACEROUTE # ------------------- ipchains -A output -i $EXTERNAL_INTERFACE -p udp \ -s $IPADDR $TRACEROUTE_SRC_PORTS \ -d $ANYWHERE $TRACEROUTE_DEST_PORTS -j ACCEPT # ---------------------------------------------------------------------------- # Неограниченный трафик с локальной сетью. # Все внутренние машины имеют доступ к firewall-у. ipchains -A input -i $LOCAL_INTERFACE_1 -s $LOCALNET_1 -j ACCEPT ipchains -A output -i $LOCAL_INTERFACE_1 -d $LOCALNET_1 -j ACCEPT # ---------------------------------------------------------------------------- # FreeS/WAN IPSec VPN # ------------------- # Если вы используете FreeSWAN IPSec VPN, вам нужно заполнить адреса # адреса шлюзов в IPSECSG и виртуальные интерфейсы для # FreeS/Wan IPSEC в параметрах FREESWANVI. Смотрите начало # этого firewall скрипта для установки параметров. # IPSECSG это список удаленных шлюзов разделенных пробелами. FREESWANVI это # список виртуальных интерфейсов для FreeS/Wan IPSEC, разделенных пробелами # Включите только те, которые фактически используются # Позволяем IPSEC протокол от удаленных шлюзов на внешний интерфейс # IPSEC использует три основных типа пакетов: # IKE использует UDP протокол и 500 порт, # ESP испоьзует протол номер 50, и # AH использует протокол номер 51 # ipchains -A input -i $EXTERNAL_INTERFACE -p udp \ # -s $IPSECSG -j ACCEPT # ipchains -A output -i $EXTERNAL_INTERFACE -p udp \ # -d $IPSECSG -j ACCEPT # ipchains -A input -i $EXTERNAL_INTERFACE -p 50 \ # -s $IPSECSG -j ACCEPT # ipchains -A output -i $EXTERNAL_INTERFACE -p 50 \ # -d $IPSECSG -j ACCEPT # ipchains -A input -i $EXTERNAL_INTERFACE -p 51 \ # -s $IPSECSG -j ACCEPT # ipchains -A output -i $EXTERNAL_INTERFACE -p 51 \ # -d $IPSECSG -j ACCEPT # Разрешаем весь трафик к виртуальному интерфейсу FreeS/WAN # ipchains -A input -i $FREESWANVI \ # -s $ANYWHERE \ # -d $ANYWHERE -j ACCEPT # ipchains -A output -i $FREESWANVI \ # -s $ANYWHERE \ # -d $ANYWHERE -j ACCEPT # Пересылка всего из виртуального интерфейса в IPSEC тунель # ipchains -A forward -i $FREESWANVI \ # -s $ANYWHERE \ # -d $ANYWHERE -j ACCEPT # Отключение защиты от IP spoofing, чтобы IPSEC работал правильно # echo 0 > /proc/sys/net/ipv4/conf/ipsec0/rp_filter # echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter # ---------------------------------------------------------------------------- # Маскарадинг внутреннего трафика. # Весь внутренний трафик маскарадится. ipchains -A forward -i $EXTERNAL_INTERFACE -s $LOCALNET_1 -j MASQ # ---------------------------------------------------------------------------- # Включение регистрации выбранных запрещенных пакетов ipchains -A input -i $EXTERNAL_INTERFACE -p tcp \ -d $IPADDR -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -p udp \ -d $IPADDR $PRIVPORTS -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -p udp \ -d $IPADDR $UNPRIVPORTS -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \ -s $ANYWHERE 5 -d $IPADDR -j DENY -l ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \ -s $ANYWHERE 13:255 -d $IPADDR -j DENY -l # ---------------------------------------------------------------------------- ;; stop) echo -n "Shutting Firewalling Services: " # Remove all existing rules belonging to this filter ipchains -F # Delete all user-defined chain to this filter ipchains -X # Reset the default policy of the filter to accept. ipchains -P input ACCEPT ipchains -P output ACCEPT ipchains -P forward ACCEPT ;; status) status firewall ;; restart|reload) $0 stop $0 start ;; *) echo "Usage: firewall {start|stop|status|restart|reload}" exit 1 esac exit 0
Сделайте этот скрипт исполняемым и измените права доступа
[root@deep /]# chmod 700 /etc/rc.d/init.d/firewall
[root@deep /]# chown 0.0 /etc/rc.d/init.d/firewall
Создайте символическую rc.d ссылку для вашего Firewall следующей командой:
[root@deep /]# chkconfig --add firewall
[root@deep /]# chkconfig --level 345 firewall on
Сейчас ваши правила для firewall готовы к использованию с System V init (System V init запускает все нормальные процессы, которые надо стартовать во время загрузки системы) и будут автоматически стартовать при каждой загрузке сервера.
Ручная остановка firewall:
[root@deep /]# /etc/rc.d/init.d/firewall stop Shutting Firewalling Services: [ OK ]
Запуск firewall вручную:
[root@deep /]# /etc/rc.d/init.d/firewall start Starting Firewalling Services: [ OK ]
Маскарадинг и форвардинг в Linux
Краткий обзор.
Конфигурирование Linux сервера на маскарадинг и форвардинг трафика из внутренней локальной сети, имеющей приватные адреса (192.168.1.0/24), в Интернет требует специальных настроек ядра и вашего конфигурационного скрипта брандмауэра. Этот вид установок известен как Шлюз. Данная конфигурация должна быть установлена, только если у вас возникнет в этом необходимость, поэтому ей посвящена отдельная глава.
Создание ядра с поддержкой маскарада и форвардинга.
Первое о чем вы должны подумать, это чтобы ваше ядро было создано с поддержкой файрвола и файрволинга. Помните, что все сервера должны быть настроены на блокирование неиспользуемых портов, даже если они не выступают в роли брандмауэра. В ядре 2.2.14 вам нужно ответить Yes на следующие вопросы:
Networking options:
Network firewalls (CONFIG_FIREFALL) [N] Y
IP:Firewalling (CONFIG_IP_FIREWALL) [N] Y
IP:TCP syncookie support (CONFIG_SYN_COOKIES) [N] Y
ЗАМЕЧАНИЕ. Если при создание ядра вы использовали материалы из главы 3, то все необходимые опции (“Network firewalls, IP:Firewalling и IP:TCP syncookie support”) были отмечены.
IP маскарадинг и IP ICMP маскарадинг требуются только для шлюза.
IP:Masquerading (CONFIG_IP_MASQUERADE) [N] Y
IP:ICMP Masquerading (CONFIG_IP_MASQUERADE_ICMP) [N] Y
Маскарадинг необходим, если один из компьютеров вашей локальной сети, для которой вашей Linux сервер (или Шлюз) является брандмауэром, пытается послать пакеты в Интернет и шлюз “притворяется” этим компьютером. Другими словами, при пересылке всех пакетов из внутренней сети во внешнюю, шлюз делает вид, что все пакеты идут от него. Это работает в обе стороны, если внешний хост отвечает, то шлюз будет пересылать все пакеты во внутреннюю сеть нужному компьютеру. В результате все внутренние компьютеры полностью не видимы для внешнего мира, но при этом имеют туда доступ и могут получать оттуда ответы.
IP маскарадинг работает только если у вас включен IP форвардинг. Эта возможность по умолчанию отключена и что бы включить ее используйте следующие команды:
Под Red Hat 6.1
[root@deep /]# echo "1" > /proc/sys/net/ipv4/ip_forward
Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера. В Red Hat 6.1 это можно также сделать внеся изменения в файл “/etc/sysconfig/network”:
FORWARD_IPV4="false”
Должен читаться:
FORWARD_IPV4="yes"
Вы должны перезагрузить ваши сетевые настройки, чтобы изменения вступили в силу.
[root@deep /]# /etc/rc.d/init.d/ network restart Bringing up interface lo [ OK ] Bringing up interface eth0 [ OK ] Bringing up interface eth1 [ OK ]
Лично я предпочитаю второй способ включения форвардинга.
Под Red Hat 6.2:
Редактируйте файл “/etc/sysctl.conf” и добавьте следующую строку:
# Enable packet forwarding
net.ipv4.ip_forward = 1
Вы должны перезагрузить ваши сетевые установки, чтобы изменения вступили в силу.
[root@deep /]# /etc/rc.d/init.d/network restart Setting network parameters [ OK ] Bringing up interface lo [ OK ] Bringing up interface eth0 [ OK ] Bringing up interface eth1 [ OK ]
ЗАМЕЧАНИЕ. Строка IP forwarding, введенная выше, нужна только если вы ответили “Yes” на вопрос “IP:Masquerading (CONFIG_IP_MASQUERADE)” при конфигурировании ядра и решили сделать из сервера шлюз с маскарадингом для вашей внутренней сети.
Если вы включили IP Masquerading, тогда будут автоматически скомпилированы модули ip_masq_ftp.o (для обмена файлов по протоколу ftp), ip_masq_irc.o (для irc чатов), ip_masq_quake.o (догадайтесь сами для чего он), ip_masq_vdolive.o (для VDOLive видео), ip_masq_cuseeme.o (для CU-SeeMe broadcasts) и ip_masq_raudio.o (для RealAudio). Они нужны, чтобы работал маскарадинг для этих протоколов. Вам нужно будет создать модульное ядро, ответив Yes на вопрос “Enable loadable module support (CONFIG_MODULES)”, вместо монолитного, чтобы разрешить использование функции маскарадинга и модулей подобных ip_masq_ftp.o.
Основной код маскарадинга, включаемый опцией "IP: masquerading", обрабатывает только TCP или UDP пакеты (и ICMP ошибки для существующих соединений). Опция IP:ICMP Masquerading включает дополнительную поддержку для маскарадинга ICMP пакетов, таких как ping или исследований проводимых программой tracer из Windows 95.
ЗАМЕЧАНИЕ. Помните, что у других серверов, например, Веб или почтового, эти опции включать не надо, так как они имеют постоянно присвоенный им IP адрес или не выступают в роли Шлюза для внутренней сети.
Некоторые моменты для обсуждения.
Вы можете спокойно предполагать, что находитесь в постоянной опасности, если подключены к Интернет. Ваш шлюз в Интернет – основной источник тревоги, так что я рекомендую следующее:
На шлюзе должны быть запущены только самые необходимые приложения;
Шлюз должен строго ограничивать типы и число протоколов проходящих через него (протоколы потенциально опасные, например, telnet и ftp);
К любым системам, хранящим конфиденциальную информацию, не должно быть прямого доступа из Интернет.
Запрещение доступа с некоторых адресов.
Иногда, вы можете встретить адреса с которых вы бы хотели закрыть весь доступ на все ваши сервера. Вы можете создать файл rc.firewall.blocked в каталоге “/etc/rc.d/” и раскомментировать следующие строки в скрипте firewall:
if [ -f /etc/rc.d/rc.firewall.blocked ]; then
. /etc/rc.d/rc.firewall.blocked
fi
Создайте файл rc.firewall.blocked (touch /etc/rc.d/rc.firewall.blocked) и добавьте в него все IP адреса, доступ с которых вы хотите заблокировать. Например,
204.254.45.9
187.231.11.5
Часть IV Рекомендации связанные с программным обеспечением
В этой части
Функциональные возможности компилятора
Глава 10 Программы обеспечения безопасности (Утилиты контроля)
Программы обеспечения безопасности (Сетевые сервисы)
Программы обеспечения безопасности (Целостность системы)
Программы обеспечения безопасности (Управление и ограничения)
Серверное программное обеспечение (BIND/Сервис DNS)
Серверное программное обеспечение (Почтовый сервис)
Серверное программное обеспечение (Сетевой сервис шифрования)
Серверное программное обеспечение (Сервис баз данных)
Серверное программное обеспечение (Прокси сервис)
Серверное программное обеспечение (Веб сервис)
Опциональные компоненты устанавливаемые с веб-сервером Apache
Серверное программное обеспечение (Файловый сервис)
Функциональные возможности компилятора
В этой главе
Общий обзор.
Сейчас мы в одном из самых интересных мест установки – мы будем компилировать и инсталлировать все сервисы, которые необходимы на сервере. Прежде чем мы начнем объяснять, как создать необходимое программное обеспечение, настроенное на максимальную безопасность и эффективность, важно узнать какими командами и программами мы будем пользоваться. Прежде всего, нужно проверить, что у нас установлены все необходимые пакеты, нужные для компиляции серверного программного обеспечения.
Компиляция программного обеспечения на вашей системе
Программы – это то, что компьютер может выполнять. Изначально, кто-то написал “исходные коды” на языке программирования который он/она знает (например, C, C++ и т.д.). Исходные коды обрабатываются компилятором, который преобразует инструкции в двоичные коды, подходящие под требуемый процессор (например, 386). Современным форматом исполняемых фалов является elf. Программист передает исходные коды компилятору и получает исполняемые файлы. Часто процесс компиляции завершается ошибкой или полученная программа не работает как надо. Половину времени процесса программирования составляет отслеживание и исправление этих проблем.
Для начинающих имеется много аспектов и новых терминов, относящихся к компиляции, которые вы должны знать. Ниже описаны некоторые из них:
Multiple Files
Программы, состоящие из одного файла встречаются редко. Обычно в него входит несколько файлов (скажем, *.c, *.cpp и т.д.), каждый из которых компилируется в объектные коды, а затем они компонуются в исполняемый файл. Компилятор обычно используется для компоновки и вызывает в заключение программу ld.
Makefiles
Makefiles предназначен, чтобы помочь вам при формировании программы, проходить один и тот же путь. Она также сокращает время работы над программой. Программа “make” использует зависимости, описанные в Makefiles, чтобы решить, какие части программы надо перекомпилировать. Если вы измените один файл из пятидесяти, вам потребуется выполнить одну компиляцию и одну компоновку, вместо выполнения полного процесса сначала.
Библиотеки (Libraries).
Программы могут компоноваться не только в объектные файлы, но в библиотеки, которые содержат наборы таких файлов. Существует две формы компоновки библиотек: статическая, когда коды встраиваются в исполняемые файлы, и динамическая, когда коды собираются в момент запуска программы.
Патчи (Patches).
Для исправления ошибок, люди модифицируют небольшую часть исходных кодов, помещая внесенные изменения в файл, называемый патчем. Когда требуется иметь две различные версии программы, небольшие изменения кода можно сохранить этим путем, а не хранить две большие программы.
Ошибки при компиляции и компоновке.
Ошибки при компиляции и компоновке часто возникают из-за недосмотра и неправильного использования языка. Проверьте, что для функций, которые вы вызываете используются правильные заголовочные файлы. Неупомянутые символы (Unreferenced symbols) являются признаком незавершенности шага компоновки. Также проверьте, все ли необходимые библиотеки (GLIBC) и утилиты (GCC, DEV86, AUTOMAKE и т.д.) установлены на вашей системе.
Отладка.
Отладка – это отдельная большая тема. При отладке в код помещаются инструкции, которые сообщают вам о происходящем. Чтобы не утонуть в огромном количестве выводимой информации, вы можете распечатать только первые три прохода в цикле. Также она помогает проверить, что все переменные корректно передаются между модулями. Получше ознакомьтесь с вашими средствами отладки.
Некоторые последние комментарии
Перед переходом к чтению следующей части книги мне бы хотелось отметить, что в тексте подразумевается расположение некоторых файлов в определенных каталогах. Для соглашения, мы принимаем, что они расположены там, где это определено в дистрибутиве Red Hat. Если вы используете другой дистрибутив Linux или эти файлы расположены у вас в других местах, то будьте очень внимательны при копировании примеров из текста книги.
В этой части книги, все программное обеспечение перечисленное в главах с 10 по 21 необязательно, и зависит от того, что необходимо вашему серверу (например, какие задачи будет решать ваш сервер и для какой части Интернет/Интранет). Хотя некоторые программы могут быть очень важны для вас. Полезно заменить telnet на ssh для более безопасного удаленного администрирования сервера. Другая интересная программа – Tripware, которая помогает следить за целостностью определенных программ.
Необходимые пакеты.
Следующие пакеты нужны, чтобы осуществлять компиляцию на вашей системе после создания нового ядра. Эти пакеты находятся на Red Hat Linux 6.1 или 6.2 Part 1 CD-ROM в каталоге RedHat/RPMS:
Red Hat 6.1 | Red Hat 6.2 | ||
autoconf-2.13-5.noarch.rpm m4-1.4-12.i386.rpm automake-1.4-5.noarch.rpm dev86-0.14.9-1.i386.rpm bison-1.28-1.i386.rpm byacc-1.9-11.i386.rpm cdecl-2.5-9.i386.rpm cpp-1.1.2-24.i386.rpm cproto-4.6-2.i386.rpm ctags-3.2-1.i386.rpm egcs-1.1.2-24.i386.rpm ElectricFence-2.1-1.i386.rpm flex-2.5.4a-7.i386.rpm gdb-4.18-4.i386.rpm kernel-headers-2.2.12-20.i386.rpm glibc-devel-2.1.2-11.i386.rpm make-3.77-6.i386.rpm patch-2.5-9.i386.rpm | autoconf-2.13-5.noarch.rpm m4-1.4-12.i386.rpm automake-1.4-6.noarch.rpm dev86-0.15.0-2.i386.rpm bison-1.28-2.i386.rpm byacc-1.9-12.i386.rpm cdecl-2.5-10.i386.rpm cpp-1.1.2-30.i386.rpm cproto-4.6-3.i386.rpm ctags-3.4-1.i386.rpm egcs-1.1.2-30.i386.rpm ElectricFence-2.1-3.i386.rpm flex-2.5.4a-9.i386.rpm gdb-4.18-11.i386.rpm kernel-headers-2.2.14-5.0.i386.rpm glibc-devel-2.1.3-15.i386.rpm make-3.78.1-4.i386.rpm patch-2.5-10.i386.rpm |
ЗАМЕЧАНИЕ. Лучше все программы описанные выше инсталлировать одновременно, чтобы избежать сообщений об ошибках зависимостей от RPM. Если вы следовали по всем шагам, описанным в “Инсталляция вашего Linux сервера”, то все эти пакеты уже проинсталлированы в вашей системе и вам нет необходимости заново их переинсталлировать.
RPM команда для инсталляции пакета:
[root@deep /]# rpm -Uvh foo-1.0-2.i386.rpm
RPM команда для проверки, инсталлирован ли пакет или нет:
[root@deep /]# rpm -q foo
После завершения инсталляции и компиляции программ нужных серверу, очень важно деинсталлировать все вышеназванные пакеты. Это защитит вашу систему от неавторизованного использования компилирующих программ. Также переместите исполняемый файл rpm в безопасное место, например, на гибкий диск, тогда злоумышленник не сможет установить свои программы из rpm пакета и будет вынужден компилировать их на месте, а доступа к компилятору нет.
Для перемещения rpm на дискету:
[root@deep /]# mount /dev/fd0 /mnt/floppy/
[root@deep /]# mv /bin/rpm /mnt/floppy
[root@deep /]# umount /mnt/floppy/
Для возврата rpm в оригинальный каталог:
[root@deep /]# mount /dev/fd0 /mnt/floppy/
[root@deep /]# cp /mnt/floppy/rpm /bin/
[root@deep /]# umount /mnt/floppy/
ЗАМЕЧАНИЕ. Никогда не деинсталлируйте пакет RPM полностью с вашего сервера, иначе вы не сможете проинсталлировать его по новой, потому что для инсталляции любого rpm пакета требуется наличие программы rpm.
Почему мы выбираем использование тарболов?
Все дистрибьюции Red Hat поставляются в RPM файлах, которые известны также как “пакеты”. Этот способ поставки программ характеризуется упрощением процесса их инсталляции, обновления и удаления. Однако, в мире UNIX, стандартом де-факто для пакетов программ является тарбол. Тарбол это просто сжатые файлы, которые могут быть прочитаны и раскрыты при помощи утилиты tar. Инсталляция программ из тарбола более тяжелый процесс, чем из rpm. Так почему мы будем использовать тарболы?
К сожалению требуется несколько недель, чтобы вышел rpm пакет новой версии программы, так как разработчики выпускают их обычно в тарболе. Когда разработчики и поставщики выпускают rpm пакет, они включают в них много разных опций, часто не нужных. Эти организации и компании не знают какие опции вам нужны, а какие нет, поэтому включают наиболее часто используемые. Часто RPM не оптимизированы под определенный процессор; компании подобные Red Hat создают пакет базирующийся на стандартном PC. Это позволяет инсталлировать программы на всех компьютерах, начиная с i386. Иногда, вы скачиваете и инсталлируете RPM, которые другие люди создали и сделали доступным для ваших целей. В зависимости от того, как создавался пакет, могут возникать множество разных проблем, таких как ошибки, проблемы с безопасностью и прочие, описанные выше.
Редактирование файлов с vi
Текстовый редактор vi может быть использован для редактирования любых текстовых файлов. В процессе инсталляции программ, пользователь должен часто редактировать текстовые файлы, подобные Makefiles, или конфигурационные файлы. Ниже представлено несколько наиболее важных ключевых строк, необходимых для работы с vi:
i – говорить vi вставить текст перед курсором.
a – говорить vi добавить текст после курсора.
dd – говорить vi удалить текущую строку.
x - говорить vi удалить текущий символ.
Esc - говорить vi выйти из режима вставки или добавления.
u – говорить vi отменить действие последней команды.
Ctrl+f – прокрутить текст на одну страницу вверх.
Ctrl+b - прокрутить текст на одну страницу вниз.
/string – искать строку.
:f – вывести имя файла и текущий номер строки
:q – закончить редактирование
:q! – выйти из редактора без записи изменений
:wq – записать изменения и выйти из редактора
Создание и инсталляция программ на вашей системе
С 10 по 20 главы вы увидите, что мы используем много разных команд компиляции для создания и инсталляции программ на сервере. Эти команды совместимы с UNIX и используются на всех вариантах *nix систем для компиляции и инсталляции программного обеспечения.
Ниже приводятся шаги необходимые для компиляции и инсталляции программного обеспечения из тарбола.
1. Вы должны скачать тарбол с сервера, которому доверяете. Обычно, это основной сервер программы
2. После того как тарбол скачен, перейдите в каталог /vat/tmp (заметим, что другой путь также возможен, это решать вам) и раскройте архив (как root), обычно, следующей командой:
[root@deep /]# tar xzpf foo.tar.gz
Вышеприведенная команда извлечет все файлы из архива foo.tar.gz и поместит их в новый каталог с именем этой программы, который создаст автоматически в месте, где вы сейчас расположены.
Опция “x” говорит tar извлечь все файлы из архива.
Опция “z” говорит, что tar архив был сжат при помощи gzip.
Опция “p” сохраняет оригинал и права доступа к файлам в том виде, каком они существовали при создании архива.
Опция “f” говорит tar, что следующий аргумент это имя файла.
После того как тарбол был раскрыт, вы почти наверняка сможете найти в каталоге файлы README или INSTALL с инструкциями, как приготовить программное обеспечение к использованию. Скорее всего, вам надо будет ввести следующие команды:
./configure
make
make install
configure – будет конфигурировать программное обеспечение, чтобы гарантировать, что ваша система имеет функциональные возможности и библиотеки необходимые для успешной компиляции пакета. “make” будет компилировать все исходные файлы в исполняемые. “make install” – инсталлирует исполняемые и все сопутствующие файлы в определенное место.
Другие специальные команды, которые вы встретите в этой книге:
make depend
strip
chown
“make depand” будет создавать необходимые зависимости для различных файлов. “strip” будет удалять все символы из объектных файлов. В результате все исполняемые файлы будут меньшего размера. Это улучшит производительность программы, так как системе будет необходимо читать меньше строк при исполнении данного двоичного файла. “chown” будет устанавливать правильных владельцев файлов и разрешения для групп.
Административная утилита sXid.
Эта программа предназначена для запуска с помощью cron. Она должна запускаться один раз в день, но можно и два раза.
Для запуска sxid вручную введите команду:
[root@deep /]# sxid -k
sXid Vers : 4.0.1
Check run : Wed Dec 29 12:40:32 1999
This host : mail.openna.com
Spotcheck : /home/admin
Excluding : /proc /mnt /cdrom /floppy
Ignore Dirs: /home
Forbidden : /home /tmp
No changes found
Она проверяет изменения в текущем рабочем каталоге. Ротации файлов регистрации и отправки сообщений по почте не происходит. Все результаты выводятся в stdout.
Инсталлированные файлы.
> /etc/sxid.conf > /usr/bin/sxid > /usr/man/man1/sxid.1 > /usr/man/man5/sxid.conf.5
Компиляция и оптимизация.
Вы должны редактировать файл “Makefile” PortSentry, чтобы определить инсталляционные пути, флаги компиляции и оптимизации для вашей системы. Место, куда будет установлен PortSentry должно соответствовать структуре расположения системных файлов Red Hat.
Шаг 1.
Переместитесь в новый каталог PortSentry и выполните следующие команды:
Редактируйте файл Makefile (vi Makefile) и измените следующие строки:
CC = cc
Должна читаться:
CC = egcs
CFLAGS = -O
Должна читаться:
CFLAGS = -O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions -Wall
INSTALLDIR = /usr/local/psionic
Должна читаться:
INSTALLDIR = /usr/ psionic
Вышеприведенные изменения настраивают на использование компилятора egcc, включают оптимизационные флаги подходящие для вашей системы и определяют месторасположение файлов PortSentry, которое вы выберите.
Шаг 2.
Так как мы использовали альтернативное месторасположение файлов (не /usr/local/psionic), нужно изменить путь к конфигурационному файлу PortSentry в основном заголовочном файле “portsentry_config.h”.
Перемещаемся в новый каталог PortSentry и редактируем файл portsentry_config.h (vi portsentry_config.h), изменяя следующие строки:
#define CONFIG_FILE "/usr/local/psionic/portsentry/portsentry.conf"
Должен читаться:
#define CONFIG_FILE "/usr/psionic/portsentry/portsentry.conf"
Шаг 3
Инсталируем Portsentry на вашей системе.
[root@deep portsentry-1.0]# make linux
[root@deep portsentry-1.0]# make install
Вышеприведенныя команды будут настраивать программу на операционную систему Linux, компилировать, создавать и в заключение инсталлировать файлы в заданное место.
Конфигурации.
Все программное обеспечение, описанное в книге, имеет определенный каталог и подкаталог в архиве “floppy.tgz”, включающей все конфигурационные файлы для всех программ. Если вы скачаете этот файл, то вам не нужно будет вручную воспроизводить файлы из книги, чтобы создать свои файлы конфигурации. Скопируйте файл из архива и измените его под свои требования. Затем поместите его в соответствующее место на сервере, так как это показано ниже. Файл с конфигурациями вы можете скачать с адреса:
Для запуска sXid должен быть создан или скопирован файл sxid.conf в каталог /etc.
Настройка файла “/etc/sxid.conf”.
Конфигурационный файл “/etc/sxid.conf” позволяет вам установить опции, которые управляют действиями программы.
Шаг 1.
Редактируйте файл sxid.conf file (vi /etc/sxid.conf) и измените все, что нужно: # Конфигурационный файл для sXid # Замечу, что все пути должны быть абсолютными без замыкающих / # Где начинать поиск файлов SEARCH = "/" # Какие каталоги исключить из поиска EXCLUDE = "/proc /mnt /cdrom /floppy" # Кому посылать отчеты EMAIL = "root" # Всегда посылать отчеты, даже если нет изменений? ALWAYS_NOTIFY = "no" # Где хранить промежуточные логи. Они будут циклически ротироваться 'x' раз # согласно KEEP_LOGS LOG_FILE = "/var/log/sxid.log" # Как много логов хранить KEEP_LOGS = "5" # Сдвигать логи когда не произошло изменений? ALWAYS_ROTATE = "no" # Каталоги, где +s запрещены (они проверяются даже # если явно на прописнаы в SEARCH), правила EXCLUDE применяются FORBIDDEN = "/home /tmp" # Удалять (-s) из файлов найденных в запрещенном каталоге? ENFORCE = "yes" # Это предполагает ALWAYS_NOTIFY. Будет посылаться полный список # элементов наряду с изменениями LISTALL = "no" # Игнорировать элементы для каталогов в этом пути # (Это означает, что файлы будут только регистрироваться, вы # можете эффективно игнорировать все элементы каталогов # установив это в "/"). По умолчанию - /home, так как # в некоторых системах /home имеет g+s. IGNORE_DIRS = "/home" # Файл, который содержит список (каждый в новой строке) # других файлов, которые sxid должен проверять. Это полезно # для файлов, не имеющих +s, но относящихся к целостности # системы (tcpd, inetd, apache...). # EXTRA_LIST = "/etc/sxid.list" # Почтовая программа. Это опция изменяет определенную при компиляции # почтовую программу для отчетов. Эта опция нужно только если вы изменили # месторасположение по умолчанию и не хотите перекомпилировать sxid. # MAIL_PROG = "/usr/bin/mail"
Шаг 2.
Поместите соответствующий элемент в crontab файл пользователя root, чтобы sXid выполнялся автоматически. sXid будет автоматически запускаться и будет отслеживать появление новых s[ug]id программ, изменений произошедших с существующими (снятие этого бита, изменение режима и пр.), их удаление, составляя вам отчет о произошедших событиях.
Для редактирования crontab введите следующую команду:
[root@deep /]# crontab -e
И добавьте следующую строку в crontab (запуск каждый день в 4 часа утра):
0 4 * * * /usr/bin/sxid
Дополнительная документация.
Для получения большей информации, читайте соответствующие man страницы:
$ man sxid.conf (5) – конфигурационные устаноки для sxid
$ man sxid (1) – проверяет изменения в s[ug]id файлах и каталогах
Сейчас, вы должны проверить/ изменить права установленные по умолчанию из соображения безопасности:
[root@deep /]# chmod 600 /usr/psionic/portsentry/portsentry.conf
Конфигурирование файла “/usr/psionic/portsentry/portsentry.ignore”.
В файл “/usr/psionic/portsentry/portsentry.ignore” вы добавляете компьютеры, которые должны быть проигнорированы если они соединяются к порту. Он всегда должен содержать localhost адрес (127.0.0.1) и адреса локальных машин. Не рекомендуется помещать в него все компьютеры из вашей локальной сети. Редактируйте фай portsentry.ignore file (vi /usr/psionic/portsentry.ignore) и добваьте в него все хосты, которые будут пропущены: # Положите сюда адреса хостов, которые мы никогда не будем блокировать.
# Здесь должны находится адреса всех локальных интерфейсов на
# защищаемом сервере (например, virtual host, mult-home)
# Сохраните здесь 127.0.0.1 и 0.0.0.0.
127.0.0.1
0.0.0.0
Сейчас, мы должны проверить/изменить права доступа из соображений безопасности: [root@deep /]# chmod 600 /usr/psionic/portsentry/portsentry.ignore
Конфигурация.
Так как мы использовали альтернативное месторасположение файлов, нам необходимо изменить пути к “logcheck.hacking”, “logcheck.violations”, “logcheck.ignore”, “logcheck.violations.ignore” и “logtail” в основном скрипте logcheck.sh. Скрипт файл для Logcheck “/usr/bin/logcheck.sh” позволяет настроить опции, которые модифицируют пути и действия программы. Он хорошо комментирован и очень прост.
Шаг 1.
Редактируйте файл logcheck.sh (vi /usr/bin/logcheck.sh) и измените следующее:
LOGTAIL=/usr/local/bin/logtail
Должна читаться:
LOGTAIL=/usr/bin/logtail
TMPDIR=/usr/local/etc/tmp
Должна читаться:
TMPDIR=/etc/logcheck/tmp
HACKING_FILE=/usr/local/etc/logcheck.hacking
Должна читаться:
HACKING_FILE=/etc/logcheck/logcheck.hacking
VIOLATIONS_FILE=/usr/local/etc/logcheck.violations
Должна читаться:
VIOLATIONS_FILE=/etc/logcheck/logcheck.violations
VIOLATIONS_IGNORE_FILE=/usr/local/etc/logcheck.violations.ignore
Должна читаться:
VIOLATIONS_IGNORE_FILE=/etc/logcheck/logcheck.violations.ignore
IGNORE_FILE=/usr/local/etc/logcheck.ignore
Должна читаться:
IGNORE_FILE=/etc/logcheck/logcheck.ignore
Шаг 2.
Поместите соответствующий элемент в crontab файл пользователя root, чтобы Logcheck выполнялся автоматически каждый час (рекомендуется, можете запускать его чаще или реже).
Для редактирования crontab введите следующую команду:
[root@deep /]# crontab -e
И добавьте следующую строку в crontab:
# Ежечасная проверка системных журналов на предмет
# нарушений защиты и необычной активности.
00 * * * * /usr/bin/logcheck.sh
ЗАМЕЧАНИЕ. Запомните, что Logcheck не присылает отчеты по электронной почте, если ему нечего сказать.
Проинсталлированные файлы.
> /etc/logcheck > /usr/bin/logcheck.sh > /etc/logcheck/tmp > /etc/logcheck/logcheck.hacking > /etc/logcheck/logcheck.violations > /etc/logcheck/logcheck.violations.ignore > /etc/logcheck/logcheck.ignore > /usr/bin/logtail > /var/log/messages.offset > /var/log/secure.offset > /var/log/maillog.offset
Краткий обзор.
Брандмауэры помогают нам защитить сеть от вторжений. С их помощью мы выбираем какие порты открыть, а какие нет. Никто снаружи нашей сети не владеет информацией об этом, но может попытаться организовать атаку при помощи программ сканирования портов. Они покажут какие порты у нас открыты.
Как сказано во введение к PortSentry:
Сканирование портов это симптом больших проблем, которые вас ждут. Это часто является предвестником атак. PortSentry – это программа созданная для определения и ответа на сканирование портов в реальном времени. Когда сканирование обнаружено могут последовать следующие ответы:
занесение информации об инциденте в системный журнал через syslog().
Компьютер замеченный в сканировании автоматически заносится в файл “/etc/host.deny” для TCP Wrappers.
Локальный компьютер автоматически перенастраивается, чтобы направлять весь трафик от атакующего на несуществующий компьютер.
Локальный компьютер автоматически перенастраивается, чтобы блокировать все пакеты от атакующего пакетным фильтром.
Цель этой программы – дать администратору информацию о том, что их сервер исследуется.
Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам “/var/tmp” (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем “root”.
PortSentry версии 1.0
Пакеты.
Домашняя страница Logcheck:
Вы должны скачать: portsentry-1.0.tar.gz
Тарбол.
Хорошей идеей будет создать список файлов установленных в вашей системе до инсталляции PortSentry и после, в результате, с помощью утилиты diff вы сможете узнать какие файлы были установлены. Например,
До инсталляции:
find /* > Portsentry1
После инсталляции:
find /* > Portsentry2
Для получения списка установленных файлов:
diff Portsentry1 Portsentry2 >
Portsentry-Installed
Раскрываем тарбол (tar.gz).
[root@deep /]# cp portsentry-version.tar.gz /var/tmp/
[root@deep /]# cd /var/tmp
[root@deep tmp]# tar xzpf portsentry-version.tar.gz
Linux Logcheck
Одной из важнейших задач в мире обеспечения безопасности является анализ файлов регистраций. Часто, повседневные работы администратора не оставляют ему время на это, что может привести к ряду проблем.
В кратком обзоре Logcheck сказано:
Ревизия и регистрация системных событий чрезвычайно важна. Системный администратор должен знать о происходящих событиях, чтобы суметь предотвратить возникновение проблем, особенно если система подключена к Интернет. К сожалению, для большинства версий UNIX регистрация событий не имеет значение, так как лог файлы никто не просматривает. Это то, в чем вам может помочь Logcheck. Он автоматизирует ревизию зарегистрированных событий, отфильтровывая “нормальные” сообщения, чтобы вы могли концентрировано посмотреть на проблемы и на потенциальных нарушителей.
Logcheck – это программное обеспечение, которое создано, чтобы автоматически проверять системные журналы на предмет нарушений защиты и необычной активности. Она использует программу logtail, которая запоминает последнюю позицию, считанную из системного журнала, и использует ее при следующем запуске для получения новой информации.
Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам “/var/tmp” (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем “root”.
Logcheck версии 1.1.1
Пакеты.
Домашняя страница Logcheck:
Вы должны скачать: logcheck-1.1.1.tar.gz
Тарбол.
Хорошей идеей будет создать список файлов установленных в вашей системе до инсталляции Logcheck и после, в результате, с помощью утилиты diff вы сможете узнать какие файлы были установлены. Например,
До инсталляции:
find /* > Logcheck1
После инсталляции:
find /* > Logcheck2
Для получения списка установленных файлов:
diff Logcheck1 Logcheck2 > Logcheck-Installed
Раскрываем тарбол (tar.gz).
[root@deep /]# cp logcheck-version.tar.gz /var/tmp/
[root@deep /]# cd /var/tmp
[root@deep tmp]# tar xzpf logcheck-version.tar.gz
Компиляция и оптимизация.
Вы должны редактировать файл “Makefile” Logcheck-а, чтобы определить инсталляционные пути, флаги компиляции и оптимизации для вашей системы. Место, куда будет установлен Logcheck должно соответствовать структуре расположения системных файлов Red Hat,а расположение скрипта Logcheck переменной окружения PATH.
Шаг 1.
Переместитесь в новый каталог Logcheck и выполните следующие команды:
Редактируйте файл Makefile (vi Makefile) и измените следующие строки:
CC = cc
Должна читаться:
CC = egcs
CFLAGS = -O
Должна читаться:
CFLAGS = -O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions
INSTALLDIR = /usr/local/etc
Должна читаться:
INSTALLDIR = /etc/logcheck
INSTALLDIR_BIN = /usr/local/bin
Должна читаться:
INSTALLDIR_BIN = /usr/bin
INSTALLDIR_SH = /usr/local/etc
Должна читаться:
INSTALLDIR_SH = /usr/bin
TMPDIR = /usr/local/etc/tmp
Должна читаться:
TMPDIR = /etc/logcheck/tmp
Вышеприведенные изменения настраивают на использование компилятора egcc, включают оптимизационные флаги подходящие для вашей системы и определяют месторасположение файлов Logcheck, соответствующее структуре размещения системных файлов Red Hat.
Шаг 2
Редактируйте файл Makefile (vi +67 Makefile) и измените следующую строку:
@if [ ! -d $(TMPDIR) ]; then /bin/mkdir $(TMPDIR); fi
Должна читаться:
@if [ ! -d $(TMPDIR) ]; then /bin/mkdir -p $(TMPDIR); fi
Вышеупомянутое изменение (-p) позволит инсталляционной программе создавать родительские каталоги, когда это необходимо.
Шаг 3.
Инсталляция Logcheck на вашей системе:
[root@deep logcheck-1.1.1]# make linux
Вышеприведенная команда будут настраивать программу на операционную систему Linux, компилировать все исходные файлы в исполняемые двоичные, и затем, инсталлировать все двоичные и вспомогательные файлы в определенное место.
Очистка после работы.
[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf logcheck-version/ logcheck-version_tar.gz
Команда “rm”, использованная выше, будет удалять все исходные коды, которые мы использовали при компиляции и инсталляции Logcheck. Она также удалит .tar.gz архив из каталога /var/tmp.
Linux sXid
SUID/SGID файлы несут в себе риск для безопасности. Для уменьшения этого риска, мы убрали бит “s” с программ, владельцем которых является root, и которым эти полномочия не нужны, но возможно в будущем, на существующие программы может быть установлен этот бит без предупреждения. sXid – это программа для контроля за SUID/SGID программами, запеускаемая из cron. В основном, она отслеживает любые изменения в suid-ных программах и папках. Если появились новые файлы, или у существующих программ этот бит снят, или в них изменились биты или другие режимы, то sXid сообщит вам об этом по электронной почте или в командной строке в удобочитаемом формате. sXid автоматизирует задачу поиска всех SUID/SGID файлов на сервере и известит вас о них. После ее инсталляции вы можете забыть об этой работе, она сделает все за вас.
Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам “/var/tmp” (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем “root”.
sXid версии 4.0.1
Пакеты.
FTP сервер:
Вы должны скачать: sxid_4.0.1.tar.gz
Тарболы.
Хорошей идеей будет создать список файлов установленных в вашей системе до инсталляции sXid и после, в результате, с помощью утилиты diff вы сможете узнать какие файлы были установлены. Например,
До инсталляции:
find /* > sXid1
После инсталляции:
find /* > sXid2
Для получения списка установленных файлов:
diff sXid1 sXid2 > sXid-Installed
Раскройте тарбол:
[root@deep /]# cp sxid_version.tar.gz /var/tmp/
[root@deep /]# cd /var/tmp
[root@deep tmp]# tar xzpf sxid_version.tar.gz
Компиляция и оптимизация.
Переместитесь в новый каталог sXid и выполните следующие команды:
[root@deep tmp]# cd sxid-4.0.1
[root@deep sxid-4.0.1]# make install
Вышеприведенные команды будут конфигурировать программу, проверяя, что ваша система имеет необходимые библиотеки и способна выполнять необходимые функции, компилирует все исходные файлы в исполняемые, и затем, инсталлирует все двоичные и вспомогательные файлы в определенное место.
Очистка после работы.
[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf sxid-version/ sxid_version_tar.gz
Команда “rm”, использованная выше, удалит все исходные коды, которые мы использовали при компиляции и инсталляции sXid. Она также удалит .tar.gz архив.
Очистка после работы
[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf portsentry-version/ portsentry-version_tar.gz
Команда “rm”, использованная выше, будет удалять все исходные коды, которые мы использовали при компиляции и инсталляции PortSentry. Она также удалит .tar.gz архив из каталога /var/tmp.
Запуск PortSentry.
Программа PortSentry может быть сконфигурирована для работы в шести различных режимах, но запущена только для проверки одного протокольного режима за раз. Чтобы было более правильно, вы можете запустить одни TCP режим и один UDP режим, так как два TCP и один UDP, для примера, не работает. Доступные режимы:
?portsentry -tcp (основной port-bound TCP режим)
?portsentry -udp (основной port-bound UDP режим)
?portsentry -stcp (определение Stealth TCP сканирования)
?portsentry -atcp (продвинутое определение TCP stealth сканирования)
?portsentry -sudp (определение "Stealth" UDP сканирования)
?portsentry -audp (продвинутое определение UDP сканирования)
В моем случае я предпочитаю запускать TCP в протокольном режиме “продвинутое определение TCP stealth сканирования ” и UDP в протокольном режиме "определение Stealth UDP сканирования ”. Для получения большей информации о других протокольных режимах пожалуйста читайте “README.install” и “README.stealth” файлы в каталоге с исходными кодами PortSentry. Для TCP режима я выбираю:
- atcp - продвинутое определение TCP stealth сканирования
В режиме продвинутого определения TCP stealth сканирования, PortSentry будет вначале смотреть какие порты вы запустили на сервере, а затем выведет их из под наблюдения и начнет следить за остальными портами. Это очень полезно и очень быстро реагирует на сканирование портов. Этот режим, также, потребляет мало времени CPU.
Для UDP режима я выбрал:
-sudp – режим определения "Stealth" UDP сканирования
В режиме определения "Stealth" UDP сканирования UDP порты сперва будут формироваться в список, а затем контролироваться.
Для запуска PortSentry в двух вышеприведенных режимах используйте команды:
[root@deep /]# /usr/psionic/portsentry/portsentry -atcp
[root@deep /]# /usr/psionic/portsentry/portsentry -sudp
ЗАМЕЧАНИЕ: Вы можете добавить вышеприведенные строки в файл “/etc/rc.d/rc.local”, чтобы они автоматически запускались при каждой перезагрузке системы.
Инсталлированные файлы.
> /usr/psionic > /usr/psionic/portsentry > /usr/psionic/portsentry/portsentry.conf > /usr/psionic/portsentry/portsentry.ignore > /usr/psionic/portsentry/portsentry
Бесплатные SSH клиенты для Windows
Putty
Домашняя страница Putty:
Tera Term Pro и TTSSH
Домашняя страница Tera Term Pro:
Домашняя страница TTSSH :
Дополнительная документация.
Для получения большей информации, вот несколько man-страниц, которые можно прочитать.
$ man ssh (1) - OpenSSH secure shell клиент (программа удаленного подключения)
$ man ssh [slogin] (1) - OpenSSH secure shell клиент (клиент (программа удаленного подключения)
$ man ssh-add (1) - добавление identities для агента аутентификации
$ man ssh-agent (1) – аутентификационный агент
$ man ssh-keygen (1) – генерация аутентификационного ключа
$ man sshd (8) – ssh демон
Для получения большей информации, вот несколько man-страниц, которые можно прочитать:
$ man ssh-add2 (1) - добавляет identities агенту аутентификации
$ man ssh-agent2 (1) – агент аутентификации
$ man ssh-keygen2 (1) – генератор пары аутентификационных ключей
$ man ssh2 (1) - secure shell клиент (программа удаленного подключения)
$ man sshd2 (8) - secure shell демон
Инсталлированные файлы
> /etc/pam.d/ssh > /etc/ssh2 > /etc/ssh2/hostkey > /etc/ssh2/hostkey.pub > /etc/ssh2/sshd2_config > /etc/ssh2/ssh2_config > /root/.ssh2 > /root/.ssh2/random_seed > /root/ssh2 > /usr/man/man1/ssh2.1 > /usr/man/man1/ssh-keygen2.1 > /usr/man/man1/ssh-add2.1 > /usr/man/man1/ssh-agent2.1 > /usr/man/man1/scp2.1 > /usr/man/man1/sftp2.1 > /usr/man/man1/ssh.1 > /usr/man/man1/ssh-add.1 > /usr/man/man1/ssh-agent.1 > /usr/man/man1/ssh-keygen.1 > /usr/man/man1/scp.1 > /usr/man/man1/sftp.1 > /usr/man/man8/sshd2.8 > /usr/man/man8/sshd.8 > /usr/bin/ssh2 > /usr/bin/scp2 > /usr/bin/sftp2 > /usr/bin/sftp-server2 > /usr/bin/ssh-agent2 > /usr/bin/ssh-keygen2 > /usr/bin/ssh-signer2 > /usr/bin/ssh-add2 > /usr/bin/ssh > /usr/bin/ssh-agent > /usr/bin/ssh-add > /usr/bin/ssh-askpass > /usr/bin/ssh-keygen > /usr/bin/scp > /usr/bin/sftp > /usr/bin/sftp-server > /usr/bin/ssh-signer > /usr/sbin/sshd2 > /usr/sbin/sshd
Инсталлируемые файлы
> /etc/ssh > /etc/ssh/ssh_config > /etc/ssh/sshd_config > /etc/ssh_host_key > /etc/ssh_host_key.pub > /usr/bin/ssh > /usr/bin/slogin > /usr/man/man1/ssh.1 > /usr/man/man1/scp.1 > /usr/man/man1/ssh-add.1 > /usr/man/man1/ssh-agent.1 > /usr/man/man1/ssh-keygen.1 > /usr/bin/scp > /usr/bin/ssh-add > /usr/bin/ssh-agent > /usr/bin/ssh-keygen > /usr/man/man1/slogin.1 > /usr/man/man8/sshd.8 > /usr/sbin/sshd
Изменение вашей pass-phrase.
Вы можете изменить pass-phrase в любое время используя опцию “-p” утилиты ssh-keygen. [root@deep /]# su admin
[admin@deep /]$ ssh-keygen -p
Enter file key is in (/home/admin/.ssh/identity): [Press ENTER]
Enter old passphrase:
Key has comment 'admin@deep.openna.com'
Enter new passphrase:
Enter the same passphrase again:
Your identification has been saved with the new passphrase.
Компиляция и оптимизация.
Шаг 1.
Переместитесь в новый каталог SSH2 и выполните следующие команды:
CC="egcs" \
CFLAGS="-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions" \
./configure \
--prefix=/usr \
--without-ssh-agent1-compat \
--disable-suid-ssh-signer \
--disable-tcp-port-forwarding \
--disable-X11-forwarding \
--enable-tcp-nodelay \
--with-libwrap
Вышеприведенные опции говорят SSH2 следующее:
Не включать совместимость с ssh-agent1
Инсталлировать ssh-signer без suid бита.
Отключить поддержку перенаправление портов (port forwarding).
Отключить поддержку перенаправление X11.
Включить опцию сокета TCP_NODELAYn.
Вкомпилировать libwrap (tcp_wrappers) поддержки.
[root@deep ssh-2.0.13]# make clean
[root@deep ssh-2.0.13]# make
[root@deep ssh-2.0.13]# make install
[root@deep ssh-2.0.13]# rm -f /usr/bin/ssh-askpass
Команда "make clean" удаляет все предыдущие следы компиляции, чтобы избежать любых ошибок. Команда “make” компилирует все исходные файлы в исполняемые и в заключении команда “make install” инсталлирует двоичные и сопутствующие им файлы в определенное место.
Очистка после работы.
[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf ssh-version/ ssh-version.tar.gz
Команда “rm”, использованная выше, будет удалять все исходные коды, которые мы использовали при компиляции и инсталляции SSH2. Она также удалит .tar.gz архив.
Конфигурации.
Все программное обеспечение, описанное в книге, имеет определенный каталог и подкаталог в архиве “floppy.tgz”, включающей все конфигурационные файлы для всех программ. Если вы скачаете этот файл, то вам не нужно будет вручную воспроизводить файлы из книги, чтобы создать свои файлы конфигурации. Скопируйте файл из архива и измените его под свои требования. Затем поместите его в соответствующее место на сервере, так как это показано ниже. Файл с конфигурациями вы можете скачать с адреса:
Для запуска OpenSSH клиента/сервера следующие файлы должны быть созданы или скопированы в нужный каталог:
Копируйте ssh_config в каталог “/etc/ssh/”.
Копируйте sshd_config в каталог “/etc/ssh/”.
Копируйте sshd в каталог “/etc/pam.d/”.
Вы можете взять эти файлы из нашего архива floppy.tgz.
Настройка файла “/etc/ssh/ssh_config”.
Файл “/etc/ssh/ssh_config” это конфигурационный файл для OpenSSH, действующий в масштабах системы, который определяет опции изменяющие действия клиентских программ. Он содержит пары ключ-значение, одну на строку, не зависящие от регистра. Здесь описаны наиболее важные ключи влияющие на безопасность; полный список вы можете найти на стрнице руководства (man) для ssh (1).
Редактируйте файл ssh_config (vi /etc/ssh/ssh_config) и добавьте/или измените следующие параметры:
# Site-wide defaults for various options Host * ForwardAgent no ForwardX11 no RhostsAuthentication no RhostsRSAAuthentication no RSAAuthentication yes PasswordAuthentication yes FallBackToRsh no UseRsh no BatchMode no CheckHostIP yes StrictHostKeyChecking no IdentityFile ~/.ssh/identity Port 22 Cipher blowfish EscapeChar ~
Host *
Опция “Host” ограничивает влияние всех нижестоящих объявлений и опций только на компьютеры соответствующих шаблону приведенному после ключевого слова. “*” подразумевает все компьютеры. При помощи этой опции вы сможете в одном файле определить параметры для разных удаленных машин.
ForwardAgent no
Опция “StrictHostKeyChecking” определяет будет или нет ssh автоматически добавлять новые ключи компьютера в файл $HOME/.ssh/known_host. Эта опция, когда установлена в “yes”, предоставляет максимальную защиту от атак Trojan horse. С этой опцией должна быть проведена одна процедура. Вначале она устанавливается в “no”, чтобы ключи с обычно используемых компьютеров были собраны в файле, а затем нужно установить ее в “yes”, чтобы воспользоваться ее дополнительными возможностями.
IdentityFile ~/.ssh/identity
Опция “IdentityFile” определяет альтернативный идентичный файл RSA идентификации для чтения. Много идентичных файлов может быть определено с помощью этой опции.
Port 22
Опция “Port” опередляет какой порт используется для ssh соединений на удаленном компьютере. По умолчанию он равен 22.
Cipher blowfish
Опция “Cipher” определяет какой шифр должен быть использован для шифрования сессии. blowfish использует 64-битные блоки и ключи до 448 бит.
EscapeChar ~
Опция “EscapeChar” определяет сессионный знак перехода в приостановленное состояние.
Настройка файла “/etc/ssh/sshd_config”.
Файл “/etc/ssh/sshd_config” - это конфигурационный файл для OpenSSH, действующий в масштабах системы, который определяет опции изменяющие действия демона. Он содержит пары ключ-значение, одну на строку, не зависящие от регистра. Здесь описаны наиболее важные ключи влияющие на безопасность sshd; полный список вы можете найти на странице руководства к sshd (8).
Редактируйте файл sshd_config (vi /etc/ssh/sshd_config) и добавьте/или измените следующие параметры: # This is ssh server systemwide configuration file. Port 22 ListenAddress 192.168.1.1 HostKey /etc/ssh/ssh_host_key ServerKeyBits 1024 LoginGraceTime 600 KeyRegenerationInterval 3600 PermitRootLogin no IgnoreRhosts yes IgnoreUserKnownHosts yes StrictModes yes X11Forwarding no PrintMotd yes SyslogFacility AUTH LogLevel INFO RhostsAuthentication no RhostsRSAAuthentication no RSAAuthentication yes PasswordAuthentication yes PermitEmptyPasswords no AllowUsers admin
Port 22
Опция “Port” определяет какой порт слушает ssh демон для входящих соединений. По умолчанию - 22.
ListenAddress 192.168.1.1
Опция “ListenAddress” определяет IP адрес интерфейса к которому подключен сокет ssh демона. По умолчанию это “0.0.0.0”; для улучшения безопасности вы можете ограничиться только одним адресом.
HostKey /etc/ssh/ssh_host_key
Опция “HostKey” определяет место содержащее приватный ключ сервера.
ServerKeyBits 1024
Опция “ServerKeyBits” определяет как много бит используется в ключе сервера. Эти биты используются когда демон стартует для генерации RSA ключа.
LoginGraceTime 600
Опция “LoginGraceTime” определяет как долго в секундах после соединения сервер ждет правильной регистрации до его разрыва.
KeyRegenerationInterval 3600
Опция “KeyRegenerationInterval” определяет как долго в секундах сервер должен ждать перед автоматической регенерацией своего ключа. Эта опция защиты предназначена для предотвращения расшифровки захваченного сеанса связи.
PermitRootLogin no
Опция “PermitRootLogin” определяет может ли root подключаться, используя ssh. Никогда не говорите “yes” в этой опции.
IgnoreRhosts yes
Опция “IgnoreRhosts” определяет должны ли файлы rhosts или shosts использоваться при аутентификации. Из соображений безопасности рекомендуется не использовать эти файлы.
IgnoreUserKnownHosts yes
Опция “IgnoreUserKnownHosts” определяет должен ли ssh демон игнорировать пользователей “$HOME/.ssh/known_hosts” во время RhostsRSAAuthentication.
StrictModes yes
Опция “StrictModes” определяет должен ли ssh проверять права пользователей в их домашних каталогах и файлы rhosts перед тем, как пустить на сервер. Эта опция должна всегда быть установлена в “yes”, потому что иногда пользователи могут случайно оставить свои каталоги и файлы открытыми всем для записи.
X11Forwarding no
Опция “X11Forwarding” определяет должен ли сервер перенаправлять X11 пакеты или нет. Так как мы установили сервер без GUI, то эту опцию устанавливаем в no.
PrintMotd yes
Опция “PrintMotd” определяет должен ли ssh демон печатать содержимое файла “/etc/motd”, когда пользователь входит на сервер. Файл “/etc/motd” также известен как “сообщение дня”.
SyslogFacility AUTH
Опция “SyslogFacility” определяет с какого средства (facility) поступают сообщения в syslog от sshd. facility представляет подсистему, которая создает сообщение, в нашем случае AUTH.
LogLevel INFO
Опция “LogLevel” определяет уровень важности сообщения поступающего системе syslog от sshd. INFO – хороший выбор. Смотрите страницу man для sshd для получения большей информации о других возможностях.
RhostsAuthentication no
Опция “RhostsAuthentication” определяет может ли sshd использовать rhosts аутентификацию. Так как rhosts аутентификация небезопасна, то мы не используем эту опцию.
RhostsRSAAuthentication no
Опция “RhostsRSAAuthentication” определяет можно ли использовать rhosts аутентификацию вместе с RSA аутентификацией.
RSAAuthentication yes
Опция “RSAAuthentication” определяет можно ли использовать RSA аутентификацию. Эта опция должна быть установлена в “yes” для лучшей безопасности. RSA использует пару из общедоступного и личного ключей, созданных с помощью утилиты ssh-keygen1.
PasswordAuthentication yes
Опция “PasswordAuthentication” определяет можно ли использовать аутентификацию по паролю. Для лучшей защищенности эта опция должна быть установлена в “yes”.
PermitEmptyPasswords no
Опция “PermitEmptyPasswords” определяет позволяет ли сервер входить на сервер с бюджетов с пустыми паролями. Если вы используете утилиту “scp” для автоматического создания резервных копий через сеть, то нужно установить эту опцию в “yes”.
AllowUsers admin
Опция “AllowUsers” определяет и контролирует какие пользователи могут использовать ssh сервис. Для разделения нескольких имен используйте пробелы.
Конфигурация файла “/etc/pam.d/ssh”.
Для лучшей безопасности вашего ssh2 сервера, вы можете настроить его на аутентификацию через PAM. Чтобы сделать это, надо создать файл “/etc/pam.d/ssh” file.
Создайте файл ssh (touch /etc/pam.d/ssh) и добавьте или измените, если нужно:
#%PAM-1.0
auth required /lib/security/pam_pwdb.so shadow
auth required /lib/security/pam_nologin.so
account required /lib/security/pam_pwdb.so
password required /lib/security/pam_cracklib.so
password required /lib/security/pam_pwdb.so use_authtok nullok md5 shadow
session required /lib/security/pam_pwdb.so
Конфигурирование OpenSSH для каждого пользователя
Шаг 1.
Создайте, локально, ваш общедоступный и персональный ключи:
[root@deep /]# su admin
[admin@deep /]$ ssh-keygen
Результат должен выглядеть примерно так: Initializing random number generator... Generating p: ............................++ (distance 430) Generating q: ......................++ (distance 456) Computing the keys... Testing the keys... Key generation complete. Enter file in which to save the key (/home/admin/.ssh/identity): [Press Enter] Enter passphrase: Enter the same passphrase again: Your identification has been saved in /home/admin/.ssh/identity. Your public key is: 1024 37 149377575112519555336911203184772938622900493947151365111458061088700 017643784946768312975778431585322723612061006231460440536487184367748 423324091941848098890786099717524446977589647127757030728779973708569 993017043141563536333068888944038178461608592483844590202154102756903 055846534063365635584899765402181 admin@deep.openna.com Your public key has been saved in /home/admin/.ssh/identity.pub
ЗАМЕЧАНИЕ. Если вы имеете несколько бюджетов, то вы можете хотеть создать независимые ключи для них.
Вы хотите создать ключи для:
Ваш почтовый сервер
Ваш Веб сервер
Ваш шлюз
Это позволит вам ограничить доступ между серверами, например не позволит почтовому бюджету получить доступ на Веб сервер или Шлюз. Это расширяет полную защиту, если одни из ваших аутентификационных ключей скомпрометирован по какой-нибудь причине.
Шаг 2.
Копируйте ваш общедоступный ключ (identity.pub) на удаленный компьютер в каталог “/home/admin/.ssh” под именем “authorized_keys”.
ЗАМЧЕАНИЕ. Одним из способов копирования файла является использование ftp команд или вам нужно послать по электронной почте ваш общедоступный ключ администратору системы. Только включите содержимое файла ~/.ssh/identity.pub в сообщение.
Конфигурирование SSH2 для каждого пользователя
Шаг 1.
Создайте, локально, ваш личный и публичный ключи:
[root@deep /]# su admin
[admin@deep /]$ ssh-keygen2
Generating 1024-bit dsa key pair
6 Oo..oOo.oOo.
Key generated.
1024-bit dsa, admin@deep.openna.com, Sun Feb 13 2000 05:33:38 -0500
Passphrase :
Again :
Private key saved to /home/admin/.ssh2/id_dsa_1024_a
Public key saved to /home/admin/.ssh2/id_dsa_1024_a.pub
Шаг 2
Создайте файл “identification” в вашем каталоге “~/.ssh2” на локальной машине:
[admin@deep]$ cd ~/.ssh2
[admin@deep .ssh2]$ echo “IdKey id_dsa_1024_a” > identification
ЗАМЕЧАНИЕ. Опционально можно создать идентификационный файл и на удаленной машине. Он содержит имя приватного ключа, который используется при аутентификации.
Шаг 3
Копируйте ваш публичный ключ с локальной машины (id_dsa_1024_a.pub) на удаленную в каталог “~/.ssh2” под именем, “Local.pub”.
Шаг 4
Создайте файл “authorization” в каталоге “~/.ssh2” на удаленной машине:
[admin@remote .ssh2]$ touch authorization
ЗАМЕЧАНИЕ. “~/” означает ваш домашний каталог.
Шаг 5
Добавьте следующую строку в файл “authorization” на удаленной машине:
[admin@remote .ssh2]$ vi authorization key Local.pub
Краткий обзор.
Как было написано во 2 главе “Инсталляция вашего Linux сервера”, многие сетевые сервисы, включая, но не ограничиваясь, telnet, rsh, rlogin или rexec, уязвимы к электронному прослушиванию. В результате, любой человек, имеющий доступ к компьютеру в вашей сети, может прослушивать сообщения и перехватывать пароли и другую полезную информацию, проходящую по сети в открытом виде. Программа telnet необходима для решения ежедневных административных задач, но она не безопасна, так как передает через сеть пароли в открытом виде. Чтобы решить эту проблему необходима программа, которая заменит нам telnet. К счастью такая программа есть, это OpenSSH – настоящая и безопасная замена старых и небезопасных программ удаленного доступа, таких как telnet, rlogin, rsh, rdist или rcp.
Согласно официальному OpenSSH README файлу:
Ssh (Secure Shell) – это программа для подключения к компьютерам через сеть, выполнения команд на удаленных машинах и перемещения файлов из одного компьютера на другой. Она предоставляет строгую аутентификацию и безопасную передачу информации по незащищенным каналам. Ssh предназначен заменить rlogin, rsh, rcp и rdist.
В нашей конфигурации мы будем настраивать OpenSSH на поддержку tcp-wrappers (inetd superserver) для улучшения безопасности уже безопасной программы и чтобы не запускать ее как демон. В результате, когда клиент пытается соединиться с сервером, ssh будет запущен TCP-WRAPPER-ом для его аутентификации и авторизации перед тем, как разрешить подключение.
OpenSSH – это свободно-распространяемая замена SSH1, в которой были удалены все патентозависимые алгоритмы (во внешние библиотеки), все известные ошибки в безопасности и добавлены новые возможности. Мы рекомендуем вам использовать OpenSSH вместо SSH1 (свободно- распространяемый, но содержащий ошибки) или SSH2, который изначально тоже был бесплатным, но сейчас поставляется под коммерческой лицензией. Для тех, кто использует SSH2 от компании Datafellows, мы описываем в этой книге обе версии, начиная с OpenSSH.
Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам “/var/tmp” (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем “root”.
OpenSSH версии 1.2.3
Пакеты.
Домашняя страница OpenSSH: /
Вы должны скачать: openssh-1.2.3.tar.gz
Необходимые условия.
OpenSSH требует, чтобы был установлен пакет zlib-devel, который содержит заголовочные файлы и библиотеки нужные программам, использующим библиотеки zlib компрессии и декомпрессии. Если это не так, то установите его с вашего Red Hat Linux 6.1 или 6.2 CD-ROM.
Чтобы узнать установлен ли у вас zlib-devel дайте команду:
[root@deep /]# rpm -qi zlib-devel
package zlib-devel is not installed
Для инсталляции zlib-devel дайте следующие комнады: [root@deep /]# mount /dev/cdrom /mnt/cdrom/ [root@deep /]# cd /mnt/cdrom/RedHat/RPMS/ [root@deep RPMS]# rpm -Uvh gd-devel-version.i386.rpm gd ################################################## [root@deep RPMS]# rpm -Uvh zlib-devel-version.i386.rpm zlib-devep ################################################## [root@deep RPMS]# cd /; umount /mnt/cdrom/
OpenSSL, необходимая для включения поддержки SSL в OpenSSH, тоже должна быть установлена на вашей системе.
ЗАМЕЧАНИЕ. Для того, чтобы получить большую информацию об OpenSSL сервере читайте соответствующую главу этой книги. Даже если вам не нужно использовать OpenSSL для создания и хранения зашифрованных файлов ключей, все равно для правильной работы OpenSSH требуются библиотеки OpenSSL.
Тарболы.
Хорошей идеей будет создать список файлов установленных в вашей системе до инсталляции OpenSSH и после, в результате, с помощью утилиты diff вы сможете узнать какие файлы были установлены. Например,
До инсталляции:
find /* > OpenSSH1
После инсталляции:
find /* > OpenSSH2
Для получения списка установленных файлов:
diff OpenSSH1 OpenSSH22 > OpenSSH-Installed
Раскройте тарбол:
[root@deep /]# cp openssh-version.tar.gz /var/tmp
[root@deep /]# cd /var/tmp
[root@deep tmp]# tar xzpf openssh-version.tar.gz
Компиляция и оптимизация.
Шаг 1.
Переместитесь в новый каталог OpenSSH и выполните следующие команды:
CC="egcs" \
CFLAGS="-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -
march=pentiumpro -fomit-frame-pointer -fno-exceptions" \
./configure \
--prefix=/usr \
--sysconfdir=/etc/ssh \
--with-tcp-wrappers \
--with-ipv4-default \
--with-ssl-dir=/usr/include/openssl
Вышеприведенные опции говорят OpenSSH следующее:
Вкомпилировать libwrap и включить поддержку TCP Wrappers (/etc/hosts.allow|deny)
Заблокировать длительные задержки при разрешении имен под Linux/glibc-2.1.2 для улучшения времени соединения
Определить месторасположение OpenSSL
Шаг 2.
Сейчас мы должны компилировать и инсталлировать OpenSSH на сервере:
[root@deep openssh-1.2.3]# make
[root@deep openssh-1.2.3]# make install
[root@deep openssh-1.2.3]# make host-key
[root@deep openssh-1.2.3]# install -m644 contrib/redhat/sshd.pam /etc/pam.d/sshd
make – компилирует исходные коды в двоичные файлы;
make install – инсталлирует исполняемы и вспомогательные файлы
make host-key – создает ключ сервера
install – инсталлирует PAM поддержку на Red Hat Linux, которая сейчас имеет больше возможностей, чем популярный пакет из коммерческого ssh-1.2.x.
Очистка после работы.[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf openssh-version/ openssh-version.tar.gz
Команда “rm”, использованная выше, будет удалять все исходные коды, которые мы использовали при компиляции и инсталляции OpenSSH. Она также удалит .tar.gz архив.
Linux SSH2 Клиент/Сервер
Краткий обзор.
Сейчас стало ясно, что все пользователи Linux, должны использовать OpenSSH вместо SSH2 от компании Datafellows. Однако, для пользователей и организаций, которые хотят использовать коммерческую версию этого программного обеспечения, мы приводим следующее описание. Это SSH2 – коммерческая версия SSH. В нашей конфигурации мы настраиваем SSH2 на поддержку работы с TCP-Wrappers из соображений безопасности.
Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам “/var/tmp” (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем “root”.
SSH2 версии 2.0.13
Пакеты.
Домашняя страница SSH2:
Вы должны скачать: ssh-2.0.13.tar.gz
Тарболы.
Хорошей идеей будет создать список файлов установленных в вашей системе до инсталляции SSH2 и после, в результате, с помощью утилиты diff вы сможете узнать какие файлы были установлены. Например,
До инсталляции:
find /* > SSH1
После инсталляции:
find /* > SSH2
Для получения списка установленных файлов:
diff SSH1 SSH2 > SSH2-Installed
Раскройте тарбол:
[root@deep /]# cp ssh-version.tar.gz /var/tmp
[root@deep /]# cd /var/tmp
[root@deep tmp]# tar xzpf ssh-version.tar.gz
Настройка файла “/etc/ssh2/ssh2_config”.
Файл “/etc/ssh2/ssh2_config” это конфигурационный файл для SSH2, действующий в масштабах системы, который определяет опции изменяющие действия клиентских программ. Он содержит пары ключ-значение, записанных в одну на строку, не зависящие от регистра. Здесь описаны наиболее важные ключи влияющие на безопасность; полный список вы можете найти странице руководства для ssh2 (1).
Редактируйте файл ssh2_config (vi /etc/ssh2/ssh2_config) и добавьте/или измените следующие параметры: # ssh2_config # SSH 2.0 Client Configuration File *: Port 22 Ciphers blowfish Compression yes IdentityFile identification AuthorizationFile authorization RandomSeedFile random_seed VerboseMode no ForwardAgent no ForwardX11 no PasswordPrompt "%U's password: " Ssh1Compatibility no Ssh1AgentCompatibility none NoDelay yes KeepAlive yes QuietMode no
Port 22<br> Опция “Port” определяет на какой порт ssh присоединяется на удаленнный компьютер. По умолчанию – 22.
Ciphers blowfish
Опция “Ciphers” определяет какой шифр должен быть использован для шифрования сессии. blowfish использует 64-битные блоки и ключи до 448 бит.
Compression yes
Опция “Compression” определяет использовать ли во время сессии сжатие. Сжате будет улучшать скорость связи и обмена файлами.
IdentityFile identification
Опция “IdentityFile” определяет альтернативное имя для пользовательского идентификационного файла.
AuthorizationFile authorization
Опция “AuthorizationFile” определяет альтернативное имя для пользовательского файла авторизации.
RandomSeedFile random_seed
Опция “RandomSeedFile” определяет альтернативное имя для пользовательского файла с начальным числом для генерации псевдослучайных чисел (random seed file).
VerboseMode no
Опция “VerboseMode” заставляет ssh2 печатать отладочные сообщения о ходе его работы. Эта опция полезна при отладочных соединениях и проблемах с настройками.
ForwardAgent no
Опция “ForwardAgent” определяет какой агент установления подлинности соединения должен быть направлен на удаленную машину.
ForwardX11 no
Опция “ForwardX11” для людей, которые используют Xwindow GUI и хотят автоматически перенаправлять сессии X11 на удаленную машину. Так как мы устанавливали сервер и не инсталлировали GUI, мы можем спокойно выключить эту опцию.
PasswordPrompt "%U's password: "
Опция “PasswordPrompt” определяет строку запроса пароля, которая будет выводится пользователю, когда он подключается к системе. Переменные '%U' и '%H' дают имя пользователя и хоста соответственно.
Ssh1Compatibility no
Опция “Ssh1Compatibility” определяет будут или нет использоваться SSH1 совместимые коды в SSH2 для ssh1 пользователей.
Ssh1AgentCompatibility none
Опция “Ssh1AgentCompatibility” определяет будет или нет направляться SSH1 агент соединений с SSH2 для пользователей ssh1.
NoDelay yes
Опция “NoDelay” определяет, что опция сокета TCP_NODELAY должна быть включена. Рекомендуется установить ее в “yes” для улучшения сетевой производительности.
KeepAlive yes
Опция “KeepAlive” определяет должна ли система отправлять keep alive сообщения на удаленный сервер. Если эта опция установлена в “yes”, то в случае разрыва соединения или аварийного отказа удаленной машины будет получено корректное извещение.
QuietMode no
Опция “QuietMode” определяет будет ли система запущена в тихом режиме. Эта опция должна быть установлена в “no”, потому что в бесшумном режиме, никакой информации не заносится в с системные журналы регистрации, за исключением фатальных ошибок. Так как мы хотим иметь информацию о пользовательских сессиях, нам надо установить опцию в “no”.
Настройка файла “/etc/ssh2/sshd2_config”.
Файл “/etc/ssh2/sshd2_config” это конфигурационный файл для SSH2, действующий в масштабах системы, который определяет опции изменяющие действия демона. Он содержит пары ключ-значение, одну на строку, не зависящие от регистра. Здесь описаны наиболее важные ключи влияющие на безопасность sshd; полный список вы можете найти в man странице для sshd2 (8).
Редактируйте файл sshd2_config (vi /etc/ssh2/sshd2_config) и добавьте/или измените следующие параметры: # sshd2_config # SSH 2.0 Server Configuration File *: Port 22 ListenAddress 192.168.1.1 Ciphers blowfish IdentityFile identification AuthorizationFile authorization HostKeyFile hostkey PublicHostKeyFile hostkey.pub RandomSeedFile random_seed ForwardAgent no ForwardX11 no PasswordGuesses 3 MaxConnections 5 PermitRootLogin no AllowedAuthentications publickey,password RequiredAuthentications publickey,password VerboseMode no PrintMotd yes CheckMail yes UserConfigDirectory "%D/.ssh2" SyslogFacility DAEMON Ssh1Compatibility no NoDelay yes KeepAlive yes UserKnownHosts yes AllowHosts 192.168.1.4 DenyHosts * QuietMode no # subsystem definitions subsystem-sftp sftp-server
Port 22
Опция “Port” определяет какой порт слушает ssh2 демон для входящих соединений. По умолчанию - 22.
ListenAddress 192.168.1.1
Опция “ListenAddress” определяет IP адрес интерфейса к которому подключен сокет ssh демона. По умолчанию это “0.0.0.0”; для улучшения безопасности вы можете ограничиться только одним адресом.
Ciphers blowfish
Опция “Ciphers” определяет какой шифр должен быть использован для шифрования сессии. blowfish использует 64-битные блоки и ключи до 448 бит.
IdentityFile identification
Опция “IdentityFile” определяет альтернативное имя для идентификационного файла пользователей.
AuthorizationFile authorization
Опция “AuthorizationFile” задает альтернативное имя для файла полномочий пользователей (user's authorization file).
HostKeyFile hostkey
Опция “HostKeyFile” определяет место содержащее приватный ключ сервера. По умолчанию “/etc/ssh2/hostkey”.
PublicHostKeyFile hostkey.pub
Опция “PublicHostKeyFile” определяет альтернативный файл содержащий публичный ключ сервера. По умолчанию - “/etc/ssh2/hostkey.pub”.
RandomSeedFile random_seed
Опция “RandomSeedFile” определяет альтернативное имя для пользовательского файла с начальным числом для генерации псевдослучайных чисел (random seed file).
ForwardAgent no
Опция “ForwardAgent” определяет какой агент установления подлинности соединения должен быть направлен на удаленную машину.
ForwardX11 no
Опция “ForwardX11” определяет должен ли сервер перенаправлять X11 пакеты или нет. Так как мы установили сервер без GUI, то эту опцию устанавливаем в no.
PasswordGuesses 3
Опция “PasswordGuesses” определяет как много попыток имеет пользователь, чтобы ввести имя и пароль, при парольной аутентификации.
MaxConnections 5
Опция “MaxConnections” определяет максимальное число одновременных соединений, которыми демон ssh2 может управлять.
PermitRootLogin no
Опция “PermitRootLogin” определяет может ли root подключаться, используя ssh. Никогда не говорите “yes” в этой опции.
AllowedAuthentications publickey,password
Опция “AllowedAuthentications” определяет какие виды аутентификации разрешено использовать. С этой опцией администратор может вынуждать пользователей заканчивать несколько аутентификаций прежде чем они расссматриваются как заверенные.
RequiredAuthentications publickey,password
Опция “RequiredAuthentications” связана с “AllowedAuthentications”, определяет какие метода аутентификации пользователь должен завершить прежде чем продолжить свою работу. Этот параметр должен иметь те же значения, что и “AllowedAuthentications” или сервер будет все время запрещать соедиенния.
VerboseMode no
Опция “VerboseMode” заставляет демон ssh2 печатать отладочные сообщения о ходе его работы. Эта опция полезна при отладочных соединениях и проблемах с настройками.
PrintMotd yes
Опция “PrintMotd” определяет должен ли ssh2 демон печатать содержимое файла “/etc/motd”, когда пользователь входит на сервер. Файл “/etc/motd” также известен как “сообщение дня”.
CheckMail yes
Опция “CheckMail” определяет должен ли ssh2 демон печатать информацию о новой почте, которая пришла пользователю.
UserConfigDirectory "%D/.ssh2"
Опция “UserConfigDirectory” определяет месторасположение конфигурационных данных пользователей.
SyslogFacility DAEMON
Опция “SyslogFacility” определяет с какого средства (facility) поступают сообщения в syslog от sshd2. facility представляет подсистему, которая создает сообщение, в нашем случае DAEMON.
Ssh1Compatibility no
Опция “Ssh1Compatibility” определяет будут ли использоваться SSH1 совместимые коды в SSH2 для пользователей ssh1.
NoDelay yes
Опция “NoDelay” определяет, что опция сокета TCP_NODELAY должна быть включена. Рекомендуется установить ее в “yes” для улучшения сетевой производительности.
KeepAlive yes
Опция “KeepAlive” определяет должна ли система отправлять keep alive сообщения на удаленный сервер. Если эта опция установлена в “yes”, то в случае разрыва соединения или аварийного отказа удаленной машины будет получено корректное извещение.
UserKnownHosts yes
Опция “UserKnownHosts” определяет может ли быть использован домашний каталог пользователя “$HOME/.ssh2/knownhosts/” для получения публичного ключа хоста, когда используется "hostbased"-аутентификация.
AllowHosts 192.168.1.4
Опция “AllowHosts” определяет и контролирует какие компьютеры имеют доступ к ssh2 сервису. Несколько хостов, разделенных пробелами, может быть перечислено.
DenyHosts *
Опция “DenyHosts” определяет и контролирует какие хосты не имеют доступа к ssh2 сервису. Несколько хостов, разделенных пробелами, может быть перечислено. По умолчанию шаблон “*” означает все компьютеры.
QuietMode no
Опция “QuietMode” определяет будет ли система запущена в тихом режиме. Эта опция должна быть установлена в “no”, потому что в бесшумном режиме, никакой информации не заносится в с системные журналы регистрации, за исключением фатальных ошибок. Так как мы хотим иметь информацию о пользовательских сессиях, нам надо установить опцию в “no”.
Настройка OpenSSH для использования с TCP-Wrappers inetd супер сервером.
Tcp-Wrappers может быть использован для запуска и остановки вашего ssh сервиса. Перед выполнением inetd читает информацию из конфигурационного файла /etc/inetd.conf.
Шаг 1.
Редактируйте файл inetd.conf (vi /etc/inetd.conf) и добавьте в него следующую строку:
ssh stream tcp nowait root /usr/sbin/tcpd sshd –i
ЗАМЕЧАНИЕ. Параметр ‘”-i” говорит, что sshd должен запускаться из inetd. После редактирования файла “etc/inetd.conf” отправьте демону inetd сигнал SIGHUP, чтобы он перечитал файл конфигурации.
[root@deep /]# killall -HUP inetd
Шаг 2.
Редактируйте файл hosts.allow file (vi /etc/hosts.allow) и добавьте следующую строку:
sshd: 192.168.1.4 win.openna.com
Которая значит, что клиенту с IP адресом “192.168.1.4” и именем компьютера “win.openna.com” разрешен ssh доступ к серверу.
Эти строки "демона" (для tcp-wrappers) используются sshd:
sshdfwd-X11 (если вы хотите разрешить/запретить X11-forwarding).
sshdfwd-<port-number> (для tcp-forwarding).
sshdfwd-<port-name> (номер порта определен в /etc/services. Ипсользуемый в tcp-forwarding).
ЗАМЕЧАНИЕ. Если вы решили переключиться на использование ssh, сделайте так, чтобы вы инсталлировали и использовали его на всех ваших серверах. Наличие десяти защищенных серверов и одного незащищенного бесполезно.
Настройка SSH2 для использования с TCP-Wrappers inetd супер сервером.
Tcp-Wrappers может быть использован для запуска и остановки вашего ssh2 сервиса. Перед выполнением inetd читает информацию из конфигурационного файла /etc/inetd.conf.
Шаг 1.
Редактируйте файл inetd.conf (vi /etc/inetd.conf) и добавьте в него следующую строку:
ssh stream tcp nowait root /usr/sbin/tcpd sshd –i
ЗАМЕЧАНИЕ. Параметр "-i" говорит, что sshd должен запускаться из inetd.
После редактирования файла “etc/inetd.conf” отправьте демону inetd сигнал SIGHUP, чтобы он перечитал файл конфигурации.
[root@deep /]# killall -HUP inetd
Шаг 2.
Редактируйте файл hosts.allow file (vi /etc/hosts.allow) и добавьте следующую строку:
sshd: 192.168.1.4 win.openna.com
Которая значит, что клиенту с IP адресом “192.168.1.4” и именем компьютера “win.openna.com” разрешен ssh доступ к серверу.
Эти строки "демона" (для tcp-wrappers) используются sshd2:
ssh,ssh2 (может вызываться по имени ssh2 (обычно используется ssh)).
sshdfwd-X11 (если вы хотите разрешить/запретить X11-forwarding).
sshdfwd-<port-number> (для tcp-forwarding).
sshdfwd-<port-name> (номер порта определен в /etc/services. Ипсользуемый в tcp-forwarding).
ЗАМЕЧАНИЕ. Если вы решили переключиться на использование ssh, сделайте так, чтобы вы инсталлировали и использовали его на всех ваших серверах. Наличие десяти защищенных серверов и одного незащищенного бесполезно.
Некоторые возможности использования OpenSSH
OpenSSH может использоваться для:
Замены telnet, rlogin, rsh, rdist и rcp.
Организации безопасного резервного копирования через сеть.
Удаленного выполнения команд..
Доступа к корпоративным ресурсам через Интернет.
Утилиты пользователя OpenSSH
Команды описанные ниже мы будем часто использовать, но на самом деле их много больше, и вы должны изучить man-страницы и документацию для получения деталей.
Ssh
“ssh” (Secure Shell) команда предоставляющая безопасную шифрованную связь между двумя недоверенными компьютерами через небезопасную сеть. Эта программа для безопасного подключения к удаленной машине и выполнения команд на ней. Она заменяет такие небезопасные программы, как telnet, rlogin, rcp, rdist и rsh.
Для подключения к удаленной машине используйте команду:
[root@deep /]# ssh -l <login_name>
<hostname>
Например: [root@deep /]# ssh -l admin www.openna.com admin@deep.openna.com’s password: Last login: Tue Oct 19 1999 18:13:00 -0400 from deep.openna.com No mail. [admin@www admin]$
Где <login_name> это имя, которое вы используете для соединения с ssh сервером и <hostname> это имя удаленного ssh сервера.
scp
“scp” (Secure Copy) это утилита для копирования файлов из локальной системы на удаленную и наоборот, или между двумя удаленными системами. Для копирования файлов с удаленной системы на локулбную используйте следующую команду:
[root@deep /]# su admin
[admin@deep /]$ scp -p <login_name@hostname>:/dir/for/file localdir/to/filelocation
Например:
[admin@deep /]$ scp1 -p admin@mail:/etc/test1 /tmp
Enter passphrase for RSA key 'admin@mail.openna.com':
test1 | 2 KB | 2.0 kB/s | ETA: 00:00:00 | 100%
Для копирования файла с локальной на удаленную систему используйте следующую команду:
[root@deep /]# su admin
[admin@deep /]$ scp -p localdir/to/filelocation <username@hostname>:/dir/for/file
Например:
[admin@deep /]$ scp1 -p /usr/bin/test2 admin@mail:/var/tmp
admin@mail's password:
test2 | 7 KB | 7.9 kB/s | ETA: 00:00:00 | 100%
ЗАМЕЧАНИЕ. Опция “-p” говорит, что время модификации и доступа, также как и режимы исходных файлов, должны быть сохранены и на копии. Это обычно желательно.
Команды описанные ниже мы будем
Команды описанные ниже мы будем часто использовать, но на самом деле их много больше, и вы должны изучить man-страницы и документацию для получения деталей.
Ssh2
“ssh2” (Secure Shell) команда предоставляющая безопасную шифрованную связь между двумя недоверенными компьютерами через небезопасную сеть. Эта программа для безопасного подключения к удаленной машине и выполнения команд на ней. Она заменяет такие небезопасные программы, как telnet, rlogin, rcp, rdist и rsh.
Для подключения к удаленной машине используйте команду:
[root@deep /]# ssh2 -l <login_name>
<hostname>
например:
[root@deep /]# ssh2 -l admin www.openna.com
Passphrase for key "/home/admin/.ssh2/id_dsa_1024_a" with comment "1024-bit dsa,
admin@deep.openna.com, Tue Oct 19 1999 14:31:40 -0400":
admin's password:
Last login: Tue Oct 19 1999 18:13:00 -0400 from deep.openna.com
No mail.
[admin@www admin]$
Где <login_name> это имя, которое вы используете для соединения с ssh2 сервером и <hostname> это имя удаленного ssh2 сервера.
sftp2
Утилита sftp2 (Secure File Transfer) – это ftp-подобный клиент, который предоставляет возможность передачи файлов через сеть. До того, как начать использовать sftp2, вы должны подключиться к ssh2 серверу.
Для ftp через ssh2, используйте следующую команду:
[admin@deep /]$ sftp2 <hostname>
Например:
[admin@deep /]$ sftp2 www.openna.com
local path : /home/admin
Passphrase for key "/home/admin/.ssh2/id_dsa_1024_a" with comment "1024-bit dsa,
admin@deep.openna.com, Tue Oct 19 1999 14:31:40 -0400":
admin's password:
admin's password:
remote path : /home/admin
sftp>
Где <hostname> - это имя удаленного сервера с которым вы хотите обмениваться файлами посредством sftp.