Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundację Dzieciom „Zdążyć z Pomocą”.
Więcej informacji na dug.net.pl/pomagamy/.

#1 2019-02-02 12:12:08

macios4x
Użytkownik
Zarejestrowany: 2012-12-10

Pomoc w konfiguracji zapory iptables

Po przeczytaniu kilku przykładów konfiguracji zapory ustawiłem reguły Iptables. Ogólnie wszystko mi działa internet, ale nie mam pewności czy dobrze wszystko zrobiłem, w sumie to "posklejałem" kilka przykładów i taki oto wynik skryptu:

Kod:

sudo iptables -F
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT DROP
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m state --state INVALID -j DROP
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp -i eth0 -j REJECT --reject-with tcp-reset
sudo iptables -A INPUT -p udp -i eth0 -j REJECT --reject-with icmp-port-unreachable
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j REJECT --reject-with icmp-host-unreachable
sudo iptables -A INPUT -m conntrack --ctstate INVALID -p tcp ! --tcp-flags SYN,RST,ACK,FIN,PSH,URG SYN,RST
sudo iptables -N syn-flood
sudo iptables -A INPUT -p tcp --syn -j syn-flood
sudo iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
sudo iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j LOG --log-prefix "SYN-flood: "
sudo iptables -A syn-flood -j DROP;
sudo iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j LOG --log-prefix "Ping: "
sudo iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT # Ping of death
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j REJECT --reject-with icmp-host-unreachable
sudo iptables -A OUTPUT -p tcp --dport telnet -j REJECT
sudo iptables -A INPUT -p tcp --dport telnet -j REJECT
sudo iptables -A FORWARD -m state --state INVALID -j DROP
sudo iptables -A OUTPUT -m state --state INVALID -j DROP
sudo iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A OUTPUT -p tcp -m multiport --dports 20,21,22,25,43,53,80,443,465,587,1935,4321,5579,7634,8074 --syn -m state --state NEW -j ACCEPT
sudo iptables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT
sudo iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT

Pewnie ktoś bardziej obeznany w temacie dopatrzy się jakichś błędów, ja się za bardzo nie znam tak na tym, dlatego proszę o ewentualne korekty co można by poprawić jeśli gdzieś tkwi błąd.


Zwolennik Open Source, użytkownik Arch, Debian

Offline

 

#2 2019-02-02 12:42:09

arecki
Użytkownik
Skąd: 44 Bronson Lane Hensonville
Zarejestrowany: 2016-03-03

Re: Pomoc w konfiguracji zapory iptables

To zależy do czego służy ta maszyna.
Ja na desktopie OUTPUT mam ACCEPT.

Offline

 

#3 2019-02-02 13:11:33

macios4x
Użytkownik
Zarejestrowany: 2012-12-10

Re: Pomoc w konfiguracji zapory iptables

Jako Desktop, do normalnego domowego użytku, przeglądanie neta, muzyka, filmy. Żeby był poprostu bezpieczniejszy.


Zwolennik Open Source, użytkownik Arch, Debian

Offline

 

#4 2019-02-02 14:42:44

arecki
Użytkownik
Skąd: 44 Bronson Lane Hensonville
Zarejestrowany: 2016-03-03

Re: Pomoc w konfiguracji zapory iptables

Najprostszy firewall dla desktopa:

Kod:

iptables -F
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 
iptables -A INPUT -s 127.0.0.0/8 -d 127.0.0.0/8 -i lo -j ACCEPT

https://wiki.debian.org/DebianFirewall

A jak chcesz szybko bez studiowania co każda regułka oznacza to:

Kod:

apt-get install ufw
ufw enable

Ostatnio edytowany przez arecki (2019-02-02 14:47:09)

Offline

 

#5 2019-02-02 15:06:26

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Pomoc w konfiguracji zapory iptables

Iptables jest pase. xD

O tu jest dobry przykład fw (ogarnia ipv6 i ipv4):

Kod:

#!/usr/sbin/nft -f

flush ruleset

create table inet filter

create chain inet filter INPUT { type filter hook input priority 0; policy drop; }
create chain inet filter FORWARD { type filter hook forward priority 0; policy drop; }
create chain inet filter OUTPUT { type filter hook output priority 0; policy accept; }

create chain inet filter state-check

add rule inet filter state-check ct state { established, related } counter accept
add rule inet filter state-check ct state invalid counter drop

add rule inet filter INPUT counter jump state-check
add rule inet filter INPUT iifname "lo" counter accept
add rule inet filter INPUT counter drop

add rule inet filter OUTPUT counter jump state-check

Offline

 

#6 2019-02-02 15:41:22

arecki
Użytkownik
Skąd: 44 Bronson Lane Hensonville
Zarejestrowany: 2016-03-03

Re: Pomoc w konfiguracji zapory iptables

Morfik jak zwykle jest na bieżąco z przyszłymi rozwiązaniami :)

Offline

 

#7 2019-02-02 18:11:46

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Pomoc w konfiguracji zapory iptables

To nie są przyszłe rozwiązania, tylko już od pół roku obecne: xD
http://ral-arturo.org/2018/06/16/nfws2018.html

Choć jak się dosiałem do tego całego nftables, to całą masę błędów tam znalazłem. Najbardziej poważne dotyczą list adresów, coś jak ipset, który teraz natywnie niby ma w nftables działać, a działa tak, że gorzej to chyba nie mogli tego zrobić. xD Pozgłaszałem im tam szereg problemów i parę rzeczy poprawili, niektóre już mają oficjalne pacze ale jeszcze zajmie to trochę czasu zanim nftables będzie używalnym dla power userów i bardziej zaawansowanych sys/network adminów. Ja myślę, że się pospieszyli znacznie z tym przejściem na nftables ale taki podstawowy filter na desktopa bez problemu można sobie wrzucić -- nie trzeba robić 4 tablic dla ipv4 i kolejnych 4 dla ipv6, nie trzeba dublować reguł, tylko wystarczy stworzyć sobie w sumie jedną tablicę w niej dwa łańcuchy (ten forward też zbędny w sumie i można go nie tworzyć) i parę reguł na krzyż. xD Nawet counter'y można ominąć by cykle procka zaoszczędzić. xD

Offline

 

#8 2019-02-02 18:44:42

macios4x
Użytkownik
Zarejestrowany: 2012-12-10

Re: Pomoc w konfiguracji zapory iptables

To tak na chłopski rozum i łopatologicznie.. netfilter czy iptables? I jak skonfigurować?


Zwolennik Open Source, użytkownik Arch, Debian

Offline

 

#9 2019-02-02 19:48:16

arecki
Użytkownik
Skąd: 44 Bronson Lane Hensonville
Zarejestrowany: 2016-03-03

Re: Pomoc w konfiguracji zapory iptables

Dla Ciebie wystarczy na początek ufw ;)
@Morfik, bardziej mi chodziło o przyszłe rozwiązania w Debianie, chyba mi to umknęło.

Ostatnio edytowany przez arecki (2019-02-02 19:49:57)

Offline

 

#10 2019-02-02 21:13:42

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Pomoc w konfiguracji zapory iptables

Z tego co czytałem, to nowy stabilny debian będzie już miał domyślnie tego nftables.

Offline

 

#11 2019-02-03 09:04:43

macios4x
Użytkownik
Zarejestrowany: 2012-12-10

Re: Pomoc w konfiguracji zapory iptables

arecki napisał(-a):

Dla Ciebie wystarczy na początek ufw ;)
@Morfik, bardziej mi chodziło o przyszłe rozwiązania w Debianie, chyba mi to umknęło.

Chodzi mi o to, że jeśli Iptables, to czy te reguły są poprawne czy mają jakieś błędy? Jeśli coś nie tak to skorygujcie kto się na tym zna.


Zwolennik Open Source, użytkownik Arch, Debian

Offline

 

#12 2019-02-03 09:31:56

arecki
Użytkownik
Skąd: 44 Bronson Lane Hensonville
Zarejestrowany: 2016-03-03

Re: Pomoc w konfiguracji zapory iptables

Jeśli chodzi o Twoje reguły iptables to wyglądają poprawnie.

Offline

 

#13 2019-02-04 09:44:52

marpi82
Nowy użytkownik
Skąd: Tychy
Zarejestrowany: 2019-02-04

Re: Pomoc w konfiguracji zapory iptables

Witam wszystkich.

Pozwolę się podpiąć pod ten temat z moim problemem, żeby nie zakładać nowego...

Od kilku dni próbuję się uporać z konfiguracją firewalla, co nie wychodzi mi zbyt dobrze - właściwie to w ogóle mi nie wychodzi :).
Mam dokładniej na myśli przekierowanie portów.

Z uwagi, że w mojej okolicy jedyna sensowna opcja dostępu do internetu to LTE, a co za tym idzie podwójny NAT zmuszony zostałem do zakupu VPS'a celem uruchomienia kilku usług które miały być dostępne z zewnątrz.
VPS jest na OpenVZ (najtańsza opcja ;]), na nim Debian 9.

VPS z moim domowym serwerkiem (SRV) połączony jest tunelem OpenVPN.

Konfiguracja sieciowa wygląda tak:
VPS <publiczne_ip> na interfejsie venet0
VPS 10.0.0.1/24 na interfejsie tun0
SRV 10.0.0.2/24 na interfejsie tun0

Tunel działa prawidłowo.
Mogę łączyć się z VPS'a z usługani na SRV, np:

Kod:

#ssh user@10.0.0.2

i odwrotnie (SSH na VPS jest na porcie 57185)

Kod:

#ssh -p 57185 user@10.0.0.1
#ssh -p 57185 user@<publiczne_ip>

Więc jak napisałem wyżej tunel działa.
Połączenia z zewnątrz z VPS'em też oczywiście działają.

Chciałbym jako pierwsze przekierować na SRV 10.0.0.2:22 port VPS <publiczne_ip>:57186

dla uproszczenia, do momentu uruchomienia działającego przekierowania SSH ustawiłem iptables na VPS na akceptowanie wszystkiego:

Kod:

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -F
iptables -t mangle -F
iptables -F
iptables -X

w /proc/sys/net/ipv4/ip_forward oczywiście znajduje się 1

następnie iptables dodaję do tablic NAT następujące wpisy:

Kod:

-A PREROUTING -i venet0 -p tcp -d <publiczne_ip> --dport 57186 -j DNAT --to-destination 10.0.0.2:22
-A POSTROUTING -s 10.0.0.0/24 -j MASQUERADE

Niestety przekierowanie nie działa - nie da się połączyć z <publiczne_ip>:57186

Edit:
Po wyzerowaniu liczników i próbie połączenia z zewnątrz jeśli dobrze to odczytuję, reguła POSTROUTING nie zostaje wykonana ani razu

Kod:

# iptables -Z -t nat
# iptables -t nat -vL
Chain PREROUTING (policy ACCEPT 3 packets, 120 bytes)
 pkts bytes target     prot opt in     out     source               destination
    1    60 DNAT       tcp  --  venet0 any     anywhere             anywhere             tcp dpt:57186 to:10.0.0.2:22

Chain POSTROUTING (policy ACCEPT 3 packets, 194 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 MASQUERADE  all  --  any    any     10.0.0.0/24          anywhere

Chain OUTPUT (policy ACCEPT 2 packets, 134 bytes)
 pkts bytes target     prot opt in     out     source               destination

W jaki sposób powinienem to zrealizować? Co robię nie tak?
Bardzo proszę o pomoc.

Ostatnio edytowany przez marpi82 (2019-02-04 12:36:26)

Offline

 

#14 2019-02-04 12:36:25

loms
Użytkownik
Skąd: Tarnowskie Góry
Zarejestrowany: 2007-07-20

Re: Pomoc w konfiguracji zapory iptables

Ja mam taki o to skrypt z możliwością włączania i wyłączania:

Kod:

#!/bin/bash
### BEGIN INIT INFO
# Provides:          firewall
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: firewall
# Description:       firewall
### END INIT INFO
#-----------------------------------------------------
#             Firewall
#-----------------------------------------------------
#
# ------ Czyszczenie tablic i zmiana polityki --------
function clean() {
    # Czyszczenie tablic
      iptables -F
      iptables -X
      iptables -Z

    # Zmiana domyslnej polityki na DROP
      iptables -P INPUT DROP
      iptables -P OUTPUT DROP
      iptables -P FORWARD DROP
}

# --------------- Dostep do serwera -----------------
function access() {
    # Interfejs lokalny
      iptables -A INPUT -i lo -j ACCEPT
      iptables -A OUTPUT -o lo -j ACCEPT

    # Ruch wychodzacy
      iptables -A OUTPUT -j ACCEPT

    # Polaczenia nawiazane
      iptables -A INPUT -p tcp -j ACCEPT -m state --state ESTABLISHED,RELATED
      iptables -A INPUT -p udp -j ACCEPT -m state --state ESTABLISHED
      iptables -A INPUT -p icmp -j ACCEPT -m state --state ESTABLISHED,RELATED
}
# ---------------- Wylaczanie firewalla --------------
function clean_off() {
    # Czyszcenie tablic
      iptables -F
      iptables -X
      iptables -Z

    # Zmiana domyslnej polityki
      iptables -P FORWARD ACCEPT
      iptables -P INPUT ACCEPT
      iptables -P OUTPUT ACCEPT
}

# ------------- { start | stop } ---------------
set -e
case "$1" in
    'start')
        echo "Starting Firewall ..."
        clean
        access
        echo "ok..."
    ;;
    'stop')
        echo "Stopping Firewall ..."
        clean_off
        ;;
    *)
        echo -e "Usage: firewall { start | stop }"
        ;;
esac

Prawo jest jak płot, wąż się prześlizgnie, tygrys przeskoczy a bydło się nie rozbiega.

Offline

 

#15 2019-02-04 13:23:58

arecki
Użytkownik
Skąd: 44 Bronson Lane Hensonville
Zarejestrowany: 2016-03-03

Re: Pomoc w konfiguracji zapory iptables

Nie bardzo rozumiem jaki jest sens tej regułki:

Kod:

iptables -A OUTPUT -o lo -j ACCEPT

skoro i tak ustawiasz:

Kod:

iptables -A OUTPUT -j ACCEPT

Nie prościej ustawić domyślną politykę na ACCEPT?

Ostatnio edytowany przez arecki (2019-02-04 13:25:27)

Offline

 

#16 2019-02-04 14:09:18

loms
Użytkownik
Skąd: Tarnowskie Góry
Zarejestrowany: 2007-07-20

Re: Pomoc w konfiguracji zapory iptables

Fakt, reguły się dublują ale to nie jest problem, to był mocno rozbudowany gotowiec, z którego na szybko wyrzuciłem wszystko co niepotrzebne.

Ostatnio edytowany przez loms (2019-02-04 14:09:42)


Prawo jest jak płot, wąż się prześlizgnie, tygrys przeskoczy a bydło się nie rozbiega.

Offline

 

#17 2019-02-04 17:43:46

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Pomoc w konfiguracji zapory iptables

arecki napisał(-a):

Nie bardzo rozumiem jaki jest sens tej regułki:

Kod:

iptables -A OUTPUT -o lo -j ACCEPT

skoro i tak ustawiasz:

Kod:

iptables -A OUTPUT -j ACCEPT

Nie prościej ustawić domyślną politykę na ACCEPT?

Nie prościej, bo politykę domyślną OUTPUT można czasem zmieniać.

Ja np kiedyś miałem na OUTPUT na ACCEPT, ale potem OUTPUT poszedł do Cgroup
a domyślna na DROP.

Poza tym polityka domyślna jest realizowana jako ostatnia, a nie czaję w jakim celu połączenie na localhosta musi frunąć przez wszystkie reguły FW zamiast zakończyć jej przetwarzanie w FW na pierwszym dopasowaniu.

Żeby oceniać konfigurację FW, to trzeba najpierw zrozumieć, które targety kończą przetwarzanie pakietu, a które nie kończą.

To jest kluczowa sprawa w każdym FW.

Mój aktualny OUTPUT w nftables:
   

Kod:

chain output {
        type filter hook output priority 200; policy drop;
        oifname "lo" accept
        ip daddr @systemdns counter packets 2898 bytes 247078 accept
        ip6 daddr @systemdns6 counter packets 0 bytes 0 accept
        ip protocol icmp counter packets 4 bytes 1432 accept
        ip6 nexthdr ipv6-icmp counter packets 1 bytes 72 accept
        cgroup 1 counter packets 4329 bytes 1142359 accept
        cgroup 2 counter packets 5512 bytes 290499 accept
        cgroup 3 counter packets 68802 bytes 7906782 accept
        cgroup 4 counter packets 19810 bytes 1480715 accept
        cgroup 5 counter packets 0 bytes 0 accept
        cgroup 6 counter packets 0 bytes 0 accept
        cgroup 7 counter packets 0 bytes 0 accept
        cgroup 8 counter packets 7572 bytes 792441 accept
        cgroup 9 counter packets 1027 bytes 124076 accept
        cgroup 11 counter packets 24 bytes 1999 accept
    }

Pozdro

Ostatnio edytowany przez Jacekalex (2019-02-04 17:46:40)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#18 2019-02-04 19:34:38

arecki
Użytkownik
Skąd: 44 Bronson Lane Hensonville
Zarejestrowany: 2016-03-03

Re: Pomoc w konfiguracji zapory iptables

Ok, w sumie patrząc na to pod kątem dobrych praktyk administratora lepiej stosować Twoją metodę.
Mimo wszystko ten przykład loms został niezbyt umiejętnie okrojony do podstawowego FW, przez co może trochę utrudniać zrozumienie zasady działania autorowi.

Offline

 

#19 2019-02-09 09:47:10

macios4x
Użytkownik
Zarejestrowany: 2012-12-10

Re: Pomoc w konfiguracji zapory iptables

Podsumowując, pozostaję na razie przy Iptables. Co do nftables to na razie się wstrzymam dopóki dopóki go choć trochę nie obeznam.

W sumie chyba powinno wystarczyć to co kolega @arecki zaproponował:

arecki napisał(-a):

Najprostszy firewall dla desktopa:

Kod:

iptables -F
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 
iptables -A INPUT -s 127.0.0.0/8 -d 127.0.0.0/8 -i lo -j ACCEPT

Więc te reguły umieściłem już w /etc/iptables/iptables.rules, a mój skrypt konfiguracyjny - część odnośnie własnie zapory miewa się następująco:

Kod:

firewall ()
{
echo -en '\x1b[H\x1b[2J'
echo
echo -e "\\033[1;31mKonfiguracja zapory\\033[0m"
echo "==================="
echo
echo -e "\\033[1;36mTwój numer ip: \033[1;94m`hostname -i`\\033[0m"
echo
echo -e "\033[1;94m1"\\033[0m - Firewall "\033[1;94mSTOP"\\033[0m
echo -e "\033[1;94m2"\\033[0m - Firewall "\033[1;94mstatus"\\033[0m
echo -e "\033[1;94m3"\\033[0m - Firewall "\033[1;94mSTART"\\033[0m
echo -e "\033[1;94m4"\\033[0m - Firewall - zablokuj internet
echo -e "\033[1;94m0"\\033[0m - "\033[1;31m<=="\\033[0m Powrót do "\033[1;94mMenu główne"\\033[0m 

read -s key

case "$key" in
1) echo -e "\\033[1;36mFirewall Iptables STOP...\\033[0m"
sudo iptables -F
sudo iptables -X
sudo iptables -P INPUT ACCEPT
sudo iptables -P OUTPUT ACCEPT
echo $fin
read
firewall;;
2) echo -e "\\033[1;36mFirewall Iptables status...\\033[0m"
sudo iptables -L -n -v
echo $fin
read
firewall;;
3) echo -e "\\033[1;36mFirewall Iptables START...\\033[0m"
sudo iptables -F
sudo iptables-restore < /etc/iptables/iptables.rules
echo $fin
read
firewall;;
4) echo -e "\\033[1;36mFirewall - zablokowanie całego internetu\\033[0m"
sudo iptables -F
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT DROP
echo $fin
read
firewall;;
0) menu;;
*) echo $choice
read
firewall;;
esac
}

Zwolennik Open Source, użytkownik Arch, Debian

Offline

 

#20 2019-02-10 16:19:25

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Pomoc w konfiguracji zapory iptables

A ile trzeba się narobić żeby ten OUTPUT wyfiltrować, to normlanie masakra. xD

Podstawowe regułki

Kod:

# nft list chain inet filter OUTPUT
table inet filter {
        chain OUTPUT {
                type filter hook output priority filter; policy drop;
                jump check-state
                udp dport { 53 } counter packets 3435 bytes 217906 jump check-dns
                tcp dport { 53 } counter packets 3 bytes 180 jump check-dns
                oifname { "lo" } counter packets 680 bytes 40800 accept
                meta l4proto icmp counter packets 18 bytes 1512 accept
                ip6 nexthdr ipv6-icmp counter packets 36 bytes 2224 accept
                ip6 saddr fe80::/64 ip6 hoplimit 1 counter packets 159 bytes 12056 accept comment "link local address ipv6"
                ip saddr 169.254.0.0/16 ip ttl 1 counter packets 0 bytes 0 accept comment "link local address ipv4"
                udp dport { 67 } udp sport { 68 } counter packets 4 bytes 1312 accept comment "DHCP renew"
                ip6 daddr ff00::/8 ip6 hoplimit 1 counter packets 16 bytes 1840 accept comment "all multicasting addresses ipv6"
                ip daddr 224.0.0.0/4 ip ttl 1 counter packets 120 bytes 13556 accept comment "all multicasting addresses ipv4"
                tcp dport { 8080 } ip daddr 10.2.37.78 counter packets 16 bytes 960 accept comment "aero2 captcha code"
                meta cgroup { 0-4095 } counter packets 8367 bytes 536184 jump check-cgroup
                limit rate 30/minute burst 1 packets log prefix "* IPTABLES:OUTPUT * " flags all counter packets 0 bytes 0
                counter packets 0 bytes 0 drop
        }
}

Łańcuch od sprawdzania stanu połączenia:

Kod:

#  nft list chain inet filter check-state
table inet filter {
        chain check-state {
                ct state { established, related } accept
                ct state { invalid } counter packets 61 bytes 9676 drop
        }
}

Łańcuch od DNS, technicznie niby zbędny przy takiej konfiguracji ale trzymam go dla statów:

Kod:

#  nft list chain inet filter check-dns
table inet filter {
        chain check-dns {
                oifname { "lo" } counter packets 3456 bytes 219155 accept comment "local dns"
                ip daddr 9.9.9.9 counter packets 1 bytes 82 accept comment "dnscrypt check"
                limit rate 30/minute burst 1 packets log prefix "* IPTABLES:DNS * " flags all counter packets 0 bytes 0
                counter packets 0 bytes 0 drop
        }
}

I jeszcze łańcuch od appek:

Kod:

# nft list chain inet filter check-cgroup
table inet filter {
        chain check-cgroup {
                meta cgroup { 147 } tcp dport { 443 } counter packets 2426 bytes 145560 accept comment "dnscrypt-proxy"
                meta cgroup { 1 } tcp dport { 80, 443 } counter packets 1178 bytes 70680 accept comment "browser firefox-main"
                meta cgroup { 2 } tcp dport { 80, 443 } counter packets 50 bytes 3000 accept comment "browser firefox-1"
                meta cgroup { 3 } tcp dport { 80, 443 } counter packets 0 bytes 0 accept comment "browser firefox-2"
                meta cgroup { 4 } tcp dport { 80, 443 } counter packets 166 bytes 9960 accept comment "browser google-chrome"
                meta cgroup { 5 } tcp dport { 80, 443 } counter packets 141 bytes 8460 accept comment "browser chromium"
                meta cgroup { 6 } tcp dport { 80, 443 } counter packets 88 bytes 5280 accept comment "browser opera"
                meta cgroup { 4-6 } udp dport { 443 } counter packets 8 bytes 11024 drop comment "google quic protocol"
                meta cgroup { 4-6 } tcp dport { 5228 } counter packets 10 bytes 600 drop comment "google services cloud messaging sync"
                meta cgroup { 4-6 } tcp dport { 8443 } counter packets 25 bytes 1500 drop comment "google search appliance admin console"
                meta cgroup { 4-6 } tcp dport { 9942 } counter packets 0 bytes 0 drop comment "google search appliance version vanager"
                meta cgroup { 7 } tcp dport { 80, 443 } counter packets 56 bytes 3360 accept comment "browser wget"
                meta cgroup { 8 } tcp dport { 80, 443 } counter packets 80 bytes 4800 accept comment "browser curl"
                meta cgroup { 17 } tcp dport { 80, 443, 465, 587, 993, 995 } counter packets 474 bytes 28440 accept comment "mail thunderbird"
                meta cgroup { 33 } tcp dport { 80, 443 } counter packets 1102 bytes 66120 accept comment "telegram"
                meta cgroup { 34 } tcp dport { 80, 443 } counter packets 1045 bytes 62700 accept comment "telegram-p1"
                meta cgroup { 35 } tcp dport { 80, 443 } counter packets 0 bytes 0 accept comment "telegram-p2"
                meta cgroup { 36 } tcp dport { 443 } counter packets 4 bytes 240 accept comment "signal"
                meta cgroup { 37 } tcp dport { 6697 } counter packets 1 bytes 60 accept comment "hexchat"
                meta cgroup { 38 } counter packets 46 bytes 1929 accept comment "mumble"
                meta cgroup { 39 } tcp dport { 5222, 5223 } counter packets 71 bytes 4260 accept comment "psi-plus"
                meta cgroup { 40 } tcp dport { 80, 443 } counter packets 0 bytes 0 accept comment "conky"
                meta cgroup { 41 } tcp dport { 80, 443 } counter packets 17 bytes 1020 accept comment "ruby gem"
                meta cgroup { 49 } counter packets 815 bytes 73103 accept comment "qbittorrent"
                meta cgroup { 50 } tcp dport { 443 } counter packets 2 bytes 120 accept comment "megasync"
                meta cgroup { 51 } tcp dport { 443 } counter packets 16 bytes 960 accept comment "dropbox"
                meta cgroup { 65 } counter packets 0 bytes 0 drop comment "vlc"
                meta cgroup { 66 } counter packets 0 bytes 0 drop comment "smplayer"
                meta cgroup { 67 } tcp dport { 80, 443 } counter packets 2 bytes 120 accept comment "mpv"
                meta cgroup { 68 } tcp dport { 80, 443 } counter packets 12 bytes 720 accept comment "minitube"
                meta cgroup { 70 } tcp dport { 80, 443, 9418 } counter packets 26 bytes 1560 accept comment "git"
                meta cgroup { 71 } counter packets 130 bytes 7800 accept comment "ip-utils"
                meta cgroup { 82 } tcp dport { 443 } counter packets 13 bytes 780 accept comment "calibre"
                meta cgroup { 83 } tcp dport { 21, 990 } counter packets 38 bytes 2280 accept comment "filezilla"
                meta cgroup { 84 } counter packets 0 bytes 0 accept comment "libreoffice"
                meta cgroup { 86 } counter packets 0 bytes 0 accept comment "rsync"
                meta cgroup { 87 } tcp dport { 1935 } counter packets 20 bytes 1200 accept comment "rtmpdump"
                meta cgroup { 97 } tcp dport { 80, 443 } counter packets 12 bytes 720 accept comment "debian-tools-net"
                meta cgroup { 98 } tcp dport { 443 } counter packets 0 bytes 0 accept comment "gpg only used when tor disabled"
                meta cgroup { 99 } tcp dport { 80, 443 } counter packets 10 bytes 600 accept comment "synaptic"
                meta cgroup { 129 } tcp dport { 4713 } counter packets 0 bytes 0 drop comment "pulseaudio"
                meta cgroup { 145 } meta l4proto tcp counter packets 182 bytes 10920 accept comment "tor"
                meta cgroup { 146 } tcp dport { 80, 443 } counter packets 9 bytes 540 accept comment "ddclient"
                meta cgroup { 148 } meta l4proto tcp counter packets 20 bytes 1200 accept comment "ssh"
                meta cgroup { 149 } udp dport { 161 } counter packets 8 bytes 568 accept comment "cups"
                meta cgroup { 149 } tcp dport { 9100-9102 } counter packets 4 bytes 240 accept comment "cups"
                meta cgroup { 257 } udp dport { 123 } counter packets 10 bytes 760 accept comment "systemd-timesyncd"
                meta cgroup { 513 } counter packets 2 bytes 120 accept comment "kde"
                meta cgroup { 1792 } limit rate 10/second burst 1 packets log prefix "* IPTABLES:urxvt * " flags all counter packets 0 bytes 0 comment "urxvt log"
                meta cgroup { 1792 } counter packets 0 bytes 0 drop comment "urxvt"
                meta cgroup { 2048 } limit rate 30/minute burst 1 packets log prefix "* IPTABLES:block-apps * " flags all counter packets 0 bytes 0 comment "block-apps log"
                meta cgroup { 2048 } counter packets 0 bytes 0 drop comment "block-apps"
        }
}

Pierw myślałem, że sobie zrobię taki prosty filtr na appki na zasadzie przepuść albo nie przepuść ale doszedłem do wniosku, że można im w sumie jeszcze porty dorobić i wyszło coś takiego. Oczywiście ten cały filtr polega na cgroups i potrzebne są oznaczenia aplikacji, a to już osobna bajka. Jjeszcze lekka optymalizacja by się przydała by te częściej używane reguły były na początku. No i tam jeszcze parę appek mi zostało do wyłapania ale z auditd, to idzie nawet całkiem znośnie. xD

Offline

 

#21 2019-02-17 23:18:09

hi
Użytkownik
Zarejestrowany: 2016-03-24

Re: Pomoc w konfiguracji zapory iptables

macios4x napisał(-a):

Po przeczytaniu kilku przykładów konfiguracji zapory ustawiłem reguły Iptables. Ogólnie wszystko mi działa internet, ale nie mam pewności czy dobrze wszystko zrobiłem, w sumie to "posklejałem" kilka przykładów i taki oto wynik skryptu:


Kod:
sudo iptables -F
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT DROP
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m state --state INVALID -j DROP
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp -i eth0 -j REJECT --reject-with tcp-reset
sudo iptables -A INPUT -p udp -i eth0 -j REJECT --reject-with icmp-port-unreachable
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j REJECT --reject-with icmp-host-unreachable
sudo iptables -A INPUT -m conntrack --ctstate INVALID -p tcp ! --tcp-flags SYN,RST,ACK,FIN,PSH,URG SYN,RST
sudo iptables -N syn-flood
sudo iptables -A INPUT -p tcp --syn -j syn-flood
sudo iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
sudo iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j LOG --log-prefix "SYN-flood: "
sudo iptables -A syn-flood -j DROP;
sudo iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j LOG --log-prefix "Ping: "
sudo iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT # Ping of death
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j REJECT --reject-with icmp-host-unreachable
sudo iptables -A OUTPUT -p tcp --dport telnet -j REJECT
sudo iptables -A INPUT -p tcp --dport telnet -j REJECT
sudo iptables -A FORWARD -m state --state INVALID -j DROP
sudo iptables -A OUTPUT -m state --state INVALID -j DROP
sudo iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A OUTPUT -p tcp -m multiport --dports 20,21,22,25,43,53,80,443,465,587,1935,4321,5579,7634,8074 --syn -m state --state NEW -j ACCEPT
sudo iptables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT
sudo iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT

przeważnie na desktopie politykę domyślną OUTPUT ustawia się na ACCEPT, potem ewentualnie filtrujesz co ci tam potrzeba, przykładowo:

Kod:

iptables -A OUTPUT -d 192.168.0.0/16 -j DROP
iptables -A OUTPUT -d 244.0.0.0/4 -j DROP
iptables -A OUTPUT -d 10.0.0.0/8 -j DROP

poza tym jak przytniesz takie kwiatki jak:

Kod:

iptables -A FORWARD -m state --state INVALID -j DROP

gdzie masz jak byk:

Kod:

iptables -P FORWARD DROP

btw. w regułach INPUT masz tego więcej

to będzie ok

Ostatnio edytowany przez hi (2019-02-18 00:05:19)

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)