Välkommen till linuxportalen.se!

Linuxportalen.se är Sveriges största och aktivaste webbplats för användare av öppen- och fri programvara.

Du besöker Linuxportalen.se som gäst vilket begränsar din möjlighet att använda webbplatsens alla funktioner. Genom att registera dig som medlem får du inte bara möjlighet att söka bland webbplatsens innehåll, skapa nya och delta i befintliga diskussioner, skapa din egen blogg, kommunicera med andra medlemmar genom privata meddelanden och delta i omröstningar. Du får också tillgång till Veckans Kadavro - en seriestrip unikt skapad för Linuxportalen.se!

Registeringen sker snabbt och är helt kostnadsfri - tveka inte, bli medlem idag!

Iptables guru?

Hejsan! Ska sätta igång iptables på en remote server och vill gärna höra allas åsikter om hur det ska se ut innan jag kör igång då jag verkligen inte vill tappa anslutningen.

Lite info om hur det ser ut... eth0 ska ha frit blås, det vill säga inga regler alls på det interfacet då det redan sitter bakom en hårvaru brandvägg. Därför är jag osäker på om det ens behöver definieras i scriptet. Likaså hur tolkas av iptables eth1:0 och eth1:1?

Vad jag skissat på kan ses här:

EXTERNAL_INT="eth1"             # External Internet interface
#EXTERNAL_IP="*.*.*.*"         # Internet Interface IP address

PASV_PORTS="10000:20000"   # Passive FTP ports

iptables -F                               #Flush all current rules

#
# Set Default policies for INPUT FORWARD and DROP chains
#
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Access for localhost
iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -o lo -j ACCEPT

# Access for eth0
iptables -A INPUT -i eth0 -j ACCEPT

iptables -A INPUT -o eth0 -j ACCEPT

# Allow SSH for testing
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#
#
# Allow traffic on port bellow
#
#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#

# Allow FTP connections @ port 21
/sbin/iptables -A INPUT -p tcp -i $EXTERNAL_INT --dport 21 -j ACCEPT
/sbin/iptables -A INPUT -p udp -i $EXTERNAL_INT --dport 21 -j ACCEPT

# Allow Passive FTP Connections @ port 10000-20000
/sbin/iptables -A INPUT -p tcp -i $EXTERNAL_INT --dport $PASV_PORTS -j ACCEPT

# Allow HTTP
/sbin/iptables -A INPUT -p tcp -i $EXTERNAL_INT --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -p udp -i $EXTERNAL_INT --dport 80 -j ACCEPT

# Allow HTTPS
/sbin/iptables -A INPUT -p tcp -i $EXTERNAL_INT --dport 443 -j ACCEPT
/sbin/iptables -A INPUT -p udp -i $EXTERNAL_INT --dport 443 -j ACCEPT


Alternativ för kommentarvisning

Välj ditt önskade sätt att visa kommentarerna och klicka på "Spara" för att verkställa dina ändringar.

emjemjs bild

Du måste ju stoppa in;

iptables -A INPUT -i eth0 -j ACCEPT

iptables -A INPUT -o eth0 -j ACCEPT

om du kör -P DROP, annars kommer du ju att blockera hela eth0...

h-kans bild

tackar emjemj

h-kans bild

Vid granskning tycker jag det borde vara

iptables -A OUTPUT -i eth0 -j ACCEPT i så fall eller vad gör -o eth0 som du påpekade?

man iptables

"Name  of  an interface via which a packet is going to be sent (for packets entering the FORWARD,OUTPUT and POSTROUTING chains)."

amelias bild

iptables -A OUTPUT -i eth0 -j ACCEPT betyder att du tillåter alla output som går till interface eth0, iptables -A INPUT -o eth0 -j ACCEPT tillåter all input som kommer IFRÅN eth0. Du vill gärna att din egen maskin kan prata med sig själv på sitt eget interface.

--

Amelia Nilsson 
Linuxchick, Unixtomte, IBM-fangirl, AS/400-munk, Ciscofrälst... o.s.v.
http://www.linuxchick.se

Jag har lite frågor?

Om jag för står dig rätt så är eth0 lokalt nätverk.

Det ska ha fritt blås skriver du men fritt hur?

Delas den ut av denna server?

Ska eth0 ha fri tillgång till servern eller ska den ha fritt till internet genom eth1?

eth1:0 och eth1:1? använder du alias för olika platser du kopplar upp denna på som ska ha olika regler eller varför eth1:1? (jag förstod det som en dator/server du saknade fysisk access till)

Så lite bättre förklaring av hur och vad du vill att det ska fungera krävs.

Sedan bör man alltid se till att det finns någon fysiskt närvarande när man gör dessa saker då man kan göra något galet.

h-kans bild

eth0 är en egen ip ut mot nätet som har en hårvarubranvägg innan vida världen... den sköter alla regler så vill inte att iptables ska göra något på eth0

eth1 är ett annat ip mot nätet där det inte finns någon hårdvarubrandvägg vilket ska sättas up med iptables. På detta interface kommer endast en viss isp leverantörs klienter komma från.

eth1:0 och eth1:1 var bara av nyfikenhet om hur det hanteras av iptables...

Kommer inte ha fysisk access till servern men finns service personal att tillkalla om det skulle gå åt skogen...

Så eth0 är direkt från denna server mot hårdvaru brandvägg/internet och inte något som ska ha forward genom servern från lokalt nät?

Och eth1 är även det direkt mot internet men ska begränsas till specifierade ip-serier?

h-kans bild

det stämmer precis...

 

Du t.ex har inga regler för --source på eth1 så den begränsar inte ip-serier.

Detta brukar göras med -i <inteface> --source <ip-serie>  -j ACCEPT i regeln och -i ! <inteface> --source <ip-serie>  -j DROP

Så du talar om vad som får ansluta och droppar resten.

Sedan kan man ju göra rätt mycket för att säkra en brandvägg och frågan är ju lite hur du vill ha det.

h-kans bild

vill att all trafik från 10.*.*.* ska nå den på de portar jag angivet utöver det så ska det vara total stop på eth1. Att kontrollera paketen är omöjlit så det rör sig om så pass mycket trafik att servern skulle antagligen sänkas utan jag får lita på att om trafik kommer in på de portar som är öppna så är den legetim.

Angående eth1:0 så glömde jag svara på det.

iptables använder riktiga enheter alltså eth1 och inte alias för det behövs inte.

IPT=/sbin/iptables

ISP=10.0.0.0/8

Sedan skapar du en regel eller kompletterar du önskade regler med -s $ISP

$IPT -A INPUT -i $EXTERNAL_INT -s $ISP -j ACCEPT

Sedan kasta allt på eth1 som inte är i rätt ip-serie.

$IPT -A INPUT -i ! $EXTERNAL_INT -s $ISP -j DROP

Du har inte lagt till någon loggning men det kanske du inte vill ha.

Det saknas även skydd för olika typer av attacker men den kanske skyddas av hårdvarubrandväggen på båda korten.

Nu måste jag tillägga att jag verkligen inte är en expert på brandväggar så det kan smyga in en del fel i det jag skriver.

 

h-kans bild

Tusen tack nille. Loggning önskas inte dock men förslag på skydd som inte påverkar prestandan avsevärt önskas.

Jag brukar använda state i reglerna.

Detta är lite som jag brukar ha i mina brandväggar.

T.ex för ssh har jag detta

#We want to be able to connect via ssh
# ssh tcp 1-65535 22
$IPT -A INPUT -m state --state NEW -p tcp --syn --destination-port 22 -j ACCEPT
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -p tcp --destination-port 22 -j ACCEPT

 

#Lets localhost and my ip connect and drops non local 127.* adresses
$IPT -A INPUT --in-interface lo --source 127.0.0.0/8 -j ACCEPT
$IPT -A INPUT -p tcp --in-interface lo --source $ME --destination $ME -j ACCEPT
$IPT -A INPUT --in-interface ! lo --source 127.0.0.0/8 -j DROP

Där $ME är  ME=`/sbin/ifconfig eth0 |sed -n '/inet/s/^[ ]*inet addr:\([0-9.]*\).*/\1/p'`

 

MYBROADCASTADRESS=`/sbin/ifconfig eth0 |sed -n '/inet/s/^.*Bcast:\([0-9.]*\).*/\1/p'`

#Drop ICMP echo (ping) from broadcast ip
$IPT -A INPUT --destination $MYBROADCASTADRESS/32 -j DROP

#Some ICMP rules to accept the ones needed.
$IPT -A INPUT -p icmp --icmp-type 0 -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type 8 -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type 3 -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type 11 -j ACCEPT

Dessa brukar jag ha som standard i mina brandväggar.

Sedan får dom ju modifieras för att passa in ibland.

amelias bild

Då skulle du nog vilja lägga till följande som kommer köra DROP på alla paket i state NEW som inte är SYN och sen öppnar för att släppa in alla paket med state RELATED eller ESTABLISHED.

-A INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP 
-A INPUT -p tcp -m state --state RELATED,ESTABLISHED -m tcp -j ACCEPT

Jag har en del annat skit i min conf också, den är hyffsat dokumenterad och finns på http://amelia.linuxchick.se/iptables.rules om du vill titta på den, där finns conf för att blockera broadcast på fel interface, konstiga windows-burkars struntpratande och lite annat.

--

Amelia Nilsson 
Linuxchick, Unixtomte, IBM-fangirl, AS/400-munk, Ciscofrälst... o.s.v.
http://www.linuxchick.se

Apprå på brandväggar så vill jag tipsa om en bra pdf som förklarar olika saker snabbt och bra men fördjupar sig inte.

Denna pdf:en är från när slackware teamet var i brasilien och höll en slackshow.

http://rlworkman.net/slackshowbrasil/netfilter.pdf

Och för er som inte känner till slackware så länkar jag till en till pdf.

http://rlworkman.net/slackshowbrasil/slackware.pdf

Lite OT men jag tyckte att det kan intressera någon.

denkas bild

Jag är lite nyfiken. Vad kör du på UDP 80 och UDP 443?