Poradnik pomoże stworzyć podstawowy firewall dla ubuntu.
Przejdźmy najpierw na konto administratora (root), w terminalu wydaj polecenie:
sudo su
Teraz zrobimy podstawowy skrypt dla naszego firewalla:
touch /etc/init.d/firewall &&chmod +x /etc/init.d/firewall && nano -w /etc/init.d/firewall
i dodajmy te formułki:
#!/bin/sh
iptables -F
iptables -X
iptables -t nat -X
iptables -t nat -F
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -jACCEPT
iptables -A FORWARD -o lo -jACCEPT
iptables -A INPUT -j ACCEPT -mconntrack --ctstate ESTABLISHED,RELATED
iptables -A FORWARD -j ACCEPT -mconntrack --ctstate ESTABLISHED,RELATED
lub bardziej rozbudowaną opcję:
#!/bin/bash
iptables -F
iptables -X
iptables -F -t nat
iptables -X -t nat
iptables -F -t filter
iptables -X -t filter
if [ "$1" = "stop"]
then
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
exit
fi
# ustalamy domyślną politykę dlafiltrów
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# pełny ruch na interfejsie lo(potrzebne do działania wielu lokalnych usług)
iptables -A INPUT -i lo -j ACCEPT
# odrzucamy ident
iptables -A INPUT -p tcp --dport 113 -jREJECT --reject-with icmp-port-unreachable
# ochrona przed atakami
iptables -A INPUT -p icmp --icmp-typeecho-request -m limit --limit 1/s -j LOG --log-prefix "Ping: "
iptables -A INPUT -p icmp --icmp-typeecho-request -m limit --limit 1/s -j ACCEPT # Ping of death
# iptables -A INPUT -p icmp --icmp-typeecho-request -j REJECT --reject-with icmp-host-unreachable
iptables -A INPUT -m conntrack--ctstate NEW -p tcp --tcp-flags SYN,RST,ACK,FIN,URG,PSH ACK -j LOG--log-prefix "ACK scan: "
iptables -A INPUT -m conntrack--ctstate NEW -p tcp --tcp-flags SYN,RST,ACK,FIN,URG,PSH ACK -j DROP# Metoda ACK (nmap -sA)
iptables -A INPUT -m conntrack--ctstate NEW -p tcp --tcp-flags SYN,RST,ACK,FIN,URG,PSH FIN -j LOG--log-prefix "FIN scan: "
iptables -A INPUT -m conntrack--ctstate NEW -p tcp --tcp-flags SYN,RST,ACK,FIN,URG,PSH FIN -j DROP# Skanowanie FIN (nmap -sF)
iptables -A INPUT -m conntrack--ctstate NEW -p tcp --tcp-flags SYN,RST,ACK,FIN,URG,PSH PSH -j LOG--log-prefix "Xmas scan: "
iptables -A INPUT -m conntrack--ctstate NEW -p tcp --tcp-flags SYN,RST,ACK,FIN,URG,PSH FIN,URG,PSH-j DROP # Metoda Xmas Tree (nmap -sX)
iptables -A INPUT -m conntrack--ctstate INVALID -p tcp ! --tcp-flags SYN,RST,ACK,FIN,PSH,URGSYN,RST,ACK,FIN,PSH,URG -j LOG --log-prefix "Null scan: "
iptables -A INPUT -m conntrack--ctstate INVALID -p tcp ! --tcp-flags SYN,RST,ACK,FIN,PSH,URGSYN,RST,ACK,FIN,PSH,URG -j DROP # Skanowanie Null (nmap -sN)
# Łańcuch syn-flood (obrona przedDoS)
iptables -N syn-flood
iptables -A INPUT -p tcp --syn -jsyn-flood
iptables -A syn-flood -m limit --limit1/s --limit-burst 4 -j RETURN
iptables -A syn-flood -m limit --limit1/s --limit-burst 4 -j LOG --log-prefix "SYN-flood: "
iptables -A syn-flood -j DROP
# pozwalamy na wszystkie istniejącejuż połączenia oraz połączenia które są powiązane zistniejącymi już połączeniami
iptables -A INPUT -m state --stateESTABLISHED,RELATED -j ACCEPT
# cały ruch powyżej portów 1024, tosą porty które mogą być bindowane przez wszystko (chociażby np.Kadu)
iptables -A INPUT -m state --state NEW-p tcp --dport 1024:65535 -j ACCEPT
iptables -A INPUT -m state --state NEW-p udp --dport 1024:65535 -j ACCEPT
# uruchomione serwery na portachponiżej 1024: ssh, http, https
iptables -A INPUT -m state --state NEW-m multiport -p tcp --dports 22,80,443 -j ACCEPT
Zapiszmy zmiany oraz sprawmy aby naszfirewall uruchamiał się od razu po inicjalizacji kernela.
update-rc.d firewall defaults 90
sprawdzić stan firewalla możemy komendą:
[TABLE]
[/TD]
[TD] sudo iptables -L
[/TABLE]
testować firewall można tu:
PC Flank: Make sure you're protected on all sides.
część żródła google.com