iptables skrypt

Serwery i sieci oparte na Slackware, wszelkiego rodzaju usługi, troubleshooting.

Moderatorzy: Moderatorzy, Administratorzy

m1m
Użytkownik
Posty: 85
Rejestracja: 2007-07-20, 21:07

iptables skrypt

Post autor: m1m »

witam

prosze o sprawdzenie skryptu, napisalem go sam, czy cos pominalem, dalem za malo, za duzo? co warto by jeszcze dopisac?

podstawowe zalozenia:
-maskarada
-udostepnione ftp,ssh i mysql

Kod: Zaznacz cały

#!/bin/sh

# dane sieci
IF_PUB="eth0"
IP_PUB=`grep IPADDR /etc/dhcpc/dhcpcd-eth0.info|awk -F "=" '{print $2}'`
IF_LAN="ath0"
IP_LAN="192.168.0.1"
LAN="192.168.0.0/24"

# opcje kernela
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo 1 > /proc/sys/net/ipv4/tcp_abort_on_overflow
echo 128 > /proc/sys/net/ipv4/ip_default_ttl

# czyscimy tablice
iptables -F
iptables -F -t nat
iptables -F -t mangle
iptables -F -t filter

# domyslnie akcje dla pakietow
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# odblokowanie lokalnego
iptables -A INPUT -i lo -j ACCEPT

# zezwalamy na polaczenia nawiazane i powiazane z innymi
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# pozwalamy lanowi na przekazywanie pakietow + maskarada
iptables -A FORWARD -i $IF_LAN -s $LAN -m state --state NEW -j ACCEPT
iptables -t nat -A POSTROUTING -s $LAN -o $IF_PUB -j MASQUERADE

# mapowanie adresu zew na adres wew dla lanu
iptables -t nat -A PREROUTING -i $IF_LAN -s $LAN -d $IP_PUB -j DNAT --to $IP_LAN

# pingi tylko dla lanu
iptables -A INPUT -i $IF_LAN -s $LAN -p icmp --icmp-type echo-request -j ACCEPT

# logowanie zanim pakiet trafi do accept
iptables -A INPUT -i $IF_PUB -p icmp -m limit --limit 1/m --limit-burst 2 -j LOG --log-level debug --log-prefix "IN ICMP: "
iptables -A INPUT -i $IF_PUB -p tcp --dport 21 --syn -j LOG --log-level debug --log-prefix "IN FTP: "
iptables -A INPUT -i $IF_PUB -p tcp --dport 22 --syn -j LOG --log-level debug --log-prefix "IN SSH: "
iptables -A INPUT -i $IF_PUB -p tcp --dport 3306 --syn -j LOG --log-level debug --log-prefix "IN SQL: "

##### FTP
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
# porty dla pasywnego
iptables -A INPUT -p tcp --dport 60000:61000 -j ACCEPT
# blokowanie ip
iptables -I INPUT -i $IF_PUB -p tcp --dport 21 -m state --state NEW -m recent --set
iptables -I INPUT -i $IF_PUB -p tcp --dport 21 -m state --state NEW -m recent --update --seconds 300 --hitcount 4 -j DROP

##### SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# blokowanie ip
iptables -I INPUT -i $IF_PUB -p tcp --dport 22 -m state --state NEW -m recent --set
iptables -I INPUT -i $IF_PUB -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 4 -j DROP

##### MySQL
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT

# na koniec logujemy pakiety ktore nie zostaly zaakceptowane
iptables -A INPUT -i $IF_PUB -p tcp --syn -m limit --limit 10/m --limit-burst 5 -j LOG --log-level debug --log-prefix "IN UNKNOWN: "
miszmaniac
Moderator
Posty: 1510
Rejestracja: 2006-03-19, 12:00
Lokalizacja: Gdynia
Kontakt:

Re: iptables skrypt

Post autor: miszmaniac »

Moim zdaniem to wygląda rozsądnie. Nie za bardzo namieszane, nie stosujesz patentów dziwnych. Definicje, które muszą być są. Nadmiarowe tylko to logowanie na słabej maszynie może trochę zwalniać ruch, ale oprócz tego jest czytelnie i ok.
Pamiętaj,
Jeśli Twój problem został rozwiązany dopisz [b] [Rozw.] [/b]w tytule.
Projektowanie stron WWW: [url=http://www.miszewski.net.pl]www.miszewski.net.pl[/url]
m1m
Użytkownik
Posty: 85
Rejestracja: 2007-07-20, 21:07

Re: iptables skrypt

Post autor: m1m »

dzieki za odpowiedz! zapomnialem jeszcze dodac ze na eth0 jest klient dhcp, na ath0 serwer dhcp
Awatar użytkownika
marco70
Moderator
Posty: 1110
Rejestracja: 2006-10-26, 19:03
Lokalizacja: K...l
Kontakt:

Re: iptables skrypt

Post autor: marco70 »

Kod: Zaznacz cały

echo 128 > /proc/sys/net/ipv4/ip_default_ttl 
Tak z ciekawości do czego jest ten wpis ?
slackware64-15.0
largo3
Moderator
Posty: 1302
Rejestracja: 2006-06-11, 11:08

Re: iptables skrypt

Post autor: largo3 »

Ustawia TTL.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity.
-- Dennis Ritchie
Linux Registered User #419452
miszmaniac
Moderator
Posty: 1510
Rejestracja: 2006-03-19, 12:00
Lokalizacja: Gdynia
Kontakt:

Re: iptables skrypt

Post autor: miszmaniac »

m1m pisze:dzieki za odpowiedz! zapomnialem jeszcze dodac ze na eth0 jest klient dhcp, na ath0 serwer dhcp
Można się było domyślić:

Kod: Zaznacz cały

IP_PUB=`grep IPADDR /etc/dhcpc/dhcpcd-eth0.info|awk -F "=" '{print $2}'` 
:ok:
Pamiętaj,
Jeśli Twój problem został rozwiązany dopisz [b] [Rozw.] [/b]w tytule.
Projektowanie stron WWW: [url=http://www.miszewski.net.pl]www.miszewski.net.pl[/url]
Pajaczek
Użytkownik
Posty: 1439
Rejestracja: 2006-08-03, 13:16
Lokalizacja: Winny Gród

Re: iptables skrypt

Post autor: Pajaczek »

m1m pisze:# czyscimy tablice
iptables -F
iptables -F -t filter
Coś tu jest nadmiarowe...

Trochę nie za bardzo rozumiem sens tego:
m1m pisze:# mapowanie adresu zew na adres wew dla lanu
iptables -t nat -A PREROUTING -i $IF_LAN -s $LAN -d $IP_PUB -j DNAT --to $IP_LAN
jakiś hack defens? Ale i tak zwrotka by nie poszła (chyba).

Troszkę bym przeorganizował to blokowanie ip dla FTP i SSH, ale chodzi wyłącznie umiejscowienie reguł bliżej w firewallu (przy takim dodaniu reguły będą rozrzucone, co może zaciemniać obserwację działania).

Aaa... no i jeśli masz static ip publiczny, a tak można się domyślać z niektórych reguł, to nie MASQUERADE tylko SNAT!!!
Awatar użytkownika
ein
Użytkownik
Posty: 49
Rejestracja: 2006-06-03, 13:54

Re: iptables skrypt

Post autor: ein »

m1m pisze:dzieki za odpowiedz! zapomnialem jeszcze dodac ze na eth0 jest klient dhcp, na ath0 serwer dhcp
DHCPd ma w dupie iptables. (przez to, ze uzywa tzw. Raw Sockets)

Kod: Zaznacz cały

# pozwalamy lanowi na przekazywanie pakietow + maskarada 
iptables -A FORWARD -i $IF_LAN -s $LAN -m state --state NEW -j ACCEPT
dalbym jeszcze "-o"
# mapowanie adresu zew na adres wew dla lanu
iptables -t nat -A PREROUTING -i $IF_LAN -s $LAN -d $IP_PUB -j DNAT --to $IP_LAN
Po kiego to?
# logowanie zanim pakiet trafi do accept
iptables -A INPUT -i $IF_PUB -p icmp -m limit --limit 1/m --limit-burst 2 -j LOG --log-level debug --log-prefix "IN ICMP: "
Nie za malo? Datagramy w sieci gina, szczegolnie pierwszy...

Kod: Zaznacz cały

##### FTP 
[...]
# blokowanie ip 
iptables -I INPUT -i $IF_PUB -p tcp --dport 21 -m state --state NEW -m recent --set 
iptables -I INPUT -i $IF_PUB -p tcp --dport 21 -m state --state NEW -m recent --update --seconds 300 --hitcount 4 -j DROP
##### SSH 
[...]
# blokowanie ip 
iptables -I INPUT -i $IF_PUB -p tcp --dport 22 -m state --state NEW -m recent --set 
iptables -I INPUT -i $IF_PUB -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 4 -j DROP
IMHO lepsze rozwiazanie to: fail2ban.

PS. Mozesz pomyslec jeszcze o ARPwatch.
Czlowiek cale zycie sie uczy, ale i tak glupi umiera.
ODPOWIEDZ