Skip to content

Instantly share code, notes, and snippets.

@titovanton
Created December 17, 2016 21:36
Show Gist options
  • Save titovanton/049051ce7a4665134d6d7a682a367947 to your computer and use it in GitHub Desktop.
Save titovanton/049051ce7a4665134d6d7a682a367947 to your computer and use it in GitHub Desktop.
#!/bin/bash
IPT='/sbin/iptables'
IPSET='/sbin/ipset'
IP=$(ifconfig eth0 | grep "inet addr" | cut -d ':' -f 2 | cut -d ' ' -f 1)
ipset_trust=$(cat /root/ipset_trust.txt)
ipset_blacklist=$(cat /root/ipset_blacklist.txt)
$IPT -F
$IPT -t raw -F
$IPSET -X
# ipset init
$IPSET -N trust iphash
$IPSET -N blacklist iphash
$IPSET -N autoban iphash timeout 172800
# trusted
for ip in $ipset_trust; do
$IPSET -A trust $ip
done
# default blacklist
for ip in $ipset_blacklist; do
$IPSET -A blacklist $ip
done
# ipset to iptables
$IPT -v -A PREROUTING -t raw -d $IP -m set --match-set trust src -j ACCEPT
$IPT -v -A PREROUTING -t raw -d $IP -m set --match-set blacklist src -j DROP
$IPT -v -A PREROUTING -t raw -d $IP -m set --match-set autoban src -j DROP
# Разрешаем связанные и установленые соединения
$IPT -A INPUT -d $IP -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# Разрешаем служебный icmp-трафик
$IPT -A INPUT -d $IP -p icmp -j ACCEPT
# Разрешаем доверенный трафик на интерфейс loopback
$IPT -A INPUT -d $IP -i lo -j ACCEPT
# ssh, smtp, smtps, http, https, runserver
$IPT -A INPUT -d $IP -p tcp -m conntrack --ctstate NEW -m multiport --dports 22,25,465,80,443,8000 -j ACCEPT
# Запрещаем всё остальное для INPUT
$IPT -A INPUT -d $IP -j REJECT --reject-with icmp-host-prohibited
# drop all forwarding
$IPT -A FORWARD -j DROP
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment