Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- sudo cat /etc/iptables.up.rules
- #!/bin/sh
- #Внешний интерфейс
- EXTIF="ppp0"
- # Внутренний интерфейс, eth0 - локалка билайна (10.*.*.*), eth1 - местная локалка (192.168.*.*)
- INTIF0='eth0'
- INTIF1='eth1'
- # Loop-устройство/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'
- # 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
- $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|$G addr:|$SED 's/.*addr:\([^ ]*\) .*/\1/'`"
- EXTBC="`$IFC $EXTIF|$G Bcast:|$SED 's/.*Bcast:\([^ ]*\) .*/\1/'`"
- EXTBC="255.255.255.255"
- EXTMSK="`$IFC $EXTIF|$G Mask:|$SED 's/.*Mask:\([^ ]*\)/\1/'`"
- EXTNET="$EXTIP/$EXTMSK"
- echo "EXTIP=$EXTIP EXTBC=$EXTBC EXTMSK=$EXTMSK EXTNET=$EXTNET"
- echo "EXTIP=$EXTIP EXTBC=$EXTBC EXTMSK=$EXTMSK EXTNET=$EXTNET"
- # Так как EXTBC отсутствует, я устанавливаю ее вручную как it to 255.255.255.255
- # Это (надеюсь) послужит тем же целям
- # Устанвка переменных среды для первого внутреннего интерфейса
- INTIP0="`$IFC $INTIF0|$G addr:|$SED 's/.*addr:\([^ ]*\) .*/\1/'`"
- INTBC0="`$IFC $INTIF0|$G Bcast:|$SED 's/.*Bcast:\([^ ]*\) .*/\1/'`"
- INTMSK0="`$IFC $INTIF0|$G Mask:|$SED 's/.*Mask:\([^ ]*\)/\1/'`"
- INTNET0="$INTIP0/$INTMSK0"
- echo "INTIP0=$INTIP0 INTBC0=$INTBC0 INTMSK0=$INTMSK0 INTNET0=$INTNET0"
- # Установка переменных среды для второго внутреннего интерфейса
- INTIP1="`$IFC $INTIF1|$G addr:|$SED 's/.*addr:\([^ ]*\) .*/\1/'`"
- INTBC1="`$IFC $INTIF1|$G Bcast:|$SED 's/.*Bcast:\([^ ]*\) .*/\1/'`"
- INTMSK1="`$IFC $INTIF1|$G Mask:|$SED 's/.*Mask:\([^ ]*\)/\1/'`"
- INTNET1="$INTIP1/$INTMSK1"
- echo "INTIP1=$INTIP1 INTBC1=$INTBC1 INTMSK1=$INTMSK1 INTNET1=$INTNET1"
- # Сейчас мы собираемся создать несколько собственных цепочек, результатом работы
- # которых будет логгинг отброшенных пакетов. Это поможет нам избежать необходимости
- # вводить команду log перед каждым отбрасыванием пакета, что мы хотим запротоколировать.
- # Первыми идут лог отброшенных пакетов и собственно отброс, затем лог пакетов с отказами
- # и собственно отказы.
- # Отключаем сообщения о том, что цепочки уже существуют (чтобы перезапуск был без мусора)
- $IPT -N DROPl 2> /dev/null
- $IPT -A DROPl -j LOG --log-prefix 'DROPl:'
- $IPT -A DROPl -j DROP
- $IPT -N REJECTl 2> /dev/null
- $IPT -A REJECTl -j LOG --log-prefix 'REJECTl:'
- $IPT -A REJECTl -j REJECT
- #
- $IPT -t nat -I PREROUTING -i $EXTIF -s 10.0.0.1/32 -j ACCEPT
- # Весь траффик от устройства 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 $INTIP0 -j ACCEPT
- $IPT -A INPUT -i $LPDIF -s $INTIP1 -j ACCEPT
- # Широковещательные пакеты блокируем
- $IPT -A INPUT -i $EXTIF -d $EXTBC -j DROPl
- $IPT -A INPUT -i $INTIF0 -d $INTBC0 -j DROPl
- $IPT -A INPUT -i $INTIF1 -d $INTBC1 -j DROPl
- $IPT -A OUTPUT -o $EXTIF -d $EXTBC -j DROPl
- $IPT -A OUTPUT -o $INTIF0 -d $INTBC0 -j DROPl
- $IPT -A OUTPUT -o $INTIF1 -d $INTBC1 -j DROPl
- $IPT -A FORWARD -o $EXTIF -d $EXTBC -j DROPl
- $IPT -A FORWARD -o $INTIF0 -d $INTBC0 -j DROPl
- $IPT -A FORWARD -o $INTIF1 -d $INTBC1 -j DROPl
- # Блокируем доступ к внутренней сети из WAN
- # Это также призвано не дать нечестивым крякерам использовать нашу сетку
- # в качестве отправной точки для атак на других людей
- # Перевод с языка iptables:
- # "если пришедшие на наружный интерфейс пакеты были отправлены не с выданного
- # nefarious адреса, выкинуть их как горячую картошку"
- $IPT -A INPUT -i $EXTIF -d ! $EXTIP -j DROPl
- # А сейчас мы блокируем внутренние адреса, кроме двух, присвоенных нашим двум
- # внутренним интерфейсам.....только помните, что если вы воткнете свой лэптоп или
- # какой другой pc в напрямую в одну из этих сетевых карт, то нужно удостовериться,
- # что они имеют именно эти IP-адреса или добавить соответствующий адрес отдельно
- # Первый интерфейс/первая внутренняя сеть
- $IPT -A INPUT -i $INTIF0 -s ! $INTNET0 -j DROPl
- $IPT -A OUTPUT -o $INTIF0 -d ! $INTNET0 -j DROPl
- $IPT -A FORWARD -i $INTIF0 -s ! $INTNET0 -j DROPl
- $IPT -A FORWARD -o $INTIF0 -d ! $INTNET0 -j DROPl
- # Второй интерфейс/вторая внутренняя сеть
- $IPT -A INPUT -i $INTIF1 -s ! $INTNET1 -j DROPl
- $IPT -A OUTPUT -o $INTIF1 -d ! $INTNET1 -j DROPl
- $IPT -A FORWARD -i $INTIF1 -s ! $INTNET1 -j DROPl
- $IPT -A FORWARD -o $INTIF1 -d ! $INTNET1 -j DROPl
- # Дополнительная Egress-проверка
- $IPT -A OUTPUT -o $EXTIF -s ! $EXTNET -j DROPl
- # Блокируем исходящиие пакеты ICMP (за исключением PING)
- $IPT -A OUTPUT -o $EXTIF -p icmp --icmp-type ! 8 -j DROPl
- $IPT -A FORWARD -o $EXTIF -p icmp --icmp-type ! 8 -j DROPl
- $IPT -A INPUT -m conntrack --ctstate NEW -m tcp -p tcp --dport 1701 -j ACCEPT
- $IPT -A INPUT -m conntrack --ctstate NEW -m udp -p udp --dport 1701 -j ACCEPT
- # печально известные порты:
- # 0 - tcpmux; у SGI есть уязвимость, через которую можно атаковать
- # 13 - daytime
- # 98 - Linuxconf
- # 111 - sunrpc (portmap)
- # 137:139, 445 - Microsoft
- # SNMP: 161,162
- # Флотилия Squid: 3128, 8000, 8008, 8080
- # 1214 - Morpheus или KaZaA
- # 2049 - NFS
- # 3049 - очень заразный троян для Linux, часто путаемый с NFS
- # Часто атакуемые: 1999, 4329, 6346
- # Частые трояны 12345 65535
- # COMBLOCK="0:1 13 98 111 161:162 1214 1999 2049 3049 4329 6346 3128 8000 8008 8080 12345 65535"
- # Порты TCP:
- # 98 - Linuxconf
- # 512-515 - rexec, rlogin, rsh, printer(lpd)
- # [очень серьезеные уязвимости; продолжаются ежедневные атаки]
- # 1080 - прокси-серверы Socks
- # 6000 - X (ЗАМЕЧАНИЕ. X через SSH - безопасен, и работает на порту TCP 22)
- # Блокировка 6112 (CDE у Sun и HP)
- # TCPBLOCK="$COMBLOCK 98 512:515 1080 6000:6009 6112"
- # Порты UDP:
- # 161:162 - SNMP
- # 520=RIP, 9000 - Sangoma
- # 517:518 - talk и ntalk (самые надоедливые)
- # UDPBLOCK="$COMBLOCK 161:162 520 123 517:518 1427 9000"
- #echo -n "FW: Blocking attacks to TCP port"
- #for i in $TCPBLOCK;
- #do
- # echo -n "$i "
- # $IPT -A INPUT -p tcp --dport $i -j DROPl
- # $IPT -A OUTPUT -p tcp --dport $i -j DROPl
- # $IPT -A FORWARD -p tcp --dport $i -j DROPl
- #done
- echo ""
- #echo -n "FW: Blocking attacks to UDP port "
- #for i in $UDPBLOCK;
- #do
- # echo -n "$i "
- # $IPT -A INPUT -p udp --dport $i -j DROPl
- # $IPT -A OUTPUT -p udp --dport $i -j DROPl
- # $IPT -A FORWARD -p udp --dport $i -j DROPl
- #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'
- # Нам нужно синхронизировать данные!!
- PORTAGE='rsync'
- OpenPGP_HTTP_Keyserver=11371
- # Все порты сервисов читаются из /etc/services
- TCPSERV="domain ssh http https ftp ftp-data mail pop3 pop3s imap3 imaps imap2 time $PORTAGE $IRC $MSN $ICQ $OpenPGP_HTTP_Keyserver" UDPSERV="domain time"
- echo -n "FW: Allowing inside systems to use service:"
- for i in $TCPSERV;
- do
- echo -n "$i "
- $IPT -A OUTPUT -o $EXTIF -p tcp -s $EXTIP --dport $i --syn -m state --state NEW -j ACCEPT
- $IPT -A FORWARD -i $INTIF0 -p tcp -s $INTNET0 --dport $i --syn -m state --state NEW -j ACCEPT
- $IPT -A FORWARD -i $INTIF1 -p tcp -s $INTNET1 --dport $i --syn -m state --state NEW -j ACCEPT
- done
- echo ""
- echo -n "FW: Allowing inside systems to use service:"
- for i in $UDPSERV;
- do
- echo -n "$i "
- $IPT -A OUTPUT -o $EXTIF -p udp -s $EXTIP --dport $i -m state --state NEW -j ACCEPT
- $IPT -A FORWARD -i $INTIF0 -p udp -s $INTNET0 --dport $i -m state --state NEW -j ACCEPT
- $IPT -A FORWARD -i $INTIF1 -p udp -s $INTNET1 --dport $i -m state --state NEW -j ACCEPT
- done
- echo ""
- # Разрешается ping наружу
- $IPT -A OUTPUT -o $EXTIF -p icmp -s $EXTIP --icmp-type 8 -m state --state NEW -j ACCEPT
- $IPT -A FORWARD -i $INTIF0 -p icmp -s $INTNET0 --icmp-type 8 -m state --state NEW -j ACCEPT
- $IPT -A FORWARD -i $INTIF1 -p icmp -s $INTNET1 --icmp-type 8 -m state --state NEW -j ACCEPT
- # Файерволу разрешается ping внутренних систем
- $IPT -A OUTPUT -o $INTIF0 -p icmp -s $INTNET0 --icmp-type 8 -m state --state NEW -j ACCEPT
- $IPT -A OUTPUT -o $INTIF1 -p icmp -s $INTNET1 --icmp-type 8 -m state --state NEW -j ACCEPT
- $IPT -A INPUT -i $INTIF1 -p tcp --dport 22 --syn -m state --state NEW -j ACCEPT
- $IPT -t nat -A PREROUTING -j ACCEPT
- $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
- #Samba
- $IPT -A OUTPUT -o eth1 -p TCP --sport 137:139 -j ACCEPT
- $IPT -A OUTPUT -o eth1 -p UDP --sport 137:139 -j ACCEPT
- #
- $IPT -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
- $IPT -t nat -A POSTROUTING -o eth0 -j MASQUERADE
- $IPT -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
- $IPT -N ssh_filter
- $IPT -A INPUT -p tcp --sport 2222 -j ssh_filter
- $IPT -A ssh_filter -s 192.168.0.2 -j ACCEPT
- $IPT -A ssh_filter -s 192.168.1.2 -j ACCEPT
- $IPT -A ssh_filter -j DROP
- # Заблокировать и запротоколировать все, что мы могли забыть.
- #$IPT -A INPUT -j DROPl
- #$IPT -A OUTPUT -j REJECTl
- #$IPT -A FORWARD -j DROPl
- # Блокируем все прочие попытки доступа на $EXTIF
- $IPT -A INPUT -i $EXTIF -m state --state NEW,INVALID -j DROP
- $IPT -A FORWARD -i $EXTIF -m state --state NEW,INVALID -j DROP
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement