Iptables tűzfal beállítás segítség kérése

Fórumok

Sziasztok, sajnos kicsit belekavarodtam a tűzfalam beállításába, kellene egy kis segítség.
leírások alapján eddig eljutottam de sajnos a nyitott portokon nem érek el semmi (se SSH se web)

#!/bin/bash

# Flushing all rules
iptables -F
# iptables -X

# Setting default filter policy
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

# Allow unlimited traffic on loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# FTP
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT

# FTP passive ports
iptables -A INPUT -p tcp --dport 49152:65534 -j ACCEPT

# DNS
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --sport 53 -j ACCEPT

# Allow incoming SSH on main IP only
iptables -A INPUT -p tcp -d xxx.xxx.xxx.xxx --dport 26482 -j ACCEPT

# MAIL
iptables -A INPUT -p tcp --dport 25 -j ACCEPT # SMTP
iptables -A INPUT -p tcp --dport 110 -j ACCEPT # POP3
iptables -A INPUT -p tcp --dport 143 -j ACCEPT # IMAP
iptables -A INPUT -p tcp --dport 465 -j ACCEPT # Secure SMTP (SSMTP)
iptables -A INPUT -p tcp --dport 585 -j ACCEPT # Secure IMAP (IMAP4-SSL)
iptables -A INPUT -p tcp --dport 587 -j ACCEPT # SMTP (Message submission)
iptables -A INPUT -p tcp --dport 993 -j ACCEPT # IMAP4 over SSL (IMAPS)
iptables -A INPUT -p tcp --dport 995 -j ACCEPT # Secure POP3 (SSL-POP)

# NTP
iptables -A INPUT -p udp --sport 123 -j ACCEPT

# WEB
# iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
# iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 443 -m state --state NEW,ESTABLISHED -j ACCEPT

# Plesk Control Panel
iptables -A INPUT -p tcp --dport 8443 -j ACCEPT
iptables -A INPUT -p tcp --dport 8447 -j ACCEPT

# Plesk license activate
iptables -A INPUT -p tcp -s 64.131.90.38 --sport 5224 -j ACCEPT

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

# Allow established
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Log all other incoming
iptables -A INPUT -j LOG --log-prefix "PF: filter/input DROP "

Tehát minden forgalmat tiltani akarok, csak a felsoroltakat engedni. Mit rontottam el?

Hozzászólások

Több sebből is erősen vérzik ez a tűzfal.

Csak szemezgetve, és a hibatípusokra rámutatva:
1.) Ha már vannak nyomai a stateful firewall beállításnak (-m state), akkor érdemes lenne a többi helyen is alkalmazni.
Ezzel vélhetőleg megoldódna a jelenlegi problémád is, illetve elkerülhető lenne az összes olyan borzalom, mint ahogy most az FTP miatt nyitva a negyed TCP porttartomány.

2.) Tényleg ilyen nagy forgalmú FTP site lesz, ahol ennyi egyidejű adatcsatornára van szükség? (16383)

  iptables -A INPUT -p tcp --dport 49152:65534 -j ACCEPT

2.) Amit nem stateful módon kezelsz, arról mindkét irányban rendelkezni kell. (INPUT és OUTPUT is)

  iptables -A INPUT -p tcp --dport 8443 -j ACCEPT

3.) Alapvetően rossz megközelítésben, rossz irányban lévő, és rossz szabályok vannak. (pl. OUTPUT+sport+NEW, vagy az INPUT+sport)

  iptables -A INPUT -p tcp --dport 20 -j ACCEPT
  iptables -A OUTPUT -p tcp --sport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
  iptables -A INPUT -p tcp -s 64.131.90.38 --sport 5224 -j ACCEPT
  iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

4.) Hiányos szabályok vannak. (pl. DNS TCP-n, fontos ICMP típusok)

 
Javaslom, próbáld átgondolni, hogy az adott szolgáltatáshoz milyen protokoll kell, az milyen hálózati forgalmat generál, és erra alapozva írd meg a szabályokat. Ha stateful módon teszed ezt, jelentősen egyszerűbb lesz a dolgod, és a tűzfalad a jelenleginél biztonságosabb.

 
"sajnos a nyitott portokon nem érek el semmi (se SSH se web)"
Azt írtad, bekerült az OUTPUT-ba is az ESTABLISHED és a RELATED, illetve a default policyt is átállítottad ACCEPT-re, tehát a kimenő csomagok problémáját tünetileg kezelted. Így össze kellene állnia a kapcsolatnak.
- A tcpdump mit mond, miközben megszólítod? (tcpdump -nvvvi eth0 port 80 or port 443 or port 26482)
- Látszik valami érdekes a logban? Ha ehhez hasonlóan beteszel a problémás forgalomra logolást, ott látszanak a csomagok?
- A számlálók mit mutatnak? (iptables -nvL)
- Nincs egyéb hálózati gond? Pl. név szerint akarod megszólítani, de a DNS nem jó?
- Valóban hallgat ezenken a portokon a webszerver, és az SSH daemon?
- Nem maradt régi próbából véletlen NAT szabály, ami ezt érintené? (iptables -t nat -nvL)
stb.

Az iptables -P OUTPUT DROP -al minden választ blokkolsz.
Elsőre úgy tűnt, hogy legalább a webnek működnie kéne:
iptables -A OUTPUT -p tcp --sport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
De szerintem ez sem jó, mert a syn packetre válasz syn,ack se nem NEW se nem ESTABLISHED

Szóval, vagy kiveszed az elejéről az iptables -P OUTPUT DROP szabályt, vagy csinálsz hozzá "jó" OUTPUT kivételeket.

Nem került/maradt benne valami más szabály is? Tudnál írni egy iptables -L -v -n kimenetet?

Ha lefuttatom, kidob SSH-ból sajnos nem tudom bemásolni. :(
Itt tartok most, sajnos nem értem hol rontom el:

#!/bin/bash

# Flushing all rules
iptables -F

# Setting default filter policy
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Allow unlimited traffic on loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# FTP
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT

# FTP passive ports
iptables -A INPUT -p tcp --dport 49152:65534 -j ACCEPT

# DNS
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --sport 53 -j ACCEPT

# Allow incoming SSH on main IP only
iptables -A INPUT -p tcp -d xxx.xxx.xxx.xxx --dport 22 -j ACCEPT

# MAIL
iptables -A INPUT -p tcp --dport 25 -j ACCEPT # SMTP
iptables -A INPUT -p tcp --dport 110 -j ACCEPT # POP3
iptables -A INPUT -p tcp --dport 143 -j ACCEPT # IMAP
iptables -A INPUT -p tcp --dport 465 -j ACCEPT # Secure SMTP (SSMTP)
iptables -A INPUT -p tcp --dport 585 -j ACCEPT # Secure IMAP (IMAP4-SSL)
iptables -A INPUT -p tcp --dport 587 -j ACCEPT # SMTP (Message submission)
iptables -A INPUT -p tcp --dport 993 -j ACCEPT # IMAP4 over SSL (IMAPS)
iptables -A INPUT -p tcp --dport 995 -j ACCEPT # Secure POP3 (SSL-POP)

# NTP
iptables -A INPUT -p udp --sport 123 -j ACCEPT

# WEB
iptables -A INPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT

# Plesk Control Panel
iptables -A INPUT -p tcp --dport 8443 -j ACCEPT
iptables -A INPUT -p tcp --dport 8447 -j ACCEPT

# Plesk license activate
iptables -A INPUT -p tcp -s 64.131.90.38 --sport 5224 -j ACCEPT

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

# Let all related connections in
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Let all related connections out
iptables -A OUTPUT -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Log all other incoming
iptables -A INPUT -j LOG --log-prefix "PF: filter/input DROP "

Egyszerűsíts kicsit, ne akarj egyszerre mindent megérteni, mert nem fog menni.
Az ftp se passzívnak se aktívnak nem jó és többet enged helyből, mint ami valóban kell. A related az nem az amit keresel, az a többcsatornás protokollokhoz kell mint pl az ftp.

Nézd meg ezt és hasonlítsd össze a tiéddel. Próbáld ki hátha segít. (Előtte figyelj a megfelelő ip cím tartományokra értelem szerint.)

Az iptables szabályok sorrendje nem szépség vagy nagyság szerint állítandó össze. Amilyen sorrendben feltöltöd a szabályokat abban a sorrendben fogja a kernel végrehajtani a csomagokon. Ezt szokás úgy is hívni, hogy "first match" elv, azaz az első illeszkedésnél nem jut tovább a csomag.
Linuxscripting

A linkelt anyagból kiindulva jelenleg itt tartok, ezzel menni fog a passzív FTP?


# Flushing all rules
iptables -F
iptables -X

# Default chain policy
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

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

# ACCEPT earlier connections
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "IPFW: Possible portscan: "
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

# HTTP and HTTPS
iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT

# MAIL
iptables -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT # SMTP
iptables -A INPUT -m state --state NEW -p tcp --dport 110 -j ACCEPT # POP3
iptables -A INPUT -m state --state NEW -p tcp --dport 143 -j ACCEPT # IMAP
iptables -A INPUT -m state --state NEW -p tcp --dport 465 -j ACCEPT # Secure SMTP (SSMTP)
iptables -A INPUT -m state --state NEW -p tcp --dport 585 -j ACCEPT # Secure IMAP (IMAP4-SSL)
iptables -A INPUT -m state --state NEW -p tcp --dport 587 -j ACCEPT # SMTP (Message submission)
iptables -A INPUT -m state --state NEW -p tcp --dport 993 -j ACCEPT # IMAP4 over SSL (IMAPS)
iptables -A INPUT -m state --state NEW -p tcp --dport 995 -j ACCEPT # Secure POP3 (SSL-POP)
iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT

# DNS
iptables -A INPUT -m state --state NEW -p udp --dport 53 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT

# FTP
iptables -A INPUT -m state --state NEW -p tcp --dport 20 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 21 -j ACCEPT

# FTP passive ports
iptables -A INPUT -p tcp --dport 49152:65534 -j ACCEPT

# SSH (allow for main IP only)
iptables -A INPUT -p tcp -d xxx.xxx.xxx.xxx --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT

# NTP
iptables -A INPUT -p udp --sport 123 -j ACCEPT

# PING
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 11 -j ACCEPT

# Plesk Control Panel
iptables -A INPUT -p tcp --dport 8443 -j ACCEPT

# Plesk license activate
iptables -A INPUT -p tcp -s 64.131.90.38 --sport 5224 -j ACCEPT

# LOG other
# iptables -A INPUT -j LOG --log-prefix "IPFW: INPUT DROP:"
# iptables -A OUTPUT -j LOG --log-prefix "IPFW: OUTPUT DROP:"

Két esetben működne a passzív FTP ezekkel a szabályokkal:

  • Ha be lenne töltve az nf_conntrack_ftp modul a RELATED szabályok miatt (és akkor nem kell megengedni sem a 20-as, sem a passzív FTP "adat" portokat).
  • Vagy ha az FTP szerver programot konfiguráltad, hogy a megadott port tartományt használja.

Ha egyik sem teljesül, akkor nem működik az FTP.