Firewall, iptables od zera - jak?

Konfiguracja serwerów, usług, itp.
Dominik
Beginner
Posty: 209
Rejestracja: 22 lutego 2007, 21:29
Lokalizacja: katowice

Firewall, iptables od zera - jak?

Post autor: Dominik »

Zmęczyły mnie różnorakie firewalle i nakładki na iptables. Ciężko je ustawić, a jeszcze trudniej coś poprawić w ich konfiguracji. Stąd myślę o najprostszym rozwiązaniu - skrypt dla iptables uruchamiany przy starcie. Poradników jest co prawda sporo, lecz:
  1. Trudno znaleźć coś dla początkującego (wymagają zbyt dużej wiedzy by je zrozumieć).
  2. Proponują różne metody i którą tu wybrać? Najczęściej odsyłając jednak do firestartera czy shorewalla.

Już raz zainstalowałem sobie znośny skrypt, niestety po przejście na Lennego nie dał oczekiwanych rezultatów (przekopiowałem go, identycznie podpiąłem i nie wstawał przy starcie, oraz pozostawił otwarte porty).
  1. Zaczynam od skryptu z generatora iptables stąd.
  2. Uruchamiam go i sprawdzam, czy dobrze działa https://www.grc.com/x/ne.dll?bh0bkyd2.
  3. Następnie usiłuje ręcznie poprawiać (wróć do punktu 2 i jeśli działa to przejdź do punktu 4, inaczej wróć do punktu 3).
  4. Jeśli działa to kopiuje go do:

    Kod: Zaznacz cały

    /etc/init.d/nazwa_skryptu
    potem (aby uruchamiał się przy starcie systemu)

    Kod: Zaznacz cały

     update-rc.d nazwa_skryptu defaults 80 
    Na razie męczę się z wygenerowaniem/poprawą skryptu, dla ustawienia: 1 interfejs sieciowy, zmienne ip, komputer nic nie udostępnia tylko przeglądanie stronek, gg, irc. Obecnie skrypt zostawia otwarty port 80 i komputer nie jest niewidzialny na 443. Co poprawić w skrypcie? A może źle się do tego zabieram? Jeśli tak, to jak to robić porządnie?
Skrypt, na którym próbuje:
P.S. Proszę o bardzo dokładne instrukcje, przykłady dla bardzo początkującego, może pomożecie nie tylko w moim przypadku.

Kod: Zaznacz cały

#!/bin/sh

################
# Konfiguracja #
################

F="/sbin/iptables"
LOG="ipt#"

#interfejs globalny - dla sieci zewnetrznej
G_NET_NAME="eth0"
G_NET_IP=""

#ustawienie modulow i konfiguracji jadra
/sbin/modprobe ip_tables
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_conntrack_ftp

echo "1" > /proc/sys/net/ipv4/ip_forward

#dynamiczny przydzial adresu
#echo "1" > /proc/sys/net/ipv4/ip_dynaddr

#ignorowanie ICMP echo request wysylanych na adres rozgloszeniowy
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

#ochrona przed SYN flood
echo "1" > /proc/sys/net/ipv4/tcp_syncookies

#refuse source routed packets
echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route

echo "1" > /proc/sys/net/ipv4/conf/all/secure_redirects

#walidacja zrodla za pomoca reversed path (RFC1812).
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter

#logowanie pakietow z nieprawidlowych adresow
echo "1" > /proc/sys/net/ipv4/conf/all/log_martians

#################
# INICJALIZACJA #
#################

echo "Ustawienia polityki dla lancuchow standardowych..."
$F -P INPUT ACCEPT
$F -P FORWARD ACCEPT
$F -P OUTPUT ACCEPT
$F -t nat -P PREROUTING ACCEPT
$F -t nat -P OUTPUT ACCEPT
$F -t nat -P POSTROUTING ACCEPT
$F -t mangle -P PREROUTING ACCEPT
$F -t mangle -P OUTPUT ACCEPT
$F -t mangle -P INPUT ACCEPT
$F -t mangle -P FORWARD ACCEPT
$F -t mangle -P POSTROUTING ACCEPT

echo "Czyszczenie regul dla lancuchow standardowych..."
$F -F
$F -t nat -F
$F -t mangle -F

echo "Kasowanie wszystkich niestandardowych lancuchow..."
$F -X
$F -t nat -X
$F -t mangle -X

if [ "$1" = "stop" ]
then
	echo "Firewall zostal wylaczony."
	exit 0
fi

echo "Ustawienia polityki lancuchow standardowych..."
$F -P INPUT DROP
$F -P OUTPUT DROP
$F -P FORWARD DROP

echo "Tworzenie niestandardowych lancuchow regul..."
$F -N bledne_pakiety
$F -N bledne_pakiety_tcp
$F -N pakiety_icmp
$F -N tcp_wchodzace
$F -N tcp_wychodzace
$F -N udp_wchodzace
$F -N udp_wychodzace

##################
# bledne_pakiety #
##################
echo "Tworzenie regul dla lancucha bledne_pakiety..."

$F -A bledne_pakiety -p ALL -m state --state INVALID -j LOG --log-prefix "$LOG bledne_pakiety "
$F -A bledne_pakiety -p ALL -m state --state INVALID -j DROP
$F -A bledne_pakiety -p tcp -j bledne_pakiety_tcp
$F -A bledne_pakiety -p ALL -j RETURN

######################
# bledne_pakiety_tcp #
######################
echo "Tworzenie regul dla lancucha bledne_pakiety_tcp..."
#dla gate
$F -A bledne_pakiety_tcp -p tcp -i $L_NET_NAME -j RETURN

$F -A bledne_pakiety_tcp -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "$LOG bledne_pakiety_tcp "
$F -A bledne_pakiety_tcp -p tcp ! --syn -m state --state NEW -j DROP

$F -A bledne_pakiety_tcp -p tcp --tcp-flags ALL NONE -j LOG --log-prefix "$LOG bledne_pakiety_tcp "
$F -A bledne_pakiety_tcp -p tcp --tcp-flags ALL NONE -j DROP

$F -A bledne_pakiety_tcp -p tcp --tcp-flags ALL ALL -j LOG --log-prefix "$LOG bledne_pakiety_tcp "
$F -A bledne_pakiety_tcp -p tcp --tcp-flags ALL ALL -j DROP

$F -A bledne_pakiety_tcp -p tcp --tcp-flags ALL FIN,URG,PSH -j LOG --log-prefix "$LOG bledne_pakiety_tcp "
$F -A bledne_pakiety_tcp -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP

$F -A bledne_pakiety_tcp -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j LOG --log-prefix "$LOG bledne_pakiety_tcp "
$F -A bledne_pakiety_tcp -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP

$F -A bledne_pakiety_tcp -p tcp --tcp-flags SYN,RST SYN,RST -j LOG --log-prefix "$LOG bledne_pakiety_tcp "
$F -A bledne_pakiety_tcp -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

$F -A bledne_pakiety_tcp -p tcp --tcp-flags SYN,FIN SYN,FIN -j LOG --log-prefix "$LOG bledne_pakiety_tcp "
$F -A bledne_pakiety_tcp -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

$F -A bledne_pakiety_tcp -p tcp -j RETURN

################
# pakiety_icmp #
################
echo "Tworzenie regul dla lancucha pakiety_icmp..."

$F -A pakiety_icmp --fragment -p ICMP -j LOG --log-prefix "$LOG pakiety_icmp fragmenty "
$F -A pakiety_icmp --fragment -p ICMP -j DROP

#pingowanie i logowanie pingowania
# $F -A pakiety_icmp -p ICMP -s 0/0 --icmp-type 8 -j LOG --log-prefix "$LOG pakiety_icmp "
# $F -A pakiety_icmp -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT

#ping - zachaszowac w przypadku odsloniecia powyzszych regul
$F -A pakiety_icmp -p ICMP -s 0/0 --icmp-type 8 -j DROP
#Time Exceeded
$F -A pakiety_icmp -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT

$F -A pakiety_icmp -p ICMP -j RETURN

#################
# tcp_wchodzace #
#################
echo "Tworzenie regul dla lancucha tcp_wchodzace..."

#ident request
#reject zamiast drop w celu unikniecia opoznien przy polaczeniach
$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port 113 -j REJECT
#FTP client (data port non-PASV)
#$F -A tcp_wchodzace -p TCP -s 0/0 --source-port 20 -j ACCEPT
#FTP control
#$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port 21 -j ACCEPT
# Passive FTP
#$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port : -j ACCEPT
#ssh
#$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port 22 -j ACCEPT
#HTTP
$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port 80 -j ACCEPT
#HTTPS
$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port 443 -j ACCEPT
#SMTP
#$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port 25 -j ACCEPT
#POP3
#$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port 110 -j ACCEPT
#SSL POP3
#$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port 995 -j ACCEPT
#IMAP4
#$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port 143 -j ACCEPT
#SSL IMAP4
#$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port 993 -j ACCEPT
#ICQ File Transfers & Other Advanced Features
#$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port : -j ACCEPT
#MSN Messenger File Transfers
#$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port : -j ACCEPT
#NFS Server - portmapper
#$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port  -j ACCEPT
#NFS Server - statd
#$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port  -j ACCEPT
#NFS Server - NFS daemon
#$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port  -j ACCEPT
#NFS Server - lockd
#$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port  -j ACCEPT
#NFS Server - mountd
#$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port  -j ACCEPT
#NFS Server - quotad
#$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port  -j ACCEPT
#User specified allowed TCP protocol
#$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port  -j ACCEPT

#nie pasujace: powrot i logowanie
$F -A tcp_wchodzace -p TCP -j RETURN

##################
# tcp_wychodzace #
##################
echo "Tworzenie regul dla lancucha tcp_wychodzace..."

#Blokowanie FTP Data
#$F -A tcp_wychodzace -p TCP -s 0/0 --destination-port 20 -j REJECT
#Blokowanie FTP Control
#$F -A tcp_wychodzace -p TCP -s 0/0 --destination-port 21 -j REJECT
#Blokowanie SSH
#$F -A tcp_wychodzace -p TCP -s 0/0 --destination-port 22 -j REJECT
#Blokowanie Telnet
#$F -A tcp_wychodzace -p TCP -s 0/0 --destination-port 23 -j REJECT
#Blokowanie HTTP
#$F -A tcp_wychodzace -p TCP -s 0/0 --destination-port 80 -j REJECT
#Blokowanie HTTPS
#$F -A tcp_wychodzace -p TCP -s 0/0 --destination-port 443 -j REJECT
#Blokowaie SMTP
#$F -A tcp_wychodzace -p TCP -s 0/0 --destination-port 25 -j REJECT
#Blokowaie POP3
#$F -A tcp_wychodzace -p TCP -s 0/0 --destination-port 110 -j REJECT
#Blokowaie POP3SSL
#$F -A tcp_wychodzace -p TCP -s 0/0 --destination-port 995 -j REJECT
#Blokowaie IMAP4
#$F -A tcp_wychodzace -p TCP -s 0/0 --destination-port 143 -j REJECT
#Blokowaie IMAP4SSL
#$F -A tcp_wychodzace -p TCP -s 0/0 --destination-port 993 -j REJECT
#Blokowanie NEWS
#$F -A tcp_wychodzace -p TCP -s 0/0 --destination-port 119 -j REJECT
#Blokowanie IRC
#$F -A tcp_wychodzace -p TCP -s 0/0 --destination-port : -j REJECT
#Blokowaie AIM
#$F -A tcp_wychodzace -p TCP -s 0/0 --destination-port 5190 -j REJECT
#Blokowaie AIM Images
#$F -A tcp_wychodzace -p TCP -s 0/0 --destination-port 4443 -j REJECT
#Blokowaie MSN Messenger
#$F -A tcp_wychodzace -p TCP -s 0/0 --destination-port 1863 -j REJECT
#Blokowany zakres portow
#$F -A tcp_wychodzace -p TCP -s 0/0 --destination-port  -j REJECT
#blokowanie gg
#$F -A tcp_wychodzace -p TCP -s 0/0 -d 217.17.41.0/24 -j REJECT
#$F -A tcp_wychodzace -p TCP -s 0/0 -d 217.17.33.0/24 -j REJECT

#nie pasujace ACCEPT
$F -A tcp_wychodzace -p TCP -s 0/0 -j ACCEPT

#################
# udp_wchodzace #
#################
echo "Tworzenie regul dla lancucha udp_wchodzace..."

#Drop netbios calls
$F -A udp_wchodzace -p UDP -s 0/0 --destination-port 137 -j DROP
$F -A udp_wchodzace -p UDP -s 0/0 --destination-port 138 -j DROP

#ident - reject zamiast drop w celu unikniecia opoznien w polaczeniach
$F -A udp_wchodzace -p UDP -s 0/0 --destination-port 113 -j REJECT

#NTP
#$F -A udp_wchodzace -p UDP -s 0/0 --destination-port 123 -j ACCEPT
#DNS
$F -A udp_wchodzace -p UDP -s 0/0 --destination-port 53 -j ACCEPT
#zewnetrzny server DHCP
$F -A udp_wchodzace -p UDP -s 0/0 --source-port 68 --destination-port 67 -j ACCEPT
#NFS Server - portmapper
#$F -A udp_wchodzace -p UDP -s 0/0 --destination-port  -j ACCEPT
#NFS Server - statd
#$F -A udp_wchodzace -p UDP -s 0/0 --destination-port  -j ACCEPT
#NFS Server - NFS daemon
#$F -A udp_wchodzace -p UDP -s 0/0 --destination-port  -j ACCEPT
#NFS Server - lockd
#$F -A udp_wchodzace -p UDP -s 0/0 --destination-port  -j ACCEPT
#NFS Server - mountd
#$F -A udp_wchodzace -p UDP -s 0/0 --destination-port  -j ACCEPT
#NFS Server - quotad
#$F -A udp_wchodzace -p UDP -s 0/0 --destination-port  -j ACCEPT
#dopuszczalny zakres portow udp
#$F -A udp_wchodzace -p UDP -s 0/0 --destination-port  -j ACCEPT

#nie pasujace - powrot i logowanie
$F -A udp_wchodzace -p UDP -j RETURN

##################
# udp_wychodzace #
##################
echo "Tworzenie regul dla lancucha udp_wychodzace..."

#Blokowany zakres portow
#$F -A udp_wychodzace -p UDP -s 0/0 --destination-port  -j REJECT
#blokowanie gg
#$F -A udp_wychodzace -p UDP -s 0/0 -d 217.17.41.0/24 -j REJECT
#$F -A udp_wychodzace -p UDP -s 0/0 -d 217.17.33.0/24 -j REJECT

#nie pasujace ACCEPT
$F -A udp_wychodzace -p UDP -s 0/0 -j ACCEPT

#########
# INPUT #
#########

echo "Tworzenie regul dla lancucha INPUT..."

$F -A INPUT -p ALL -i lo -j ACCEPT
$F -A INPUT -p ALL -j bledne_pakiety

#DOCSIS compliant cable modems
#Drop without logging.
$F -A INPUT -p ALL -d 224.0.0.1 -j DROP

#Ustanowione polaczenia
$F -A INPUT -p ALL -i $G_NET_NAME -m state --state ESTABLISHED,RELATED -j ACCEPT

#reszta do odpowiednich lancuchow
$F -A INPUT -p ICMP -i $G_NET_NAME -j pakiety_icmp
$F -A INPUT -p TCP -i $G_NET_NAME -j tcp_wchodzace
$F -A INPUT -p UDP -i $G_NET_NAME -j udp_wchodzace

#zatrzymanie rozgloszen
$F -A INPUT -p ALL -d 255.255.255.255 -j DROP

#nie pasujace - logowanie
$F -A INPUT -j LOG --log-prefix "$LOG INPUT:99 "

###########
# FORWARD #
###########
#dla gate caly
echo "Tworzenie regul dla lancucha FORWARD..."

#nie pasujace - loguj
$F -A FORWARD -j LOG --log-prefix "$LOG FORWARD:99 "

##########
# OUTPUT #
##########

echo "Tworzenie regul dla lancucha OUTPUT..."

$F -A OUTPUT -m state -p icmp --state INVALID -j DROP
$F -A OUTPUT -p ALL -s 127.0.0.1 -j ACCEPT
$F -A OUTPUT -p ALL -o lo -j ACCEPT

$F -A OUTPUT -p ALL -o $G_NET_NAME -j ACCEPT

#nie pasujace - loguj
$F -A OUTPUT -j LOG --log-prefix "$LOG OUTPUT:99 "

################
# mangle table #
################
echo "Tworzenie regul dla mangle table..."
Awatar użytkownika
darkwater
Junior Member
Posty: 828
Rejestracja: 25 stycznia 2007, 14:01
Lokalizacja: Częstochowa

Post autor: darkwater »

Skoro jesteś początkujący to polecam ci program fwbuilder (w repozytorium). Generuje on normalny skrypt z regułkami iptables, który można bezproblemowo przejrzeć/edytować. Potem dodajesz go do:

Kod: Zaznacz cały

/etc/init.d/
następnie:

Kod: Zaznacz cały

update-rc.d
i działa.
Dominik
Beginner
Posty: 209
Rejestracja: 22 lutego 2007, 21:29
Lokalizacja: katowice

Post autor: Dominik »

dzięki, ale właśnie zaproponowałeś mi kolejny wielki program - nauka obsługiwania go jest porównywalna z nauką obsługi firewalli. No chyba, że jest kilka pakietów fwbuilder. Przepraszam ale szukam metody bez dociągania żadnych oprogramowań środowisk itp. Jeszcze raz powoli:
chodzi mi o sposób na dobre poprawianie skryptu iptables, bez użycia kolejnych nakładek/generatorów Jak zaczynasz to nauka obsługi każdego kolejnego programu miesza - tutaj np zacznę mylić zasady pisania iptables z tym jak używać fwbuildera - dałem w 1 poście link do generatora iptables właśnie dlatego, że wymaga mniejszej wiedzy od użytkownika. Niestety wymaga podania zbyt wielu opcji jak na początkującego, często się pomylimy i później musimy ręcznie poprawiać - dlatego założyłem ten temat

W tym przypadku pomogło ponowne wygenerowanie iptables lecz gdy przechodzimy do strony: blokowane porty wpisujemy te, które shields up podał jako otwarte, i dalej tak samo. W dzień porównam oba skrypty i wskaże różnice (co poprawić lub dopisać) A jeszcze jedno: dla tej konfiguracji na podstronie udostępniane serwisy nie wpisujemy żadnych.
Kaka'
Senior Member
Posty: 3018
Rejestracja: 30 lipca 2006, 13:17
Lokalizacja: Kartuzy

Post autor: Kaka' »

Hej,

jak nie możesz sobie poradzić z iptables to szczerze mogę polecić shorewalla (sam ostatnio przekopałem jego dokumentację) - naprawdę, dobrze spełnia swoje zadanie. Wystarczy tylko parę linijek i już masz sprawny firewall.


Pozdrawiam.
Dominik
Beginner
Posty: 209
Rejestracja: 22 lutego 2007, 21:29
Lokalizacja: katowice

Post autor: Dominik »

Kaka' to nie jest kwestia dobrania dobrego firewalla - nakładki, znalazłem już takowy (arno iptables firewall). Zależy mi na tym aby nauczyć się iptables. Po prostu nie chcę iść na skróty.
Bawię się z iptables metodą prób i błędów w oparciu o kilka manów i stronek różnej jakości. Z pewnością popełniam wiele błędów. Założyłem ten temat i opisuje krok, po kroku, co robię w nadziei, że ktoś pokaże mi gdzie robię błędy.

Jak na razie wreszcie mi iptables chodzi, (shields up stwierdza iż wszystko w porządku) jednak nie wiem dlaczego wywala mi błędy dotyczące polecenia RETURN nawet gdy korzystam z takich gotowców jak ten co wkleiłem.

I jeszcze jedno pytanie dotyczące tego "gotowca" - widzę tutaj użycie REJECT zamiast DROP - w kilku miejscach (acz nie we wszystkich) musiałem to pozmieniać, żeby uciszyć porty. Dlaczego czasem owo REJECT wykrywa mi jako port zamknięty a czasem jako ukryty?

P.S. Nie wklejam wszystkich wersji skryptu, ani logów bo jakoś nie chcą wejść jako załącznik a długie cytaty jeszcze bardziej zaciemniają
cordial
Posty: 48
Rejestracja: 10 maja 2007, 12:21

Post autor: cordial »

Dominik pisze: I jeszcze jedno pytanie dotyczące tego "gotowca" - widzę tutaj użycie REJECT zamiast DROP - w kilku miejscach (acz nie we wszystkich) musiałem to pozmieniać, żeby uciszyć porty. Dlaczego czasem owo REJECT wykrywa mi jako port zamknięty a czasem jako ukryty?
Nagłówki pakietów są sprawdzane w trakcie przechodzenia przez maszynę.

ACCEPT - zaakceptowany.
DROP - pakiet zostanie “upuszczony na podłogę” - odrzucony.
REJECT - odrzucony, z tą różnicą, że zostaje on odesłany z powrotem do źródła, powiadamiając o tym nadawcę.

Ja w ogóle nie używam REJECT, po co?
Dominik pisze: #reject zamiast drop w celu unikniecia opoznien przy polaczeniach
?

Pozdrawiam.
Dominik
Beginner
Posty: 209
Rejestracja: 22 lutego 2007, 21:29
Lokalizacja: katowice

Post autor: Dominik »

Dziękuję cordial.
Spróbuje wymienić we wszystkich przychodzących ,,reject' na ,,drop''. Z tym opóźnieniem zasugerowałem się m.in tym:

Kod: Zaznacz cały

#ident - reject zamiast drop w celu uniknięcia opóźnień w połączeniach
$F -A udp_wchodzące -p UDP -s 0/0 --destination-port 113 -j REJECT
Nie byłem pewny, czy to ma jakieś znaczenie, ale sprawdzę empirycznie.
Dziwi mnie tylko, że mimo kilku miejsc w skrypcie, gdzie pozostawiłem REJECT porty były wykrywane jako ,,stealth'' - o ile rozumiem zachowywały się jak przy DROP, czy mam szukać jakiejś kolejności reguł?
Zastanawia mnie czemu przy wykonaniu skryptu (np tego z pierwszego postu) konsola grymasi o niewłaściwe użycie return. Możecie pokazać na tym skrypcie, czy wklejać najkrótszy, w którym wystąpił problem?
cordial
Posty: 48
Rejestracja: 10 maja 2007, 12:21

Post autor: cordial »

Dominik pisze: Stąd myślę o najprostszym rozwiązaniu - skrypt dla iptables uruchamiany przy starcie. Poradników jest co prawda sporo, lecz a) trudno znaleźć coś dla początkującego (wymagają zbyt dużej wiedzy by je zrozumieć), b) proponują różne metody i którą tu wybrać? Najczęściej odsyłając jednak do firestartera czy shorewalla.
Ja napisałem prosty poradnik. Bardzo prosty skrypt, dobry dla osoby, która nie miała nigdy wcześniej styczności z iptables. W chwili obecnej, skrypt, który napisałem mi wystarcza. Jednak z czasem planuję jego ulepszenie i rozbudowę. Możesz go sobie obejrzeć tutaj.
Dominik pisze: Już raz postawiłem sobie znośny skrypt, niestety po przejście na Lennego nie dał oczekiwanych rezultatów (przekopiowałem go, identycznie podpiąłem i nie wstawał przy starcie, oraz pozostawił otwarte porty)
Spróbuj na Lennym swój skryp podpiąć korzystając z metody, którą opisałem.
Dominik pisze:

Kod: Zaznacz cały

echo "Ustawienia polityki dla lancuchow standardowych..."
$F -P INPUT ACCEPT
$F -P FORWARD ACCEPT
$F -P OUTPUT ACCEPT
$F -t nat -P PREROUTING ACCEPT
$F -t nat -P OUTPUT ACCEPT
$F -t nat -P POSTROUTING ACCEPT
$F -t mangle -P PREROUTING ACCEPT
$F -t mangle -P OUTPUT ACCEPT
$F -t mangle -P INPUT ACCEPT
$F -t mangle -P FORWARD ACCEPT
$F -t mangle -P POSTROUTING ACCEPT
Powiedz mi, po co Ci te wpisy?
Dominik pisze:

Kod: Zaznacz cały

echo "Czyszczenie regul dla lancuchow standardowych..."
$F -F
$F -t nat -F
$F -t mangle -F
Stąd bym na pewno usunął NAT i mangle. No chyba, że nie masz publicznego adresu IP, a mangle?
Dominik pisze:

Kod: Zaznacz cały

echo "Kasowanie wszystkich niestandardowych lancuchow..."
$F -X
$F -t nat -X
$F -t mangle -X
Tutaj podobnie, 2 ostatnie bym wyrzucił.
Dominik pisze:

Kod: Zaznacz cały

if [ "$1" = "stop" ]
then
	echo "Firewall zostal wylaczony."
	exit 0
fi

echo "Ustawienia polityki lancuchow standardowych..."
$F -P INPUT DROP
$F -P OUTPUT DROP
$F -P FORWARD DROP
Dlaczego dałeś:

Kod: Zaznacz cały

 OUTPUT DROP
Ja generalnie postępuje tak, zezwalam na połączenia, które wychodzą z mojej maszyny i połączenia, które są powiązane z istniejącymi już połączeniami.

Dominik pisze:

Kod: Zaznacz cały

#################
# tcp_wchodzace #
#################
echo "Tworzenie regul dla lancucha tcp_wchodzace..."

#ident request
#reject zamiast drop w celu unikniecia opoznien przy polaczeniach
$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port 113 -j REJECT
#FTP client (data port non-PASV)
#$F -A tcp_wchodzace -p TCP -s 0/0 --source-port 20 -j ACCEPT
#FTP control
#$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port 21 -j ACCEPT
# Passive FTP
#$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port : -j ACCEPT
#ssh
#$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port 22 -j ACCEPT
#HTTP
$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port 80 -j ACCEPT
#HTTPS
$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port 443 -j ACCEPT
#SMTP
#$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port 25 -j ACCEPT
#POP3
#$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port 110 -j ACCEPT
#SSL POP3
#$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port 995 -j ACCEPT
#IMAP4
#$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port 143 -j ACCEPT
#SSL IMAP4
#$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port 993 -j ACCEPT
#ICQ File Transfers & Other Advanced Features
#$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port : -j ACCEPT
#MSN Messenger File Transfers
#$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port : -j ACCEPT
#NFS Server - portmapper
#$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port  -j ACCEPT
#NFS Server - statd
#$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port  -j ACCEPT
#NFS Server - NFS daemon
#$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port  -j ACCEPT
#NFS Server - lockd
#$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port  -j ACCEPT
#NFS Server - mountd
#$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port  -j ACCEPT
#NFS Server - quotad
#$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port  -j ACCEPT
#User specified allowed TCP protocol
#$F -A tcp_wchodzace -p TCP -s 0/0 --destination-port  -j ACCEPT

#nie pasujace: powrot i logowanie
$F -A tcp_wchodzace -p TCP -j RETURN

##################
# tcp_wychodzace #
##################
echo "Tworzenie regul dla lancucha tcp_wychodzace..."

#Blokowanie FTP Data
#$F -A tcp_wychodzace -p TCP -s 0/0 --destination-port 20 -j REJECT
#Blokowanie FTP Control
#$F -A tcp_wychodzace -p TCP -s 0/0 --destination-port 21 -j REJECT
#Blokowanie SSH
#$F -A tcp_wychodzace -p TCP -s 0/0 --destination-port 22 -j REJECT
#Blokowanie Telnet
#$F -A tcp_wychodzace -p TCP -s 0/0 --destination-port 23 -j REJECT
#Blokowanie HTTP
#$F -A tcp_wychodzace -p TCP -s 0/0 --destination-port 80 -j REJECT
#Blokowanie HTTPS
#$F -A tcp_wychodzace -p TCP -s 0/0 --destination-port 443 -j REJECT
#Blokowaie SMTP
#$F -A tcp_wychodzace -p TCP -s 0/0 --destination-port 25 -j REJECT
#Blokowaie POP3
#$F -A tcp_wychodzace -p TCP -s 0/0 --destination-port 110 -j REJECT
#Blokowaie POP3SSL
#$F -A tcp_wychodzace -p TCP -s 0/0 --destination-port 995 -j REJECT
#Blokowaie IMAP4
#$F -A tcp_wychodzace -p TCP -s 0/0 --destination-port 143 -j REJECT
#Blokowaie IMAP4SSL
#$F -A tcp_wychodzace -p TCP -s 0/0 --destination-port 993 -j REJECT
#Blokowanie NEWS
#$F -A tcp_wychodzace -p TCP -s 0/0 --destination-port 119 -j REJECT
#Blokowanie IRC
#$F -A tcp_wychodzace -p TCP -s 0/0 --destination-port : -j REJECT
#Blokowaie AIM
#$F -A tcp_wychodzace -p TCP -s 0/0 --destination-port 5190 -j REJECT
#Blokowaie AIM Images
#$F -A tcp_wychodzace -p TCP -s 0/0 --destination-port 4443 -j REJECT
#Blokowaie MSN Messenger
#$F -A tcp_wychodzace -p TCP -s 0/0 --destination-port 1863 -j REJECT
#Blokowany zakres portow
#$F -A tcp_wychodzace -p TCP -s 0/0 --destination-port  -j REJECT
#blokowanie gg
#$F -A tcp_wychodzace -p TCP -s 0/0 -d 217.17.41.0/24 -j REJECT
#$F -A tcp_wychodzace -p TCP -s 0/0 -d 217.17.33.0/24 -j REJECT

#nie pasujace ACCEPT
$F -A tcp_wychodzace -p TCP -s 0/0 -j ACCEPT

#################
# udp_wchodzace #
#################
echo "Tworzenie regul dla lancucha udp_wchodzace..."

#Drop netbios calls
$F -A udp_wchodzace -p UDP -s 0/0 --destination-port 137 -j DROP
$F -A udp_wchodzace -p UDP -s 0/0 --destination-port 138 -j DROP

#ident - reject zamiast drop w celu unikniecia opoznien w polaczeniach
$F -A udp_wchodzace -p UDP -s 0/0 --destination-port 113 -j REJECT

#NTP
#$F -A udp_wchodzace -p UDP -s 0/0 --destination-port 123 -j ACCEPT
#DNS
$F -A udp_wchodzace -p UDP -s 0/0 --destination-port 53 -j ACCEPT
#zewnetrzny server DHCP
$F -A udp_wchodzace -p UDP -s 0/0 --source-port 68 --destination-port 67 -j ACCEPT
#NFS Server - portmapper
#$F -A udp_wchodzace -p UDP -s 0/0 --destination-port  -j ACCEPT
#NFS Server - statd
#$F -A udp_wchodzace -p UDP -s 0/0 --destination-port  -j ACCEPT
#NFS Server - NFS daemon
#$F -A udp_wchodzace -p UDP -s 0/0 --destination-port  -j ACCEPT
#NFS Server - lockd
#$F -A udp_wchodzace -p UDP -s 0/0 --destination-port  -j ACCEPT
#NFS Server - mountd
#$F -A udp_wchodzace -p UDP -s 0/0 --destination-port  -j ACCEPT
#NFS Server - quotad
#$F -A udp_wchodzace -p UDP -s 0/0 --destination-port  -j ACCEPT
#dopuszczalny zakres portow udp
#$F -A udp_wchodzace -p UDP -s 0/0 --destination-port  -j ACCEPT

#nie pasujace - powrot i logowanie
$F -A udp_wchodzace -p UDP -j RETURN

##################
# udp_wychodzace #
##################
echo "Tworzenie regul dla lancucha udp_wychodzace..."

#Blokowany zakres portow
#$F -A udp_wychodzace -p UDP -s 0/0 --destination-port  -j REJECT
#blokowanie gg
#$F -A udp_wychodzace -p UDP -s 0/0 -d 217.17.41.0/24 -j REJECT
#$F -A udp_wychodzace -p UDP -s 0/0 -d 217.17.33.0/24 -j REJECT

#nie pasujace ACCEPT
$F -A udp_wychodzace -p UDP -s 0/0 -j ACCEPT
Można wypisywać wszystkie usługi wychodzące z naszej maszyny tworząc wyjątki, no ale po co?
Nie lepiej, zaakceptować wszystkie wychodzące połączenia?

Blokując domyślnie wszystkie przychodzące i przechodzące. Po to aby później odblokować jedynie te, które chcemy.

Pozdrawiam.
stahoo
Posty: 24
Rejestracja: 29 lipca 2007, 18:14
Lokalizacja: Inowroc³aw

Post autor: stahoo »

Witam.
Wszystko pięknie opisane tylko, że znalazłem kilka opisów jak konfigurować iptables i w każdym jest napisane, że trzeba skopiować go do:

Kod: Zaznacz cały

/etc/init.d/ 
Ale ja nie mam init.d, mam natomiast: init0.d, init1.d, init2.d itd. Więc gdzie go mam skopiować bo nie rozumiem?

[Dodano: 2007-07-29, 18:46]
Przepraszam, znalazłem.

[Dodano: 2007-07-29, 19:27]
Witam ponownie.
Kkilka spraw chciałbym się dowiedzieć odnośnie iptables.

Wpisuję kod:

Kod: Zaznacz cały

iptables -L
Wynik:

Kod: Zaznacz cały

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
Napisałem sobie skrypt i wpisuję:

Kod: Zaznacz cały

chmod +x firewall.sh
./firewall.sh
sprawdzam

Kod: Zaznacz cały

iptables -L 
Są takie reguły i wynik:

Kod: Zaznacz cały

Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     0    --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     0    --  localhost            localhost
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:www
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ftp
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ftp-data

Chain FORWARD (policy DROP)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
Wydaje mi się, że dla stacji domowej to wystarczy (jeśli coś jest nie tak to poproszę o komentarz).

Po restarcie systemu te wpisy znikają i z powrotem mam:

Kod: Zaznacz cały

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
Co mam zrobić żeby system to zapisał? Poproszę łopatologicznie, Debiana używam drugi dzień.
cordial
Posty: 48
Rejestracja: 10 maja 2007, 12:21

Post autor: cordial »

stahoo pisze:Co mam zrobić żeby system to zapisał? Poproszę łopatologicznie, Debiana używam drugi dzień.
Zajrzyj tutaj -> link

Pozdrawiam.
ODPOWIEDZ