# [iptables]Skrypt firewalla czy coś poprawić?

## ryba84

```
# czyszczenie reguł iptables i blokada dostępu z zewnątrz

iptables -F

iptables -P INPUT DROP

iptables -P FORWARD DROP

iptables -P OUTPUT ACCEPT

# blokada odpowiedzi na pingi

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

# ochrona przed atakami smurf

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

# ochrona przed komunikacją ICMP error

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

# logowanie dziwnych pakietów

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

# Nie akceptujemy datagramu IP z opcja "source route"

echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route

# bez pakietów ICMP redict, ktore moga zmienic tablice routingu

echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects

# ochrona przed spoofingiem -każdy interfejs sieciowy będzie przyjmował tylko te pakiety które znajdują się w tablicy routingu

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

# Blokada przed atakami typu SYN FLOODING

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

# włączenie loopback

iptables -A INPUT -i lo -j ACCEPT

iptables -A OUTPUT -o lo -j ACCEPT

# pozwolenie na pingowanie innych

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

# pozwolenie na połączenia już nawiązane

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# dostęp do DNS

iptables -A INPUT -s 172.16.1.1 -j ACCEPT

iptables -A INPUT -s 172.16.2.1 -j ACCEPT

iptables -A INPUT -s 192.168.0.1 -j ACCEPT

# pakiety z adresem źródłowym ustawionym na nasz

iptables -A INPUT -i wlan0 -s 192.168.0.125 -j DROP

# ssh

iptables -A INPUT --protocol tcp --destination-port 22 -j ACCEPT

iptables -A INPUT --protocol tcp --source-port 22 -j ACCEPT

# gg

iptables -A INPUT --protocol tcp --source-port 8074 -j ACCEPT
```

Tak jak w temacie napisałem sobie skrypcik firewalla i mam pytanie do bardziej doświadczonych użytkowników, czy coś w nim poprawić.

----------

## Dagger

```

# blokada odpowiedzi na pingi

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

# ochrona przed atakami smurf

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

# ochrona przed komunikacją ICMP error

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

```

osobiscie nie uwazam to za dobra opcje. Osobiscie preferuje:

```

# UDP-flood protection

$IPTABLES -A INPUT -i $WAN_IF -p udp -j DOS

$IPTABLES -I DOS -p udp -m state --state ESTABLISHED,RELATED -j RETURN

$IPTABLES -I DOS -p udp -m limit --limit 150/s --limit-burst 300 -j RETURN

# Syn-flood protection

$IPTABLES -A INPUT -i $WAN_IF -p tcp --syn -m state ! --state ESTABLISHED,RELATED -j DOS

$IPTABLES -I DOS -p tcp --syn -m limit --limit 150/s --limit-burst 300 -j RETURN

# Ping of death

# Drop icmp packet breaks the rate of 1/s

$IPTABLES -A INPUT -i $WAN_IF -p icmp --icmp-type echo-request -j DOS

$IPTABLES -A DOS -p icmp --icmp-type echo-request -m limit --limit 150/s --limit-burst 300 -j RETURN

```

proponuje dodac:

```

#DROP ALL INVALID TCP FLAG CONFIGURATION

# All of the bits are cleared

$IPTABLES -A INPUT -p tcp --tcp-flags ALL NONE -j INVALID

$IPTABLES -A FORWARD -p tcp --tcp-flags ALL NONE -j INVALID

# SYN and FIN are both set

$IPTABLES -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j INVALID

$IPTABLES -A FORWARD -p tcp --tcp-flags SYN,FIN SYN,FIN -j INVALID

# SYN and RST are both set.

$IPTABLES -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j INVALID

$IPTABLES -A FORWARD -p tcp --tcp-flags SYN,RST SYN,RST -j INVALID

# FIN and RST are both set

$IPTABLES -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j INVALID

$IPTABLES -A FORWARD -p tcp --tcp-flags FIN,RST FIN,RST -j INVALID

# FIN is the only bit set, without the expected accompanyuing ACK

$IPTABLES -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j INVALID

$IPTABLES -A FORWARD -p tcp --tcp-flags ACK,FIN FIN -j INVALID

# PSH is the only bit set, without the expected accompaying ACK

$IPTABLES -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j INVALID

$IPTABLES -A FORWARD -p tcp --tcp-flags ACK,PSH PSH -j INVALID

# URG is the only bit set, without the expected accompayning ACK

$IPTABLES -A INPUT -p tcp --tcp-flags ACK,URG URG -j INVALID

$IPTABLES -A FORWARD -p tcp --tcp-flags ACK,URG URG -j INVALID

 DROP BRUTE FORCE ATTACKS

$IPTABLES -A INPUT -i $WAN_IF -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH

$IPTABLES -A INPUT -i $WAN_IF -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 10 --rttl --name SSH -j DROP # was TARPIT

```

----------

