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 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255
| FAIL2BANACTIVATION=1
IPT="/sbin/iptables"
SPAMLIST="blockedip"
SPAMDROPMSG="BLOCKED IP DROP"
SERVER_IP=("XXX.XXX.XXX.XXX" "XXX.XXX.XXX.XXX" "XXX.XXX.XXX.XXX")
SSHPORT=XXXX
echo "Starting IPv4 Wall..."
$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t nat -X
$IPT -t mangle -F
$IPT -t mangle -X
modprobe ip_conntrack
modprobe ip_conntrack_ftp
[ -f /etc/scripts/blocked.ips.txt ] && BADIPS=$(egrep -v -E "^#|^$" /etc/scripts/blocked.ips.txt)
PUB_IF="eth0"
#unlimited
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
# DROP all incomming traffic
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
if [ -f /etc/scripts/blocked.ips.txt ];
then
# create a new iptables list
$IPT -N $SPAMLIST
for ipblock in $BADIPS
do
$IPT -A $SPAMLIST -s $ipblock -j DROP
done
$IPT -I INPUT -j $SPAMLIST
$IPT -I OUTPUT -j $SPAMLIST
$IPT -I FORWARD -j $SPAMLIST
fi
# Block sync
$IPT -A INPUT -i ${PUB_IF} -p tcp ! --syn -m state --state NEW -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "Drop Sync"
$IPT -A INPUT -i ${PUB_IF} -p tcp ! --syn -m state --state NEW -j DROP
# Block Fragments
$IPT -A INPUT -i ${PUB_IF} -f -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "Fragments Packets"
$IPT -A INPUT -i ${PUB_IF} -f -j DROP
# Block w00tw00t
$IPT -I INPUT -p tcp --dport 80 -m string --to 70 --algo bm --string 'GET /w00tw00t.at.ISC.SANS.' -j LOG --log-prefix "wootwoot "
$IPT -I INPUT -p tcp --dport 80 -m string --to 70 --algo bm --string 'GET /w00tw00t.at.ISC.SANS.' -j DROP
# Block bad stuff
$IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags ALL FIN,URG,PSH -j LOG --log-level 4 --log-prefix "ALL FIN,URG,PSH"
$IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
$IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags ALL ALL -j LOG --log-level 4 --log-prefix "ALL ALL"
$IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags ALL ALL -j DROP
$IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags ALL NONE -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "NULL Packets"
$IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags ALL NONE -j DROP # NULL packets
$IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags SYN,RST SYN,RST -j LOG --log-level 4 --log-prefix "SYN,RST SYN,RST"
$IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
$IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "XMAS Packets"
$IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP #XMAS
$IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags FIN,ACK FIN -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "Fin Packets Scan"
$IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags FIN,ACK FIN -j DROP # FIN packet scans
# Allow ssh
$IPT -A INPUT -p tcp --destination-port $SSHPORT -j ACCEPT
$IPT -A OUTPUT -p tcp --source-port $SSHPORT -j ACCEPT
$IPT -A OUTPUT -p tcp --destination-port $SSHPORT -j ACCEPT
$IPT -A INPUT -p tcp --source-port $SSHPORT -j ACCEPT
# allow incomming ICMP ping pong stuff
$IPT -A INPUT -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -p icmp --icmp-type 0 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -p tcp --sport 1024:65535 --dport 53 -j ACCEPT
$IPT -A OUTPUT -p udp --sport 1024:65535 --dport 53 -j ACCEPT
$IPT -A INPUT -p tcp --sport 53 --dport 1024:65535 -j ACCEPT
$IPT -A INPUT -p udp --sport 53 --dport 1024:65535 -j ACCEPT
# Ouverture de ports
for ip in ${SERVER_IP[@]}
do
# Port 80 IN
$IPT -A INPUT -p tcp -s 0/0 --sport 1024:65535 -d $ip --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp -s $ip --sport 80 -d 0/0 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
# Port 80 OUT
$IPT -A OUTPUT -p tcp -s $ip --sport 1024:65535 -d 0/0 --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPT -A INPUT -p tcp -s 0/0 --sport 80 -d $ip --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
# Port 443 IN
$IPT -A INPUT -p tcp -s 0/0 --sport 1024:65535 -d $ip --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp -s $ip --sport 443 -d 0/0 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
# Port 443 OUT
$IPT -A OUTPUT -p tcp -s $ip --sport 1024:65535 -d 0/0 --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPT -A INPUT -p tcp -s 0/0 --sport 443 -d $ip --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
# Port 8282 IN
$IPT -A INPUT -p tcp -s 0/0 --sport 1024:65535 -d $ip --dport 8282 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp -s $ip --sport 8282 -d 0/0 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
# Allow FTP connections @ port 21
$IPT -A INPUT -p tcp -d $ip --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp -s $ip --sport 21 -m state --state ESTABLISHED -j ACCEPT
# Allow Active FTP Connections
$IPT -A INPUT -p tcp --dport 20 -d $ip -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -p tcp --sport 20 -s $ip -m state --state ESTABLISHED -j ACCEPT
# Allow Passive FTP Connections
$IPT -A INPUT -p tcp -d $ip --sport 1024: --dport 29799:29899 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -p tcp -s $ip --dport 1024: --sport 29799:29899 -m state --state ESTABLISHED,RELATED -j ACCEPT
done
# Ouverture pour nrpe
$IPT -A INPUT -p tcp --dport 5666 -s XXX.XXX.XXX.XXX -j ACCEPT
#----------------------------------------------------------------------------
# Mail STUFF
# Mail SMTP:25
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --sport 25 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 25 -j ACCEPT
#Mail SMTP:587
iptables -A INPUT -p tcp --dport 587 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 587 -j ACCEPT
iptables -A INPUT -p tcp --sport 587 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 587 -j ACCEPT
# Mail POP3:110
iptables -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp --sport 110 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 110 -j ACCEPT
# Mail IMAP:143
iptables -A INPUT -p tcp --dport 143 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 143 -j ACCEPT
iptables -A INPUT -p tcp --sport 143 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 143 -j ACCEPT
# Mail POP3S:995
iptables -A INPUT -p tcp --dport 995 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 995 -j ACCEPT
iptables -A INPUT -p tcp --sport 995 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 995 -j ACCEPT
#Mail IMAPS:993
iptables -A INPUT -p tcp --dport 993 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 993 -j ACCEPT
iptables -A INPUT -p tcp --sport 993 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 993 -j ACCEPT
#------------------------------------------------------------------------------
# Ouverture divers port utiles
for ip in ${SERVER_IP[@]}
do
$IPT -A INPUT -p tcp --sport mysql -s XXX.XXX.XXX.XXX -d $ip -j ACCEPT
$IPT -A OUTPUT -p tcp --dport mysql -d XXX.XXX.XXX.XXX -s $ip -j ACCEPT
#Web Service
$IPT -A INPUT -p tcp --sport 1972 -s XXX.XXX.XXX.XXX -d $ip -j ACCEPT
$IPT -A OUTPUT -p tcp --dport 1972 -d XXX.XXX.XXX.XXX -s $ip -j ACCEPT
#Idem (dev)
$IPT -A INPUT -p tcp --sport 1973 -s XXX.XXX.XXX.XXX -d $ip -j ACCEPT
$IPT -A OUTPUT -p tcp --dport 1973 -d XXX.XXX.XXX.XXX -s $ip -j ACCEPT
done
#On accepte les connexion mysql depuis chez nous
$IPT -A INPUT -p tcp --dport mysql -s XXX.XXX.XXX.XXX -d ${SERVER_IP[0]} -j ACCEPT
$IPT -A OUTPUT -p tcp --sport mysql -d XXX.XXX.XXX.XXX -s ${SERVER_IP[0]} -j ACCEPT
#Ouverture pour le protocole d'Apple pour les notifcations
$IPT -A INPUT -p tcp --dport 2195 -j ACCEPT
$IPT -A OUTPUT -p tcp --dport 2195 -j ACCEPT
$IPT -A INPUT -p tcp --sport 2195 -j ACCEPT
$IPT -A OUTPUT -p tcp --sport 2195 -j ACCEPT
# Pas de log pour le scanner embetant...
$IPT -A INPUT -p udp -i ${PUB_IF} --sport 17500 --dport 17500 -j REJECT
$IPT -A INPUT -p udp -i ${PUB_IF} --sport 68 --dport 67 -j REJECT
##### Add your rules below ######
##### END your rules ############
# Do not log smb/windows sharing packets - too much logging
$IPT -A INPUT -p tcp -i eth0 --dport 137:139 -j REJECT
$IPT -A INPUT -p udp -i eth0 --dport 137:139 -j REJECT
# log everything else and drop
$IPT -A INPUT -j LOG --log-prefix "END INPUT "
$IPT -A FORWARD -j LOG
$IPT -A INPUT -j DROP
if [ $FAIL2BANACTIVATION -eq 1 ];
then
# Restarting fail2ban
/etc/init.d/fail2ban restart
fi
exit 0 |
Partager