cat etc init firewall bin sh etc init iptables IPTABLES sbin iptables

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
cat /etc/init.d/firewall
#!/bin/sh
# /etc/init.d/iptables
IPTABLES=/sbin/iptables
case "$1" in
start)
echo "Starting iptables"
# Обнуляем правила
$IPTABLES -F
$IPTABLES -X
$IPTABLES -F -t nat
$IPTABLES -X -t nat
# Политика по умолчанию
# Все запрещено
# Установка политик по умолчанию
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT ACCEPT
#$IPTABLES -A INPUT -i eth0 -p icmp -j ACCEPT
$IPTABLES -A OUTPUT -o eth0 -p icmp -j ACCEPT
# запрещаем icmp флуд
$IPTABLES -A INPUT -p icmp --icmp-type 8 -m limit --limit 2/s -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type 8 -j LOG --log-prefix "ICMP/in/8 Excessive: "
$IPTABLES -A INPUT -p icmp --icmp-type 8 -j DROP
# Разрешаем локальный интерфейс
$IPTABLES -A INPUT -i lo -j ACCEPT
# Ограничение скорости отдачи
$IPTABLES -A OUTPUT -o eth0 -p udp -m hashlimit --hashlimit-name udpn --hashlimit-upto 100/sec --hashlimit-burst 200 --hashlimit-mode dstip -j ACCEPT
$IPTABLES -A OUTPUT -o eth0 -p tcp -m hashlimit --hashlimit-name tcpn --hashlimit-upto 1000/sec --hashlimit-burst 2000 --hashlimit-mode dstip -j ACCEPT
# 16 соединений на сеть класса С
$IPTABLES -A INPUT -i eth0 -p tcp --dport 80 -m connlimit --connlimit-above 16 --connlimit-mask 24 -j REJECT
# Защита от спуфинга
$IPTABLES -A INPUT -i eth0 -m conntrack --ctstate NEW,INVALID -p tcp --tcp-flags SYN,ACK SYN,ACK -j REJECT --reject-with tcp-reset
# Защита от попытки открыть входящее соединение TCP не через SYN
$IPTABLES -A INPUT -i eth0 -m conntrack --ctstate NEW -p tcp ! --syn -j DROP
# REL, ESTB allow пакеты
$IPTABLES -A INPUT -i eth0 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
# Разрешаем рабочие порты
#$IPTABLES -A INPUT -p tcp --dport 21 -j ACCEPT
#$IPTABLES -A INPUT -p tcp --dport 25 -j ACCEPT
$IPTABLES -A INPUT -p udp --sport 53 -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 88 -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 443 -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 667 -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 7777 -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 8000 -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 8001 -j ACCEPT
# Защита сервера SSH от брутфорса
$IPTABLES -A INPUT -p tcp --syn --dport 22 -m recent --name antibrut --set
$IPTABLES -A INPUT -p tcp --syn --dport 22 -m recent --name antibrut --update --seconds 60 --hitcount 3 -j DROP
$IPTABLES -A INPUT -p tcp --dport 22 -j ACCEPT
# sys net tuning
#echo "2048" > /proc/sys/net/ipv4/tcp_max_syn_backlog
#echo "1" > /proc/sys/net/ipv4/tcp_synack_retries
#echo "30" > /proc/sys/net/ipv4/tcp_fin_timeout
#echo "5" > /proc/sys/net/ipv4/tcp_keepalive_probes
#echo "15" > /proc/sys/net/ipv4/tcp_keepalive_intvl
#echo "2048" > /proc/sys/net/core/netdev_max_backlog
#echo "2048" > /proc/sys/net/core/somaxconn
#sysctl net.ipv4.ip_forward=0
#sysctl net.ipv4.tcp_syncookies=1
#sysctl net.ipv4.tcp_fin_timeout=60
#sysctl net.ipv4.icmp_echo_ignore_broadcasts=1
#sysctl net.ipv4.tcp_window_scaling=1
#sysctl net.ipv4.tcp_timestamps=1
#sysctl net.ipv4.tcp_sack=1
#sysctl net.core.rmem_max=16777216
#sysctl net.core.wmem_max=16777216
;;
stop)
echo "Stopping iptables"
# Обнуляем правила
$IPTABLES -F
$IPTABLES -X
$IPTABLES -F -t nat
$IPTABLES -X -t nat
# Политика по умолчанию
# Все разрешено
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
;;
*)
echo "Usage: /etc/init.d/$IPTABLES {start|stop}"
exit 1
;;
esac
exit 0