IPTables

Då du ska sätta upp en webbserver i linux så kan du komma att vilja använda den inbyggda brandväggen.
I denna artikeln så kommer jag gå igenom lite enkelt hur en sådan konfiguration skulle kunna se ut.

Svartlista allt

Principen här är att först svartlista allt (förutom redan etablerad anslutning – om du gör detta via ssh t.ex så vill du inte att din anslutning ska brytas).

# Nollställer eventuellt existerande konfigurationer
iptables -F
iptables -X

# För att hålla existerande kopplingar öppna
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -I OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Svartlista allt
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

Svartlista spcifikt IP

Om vi vill svartlista ett särskilt ip så kan vi göra så på följande vis

iptables -A INPUT -s x.x.x.x -j DROP

Vitlista specifkt IP

Kan också hända att du vill vitlista ett särskilt IP..

iptables -A INPUT -s x.x.x.x -j ACCEPT

SSH, HTTP och HTTPS

De enda portarna vi vill ha öppna i brandväggen är ssh, http och https.

iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -j ACCEPT

Loopback

Tillåt din server att ha fri ”loopback” access. Jag har inte riktigt koll på vad detta innebär för att vara ärlig.

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

E-post

Öppna upp för trafik via Sendmail eller Postfix.

iptables -A INPUT -i eth0 -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT

DoS attacker

Förhindra DoS attacker, i den mån det går..

iptables -A INPUT -p tcp --dport 80 -m limit --limit 60/minute --limit-burst 100 -j ACCEPT

DNS

Tillåt utgående dns trafik, bra om du t.ex. vill kunna använda apt-get kommandot.

iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT

Ping

Eftersom vi har svartlistat allt så kan man inte häller pinga servern vid detta laget, tillåt att domänen pingas på följande sätt:

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

Loggning

Logga aktiviteten från brandväggens tappade paket.

iptables -N LOGGING
iptables -A INPUT -j LOGGING
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7
iptables -A LOGGING -j DROP

Kontrollera inställningarna

Kontrollera så att dina inställningar verkligen funkar med en portscanner som nmap t.ex.

Du kan också se ett utdrag via kommandot:

iptables -L

Du borde då få ett output i stil med följande – självklart i relevans till hur just du ställt in din server:

Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     tcp  --  anywhere             anywhere            multiport dports ssh,www,https 
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:smtp state NEW,ESTABLISHED 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:www limit: avg 1/sec burst 100 
LOGGING    all  --  anywhere             anywhere            

Chain FORWARD (policy DROP)
target     prot opt source               destination         

Chain OUTPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     tcp  --  anywhere             anywhere            multiport sports ssh,www,https 
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere            tcp spt:smtp state ESTABLISHED 

Chain LOGGING (1 references)
target     prot opt source               destination         
LOG        all  --  anywhere             anywhere            limit: avg 2/min burst 5 LOG level debug prefix `IPTables Packet Dropped: ' 
DROP       all  --  anywhere             anywhere

Länkar

http://www.thegeekstuff.com/2011/06/iptables-rules-examples
http://codefastdieyoung.com/…/simple-firewall-settings-for-linux-server