iptables, cron и все, все, все
Здравствуйте снова. :)
После настройки iptables зашел на сайт https://www.grc.com/x/ne.dll?bh0bkyd2
Проверка показала, что у меня
----------------------------------------------------------------------GRC Port Authority Report created on UTC: 2007-08-11 at 08:20:12
Results from scan of ports: 0, 21-23, 25, 79, 80, 110, 113,
119, 135, 139, 143, 389, 443, 445,
1002, 1024-1030, 1720, 50000 Ports Open
1 Ports Closed
25 Ports Stealth
---------------------
26 Ports TestedNO PORTS were found to be OPEN.
The port found to be CLOSED was: 113
Other than what is listed above, all ports are STEALTH.
TruStealth: FAILED - NOT all tested ports were STEALTH,
- NO unsolicited packets were received,
- NO Ping reply (ICMP Echo) was received.
Насколько я понял, я настроил все верно, несмотря на то, что ихний сканер ругается на мой фаервол и говорит помимо вышеприведенного, что
Solicited TCP Packets: RECEIVED (FAILED) — As detailed in the port report below, one or more of your system's ports actively responded to our deliberate attempts to establish a connection. It is generally possible to increase your system's security by hiding it from the probes of potentially hostile hackers. Please see the details presented by the specific port links below, as well as the various resources on this site, and in our extremely helpful and active user community.Unsolicited Packets: PASSED — No Internet packets of any sort were received from your system as a side-effect of our attempts to elicit some response from any of the ports listed above. Some questionable personal security systems expose their users by attempting to "counter-probe the prober", thus revealing themselves. But your system remained wisely silent. (Except for the fact that not all of its ports are completely stealthed as shown below.)
Ping Echo: PASSED — Your system ignored and refused to reply to repeated Pings (ICMP Echo Requests) from our server.
Прав ли я?
Далее, поскольку я использую в качестве провайдера stream, а он каждые 24 часа перезапускает сессию и мне выдается новый ip, я в папку /etc/cron.daily/ добавил файл iptables, в котором прописал
#! /bin/sh
sh /home/initmy.sh
/etc/init.d/iptables save
/etc/init.d/iptables restart
Соответственно, каждые 24 часа после включения компьютера будет выполняться все, что здесь написано, так? (в initmy.sh выполняется инициализация правил для iptables) Но будет ли выполняться этот скрипт сразу, после включения компьютера? Тестирование показало, что нет, но ведь если я загружаю машину, то после подключения через pppoe у нее будет новый ip, значит, надо выполнить вышеприведенный скрипт сразу после загрузки один раз. Где у cron или в другом месте можно заставить делать то, что я хочу?
- Для комментирования войдите или зарегистрируйтесь
/etc/conf.d/local.start
/etc/conf.d/local.start
Спасибо. То, что
Спасибо. То, что надо.
Теперь возникла новая проблема. Запускаю Word of Warcraft. При запуске пишет "Unable to establish a connection to socket: The attempt to connect was forcefully rejected." На сайте Близов нашел, что
Открыл соответствующие порты, но ничто не помогло. В логах REJECT пишет что
но непонятно, как это толковать. По кольцу пускает? Сам скрипт, которым настраиваю фаерволл:
#!/bin/sh
#
#### Внешний интерфейс ####
EXTIF="ppp0"
#### Внутренний интерфейс ####
#INTIF="eth1"
#Loop device / localhost
LPDIF="lo"
LPDIP="127.0.0.1"
LPDMSK="255.0.0.0"
LPDNET="$LPDIP/$LPDMSK"
#Необходимые утилиты
IPT="/sbin/iptables"
IFC="/sbin/ifconfig"
G="/bin/grep"
SED="/bin/sed"
AWK="/usr/bin/awk"
ECHO="/bin/echo"
### deny вместо accept предотвращает открытие дыр ###
### в то время как закрываем порты ###
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
### Сброс всех существующих и очистка персональных цепочек ###
CHAINS=`cat /proc/net/ip_tables_names 2>/dev/null`
for i in $CHAINS
do
$IPT -t $i -F
done
for i in $CHAINS
do
$IPT -t $i -X
done
$ECHO "1 > /proc/sys/net/ipv4/tcp_syncookies"
$ECHO "1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts"
### Проверка адреса источника ###
for f in /proc/sys/net/ipv4/conf/*/rp_filter;
do
$ECHO "1 > $f"
done
### Отключаем роутинг источника IP и ICMP-редиректы ###
for f in /proc/sys/net/ipv4/conf/*/accept_source_route;
do
$ECHO "0 > $f"
done
for f in /proc/sys/net/ipv4/conf/*/accept_redirects;
do
$ECHO "0 > $f"
done
$ECHO "1 > /proc/sys/net/ipv4/ip_forward"
#### Установка переменных окружения внешнего интерфейса ####
EXTIP="`$IFC $EXTIF | $AWK /$EXTIF/'{next}//{split($0,a,":");split(a[2],a," ");print a[1];exit}'`"
EXTBC="255.255.255.255"
#EXTMSK="`$IFC $EXTIF | $G Mask:|$SED 's/.*Mask:\([^ ]*\)/\1/'`"
EXTMSK="`$IFC $EXTIF | $AWK /$EXTIF/'{next}//{split($0,a,":");split(a[4],a," ");print a[1];exit}'`"
EXTNET="$EXTIP/$EXTMSK"
$ECHO "EXTIP=$EXTIP EXTBC=$EXTBC EXTMSK=$EXTMSK EXTNET=$EXTNET"
#### Установка переменных окружения внутреннего интерфейса ####
#INTIP="`$IFC $INTIF | $AWK /$INTIF/'{next}//{split($0,a,":");split(a[2],a," ");print a[1];exit}'`"
#INTBC="`$IFC $INTIF | $AWK /$INTIF/'{next}//{split($0,a,":");split(a[3],a," ");print a[1];exit}'`"
#INTMSK="`$IFC $INTIF | $AWK /$INTIF/'{next}//{split($0,a,":");split(a[4],a," ");print a[1];exit}'`"
#INTNET="$INTIP/$INTMSK"
#$ECHO "INTIP=$INTIP INTBC=$INTBC INTMSK=$INTMSK INTNET=$INTNET"
### Журналирование событий. Идет лог отброшенных пакетов и отброс пакетов
### затем лог отказов и сами отказы
$IPT -N DROP1 2> /dev/null
$IPT -A DROP1 -j LOG --log-prefix 'DROP1:'
$IPT -A DROP1 -j DROP
$IPT -N REJECT1 2> /dev/null
$IPT -A REJECT1 -j LOG --log-prefix 'REJECT1:'
$IPT -A REJECT1 -j REJECT
### Весь трафик от loopback принимается если IP совпадает с нашими интерфейсами
$IPT -A INPUT -i $LPDIF -s $LPDIP -j ACCEPT
$IPT -A INPUT -i $LPDIF -s $EXTIP -j ACCEPT
#$IPT -A INPUT -i $LPDIF -s $INTIP -j ACCEPT
### Блокируем широковещательные пакеты ###
$IPT -A INPUT -i $EXTIF -d $EXTBC -j DROP1
#$IPT -A INPUT -i $INTIF -d $INTBC -j DROP1
$IPT -A OUTPUT -o $EXTIF -d $EXTBC -j DROP1
#$IPT -A OUTPUT -o $INTIF -d $INTBC -j DROP1
$IPT -A FORWARD -o $EXTIF -d $EXTBC -j DROP1
#$IPT -A FORWARD -o $INTIF -d $INTBC -j DROP1
### Блокировка доступа к внутренней сети извне
$IPT -A INPUT -i $EXTIF -d ! $EXTIP -j DROP1
### Блокировка внутренних адресов, кроме тех, что относятся к внутреннему интерфейсу
### если к этим сетевым картам подключается комп, то надо убедиться, что они имеют именно эти IP или надо добавить соответствующие адреса
#$IPT -A INPUT -i $INTIF -s ! $INTNET -j DROP1
#$IPT -A OUTPUT -o $INTIF -d ! $INTNET -j DROP1
#$IPT -A FORWARD -i $INTIF -s ! $INTNET -j DROP1
#$IPT -A FORWARD -o $INTIF -d ! $INTNET -j DROP1
### Дополнительная Ergess-проверка ###
$IPT -A OUTPUT -o $EXTIF -s ! $EXTNET -j DROP1
### Блокируем исходящие icmp за исключением ping ###
$IPT -A OUTPUT -o $EXTIF -p icmp --icmp-type ! 8 -j DROP1
$IPT -A FORWARD -o $EXTIF -p icmp --icmp-type ! 8 -j DROP1
### Порты для блокирования ###
#0 - tcpmux - у SGI есть уязвимость, через которую можно атаковать
#13 - daytime
#98 - Linuxconf
#111 - sunrpc (portmap)
#137:139, 445 - Microsoft
#SNMP: 161,2
#Squid: 3128,8000,8008,8080
#1214 - Morpheus, KaZaA
#2049 - NFS
#3049 - троян для линукса, путают с NFS
#часто атакуемые: 1999, 4329, 6346
#частые трояны 12345б 65535
COMBLOCK="0:1 13 98 111 137:139 161:162 445 1214 1999 2049 3049 4329 6346 3128 8000 8008 8080 12345 65535"
### Порты TCP ###
#98 - Linuxconf
#512..515 - rexec, rlogin, rsh, printer (lpd)
# очень серьезные уязвимости. ежедневно атакуются
# 1080 - proxy Socks
# 6000 -X (Х через SSH безопасен и работает на порту TCP 22)
# 6112 (CDE у Sun and HP)
TCPBLOCK="$COMBLOCK 98 512:515 1080 6000:6009"
### Порты UDP ###
#161:162 - SNMP
#520 - RIP
#9000 - Sangoma
#517:518 - talk и ntalk (самые надоедливые)
UDPBLOCK="$COMBLOCK 161:162 520 123 517:518 1427 9000"
echo "FW: Blocking attacks to TCP port"
for i in $TCPBLOCK;
do
echo "$i"
$IPT -A INPUT -p tcp --dport $i -j DROP1
$IPT -A OUTPUT -p tcp --dport $i -j DROP1
$IPT -A FORWARD -p tcp --dport $i -j DROP1
done
$ECHO ""
$ECHO "FW: Blocking attacks to UDP port"
for i in $UDPBLOCK;
do
$ECHO "$i"
$IPT -A INPUT -p udp --dport $i -j DROP1
$IPT -A OUTPUT -p udp --dport $i -j DROP1
$IPT -A FORWARD -p udp --dport $i -j DROP1
done
$ECHO ""
### Открываем слежение по ftp ###
MODULES="ip_nat_ftp ip_conntrack_ftp"
for i in $MODULES;
do
$ECHO "Inserting module $i"
modprobe $i
done
### Защищаем некоторые чат-клиенты (ненужное закомментировать) ###
#IRC='ircd'
#MSN=1863
ICQ=5190
#NFS='sunrpc'
### Для WOW ###
#World of Warcraft and Burning Crusade use the TCP protocol on port 3724.
WOWTCP="3724"
#The Blizzard Downloader, which downloads patches, also uses TCP ports 6112 and the range 6881-6999
WOWDLRANGE="6112 6881:6999"
### Для синхронизации данных ###
PORTAGE='rsync'
OpenPGP_HTTP_Keyserver=11371
### Порты сервисов читаются из /etc/services ###
TCPSERV="domain ssh http https ftp ftp-data mail pop3 pop3s imap3 imaps imap2 time $PORTAGE $ICQ $OpenPGP_HTTP_Keyserver $WOWTCP $WOWDLRANGE"
UDPSERV="domain time"
$ECHO "FW: Allowing inside systems to use service:"
for i in $TCPSERV;
do
$ECHO "$i"
$IPT -A OUTPUT -o $EXTIF -p tcp -s $EXTIP --dport $i --syn -m state --state NEW -j ACCEPT
#$IPT -A FORWARD -i $INTIF -p tcp -s $INTNET --dport $i --syn -m state --state NEW -j ACCEPT
done
$ECHO ""
$ECHO "FW: Allowing inside systems to use service:"
for i in $UDPSERV;
do
$ECHO "$i"
$IPT -A OUTPUT -o $EXTIF -p udp -s $EXTIP --dport $i -m state --state NEW -j ACCEPT
#$IPT -A FORWARD -i $INTIF -p udp -s $INTNET --dport $i -m state --state NEW -j ACCEPT
done
$ECHO ""
### Разрешаем пинг наружу ###
$IPT -A OUTPUT -o $EXTIF -p icmp -s $EXTIP --icmp-type 8 -m state --state NEW -j ACCEPT
#$IPT -A FORWARD -o $INTIF -p icmp -s $INTNET --icmp-type 8 -m state --state NEW -j ACCEPT
### Фаерволлу разрешается пинг внутренних сетей ###
#$IPT -A OUTPUT -o $INTIF -p icmp -s $INTNET --icmp-type 8 -m state --state NEW -j ACCEPT
### NAT, SSH открытие доступа ###
#$IPT -A INPUT -i $INTIF -p tcp --dport 22 --syn -m state --state NEW -j ACCEPT
#$IPT -t nat -A PREROUTING -j ACCEPT
#$IPT -t nat -A POSTROUTING -o $EXTIF -s $INTNET -j MASQUERADE
#$IPT -t nat -A POSTROUTING -j ACCEPT
#$IPT -t nat -A OUTPUT -j ACCEPT
$IPT -A INPUT -p tcp --dport auth --syn -m state --state NEW -j ACCEPT
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
### Блокировка и протоколирование всего, что забыли ###
$IPT -A INPUT -j DROP1
$IPT -A OUTPUT -j REJECT1
$IPT -A FORWARD -j DROP1
Поскольку у меня дома машина подключена к интернету напрямую, то необходимости в NAT и настройке внутреннего интерфейса нет. Доступ в интернет посредством браузеров и прочего работает на ура.
Дальнейшая
Дальнейшая проверка показала, что если на время запуска игры остановить фаерволл, а затем, когда она загрузится и покажет окно ввода логина-пароля - включить, то все работает замечательно. Получается, что ВоВ еще во время загрузки куда-то тыкается. Вот куда только?... Как это определить?
нада видимо
нада видимо wireshark поставить или tcpdump