View my profile on LinkedIn

Posts tagged ‘iptables’

Port forwarding con rinetd, insieme ad iptables

Ci sono due modi su linux per fare port forwarding: usare iptables ed usare rinetd.

Iptables è il firewall nativo di linux, un packet manager che a gira a livello del kernel e fà moltissime altre cose.

rinetd invece si occupa di “intubare” il traffico da HOST:PORTA a ALTROHOST:ALTRAPORTA, senza fare nessun tipo di ispezione, controllo, filtraggio o quello che è.

rinetd può essere assai utile in una situazione come questa:

poniamo di avere il gateway della nostra rete così messo:

1) ip provato192.168.0.1

2) ip pubblico (fisso) 67.78.89.91

sui dns mondiali il sito www.puppa.org punta all’indirizzo publico del firewall, che fà port forwarding con un web server dentro la propria lan, web server che ha come ip privato 192.168.0.10.

Per arrivare al server web (porta 80) dall’esterno imposto iptables in questo modo.

iptables -t nat -A PREROUTING -p tcp --dport  80 -d 67.78.89.91 -j DNAT --to-destination 192.168.0.10
iptables -A FORWARD -p tcp --dport  80 -d 192.168.0.10 -j ACCEPT
iptables -A FORWARD -s 192.168.0.10 -m state --state ESTABLISHED,RELATED -j ACCEPT

In una situazione come questa se da un computer della rete 192.168.0.X provo ad aprire il si sito www.puppa.org usando l’indirizzo pubblico non potrò aprirlo.

Questo mi costringe a tenere un dns interno alla lan dove il sito www.puppa.org sarà puntato con il suo ip privato.

Detta cosi non è che la cosa sia particolarmente onerosa, in virtù del fatto che, se ho un domino windows, comunque un dns interno alla lan ce l’ho, me lo fà by design il Domain Controller.

Complichiamoci la vita: poniamo di avere un’altra sede, con una configurazione simile: un firewall con ip pubblico 45.56.67.78 e con ip privato 192.168.1.1, sulla lan all’indirizzo ip privato 192.168.1.20 trovo il mail serer aziendale, conosciuto al mondo con l’ip pubblico, e raggiungibile dall’esterno con il solito iptables sulla porte 25 e 110.

iptables -t nat -A PREROUTING -p tcp --dport  25 -d 45.56.67.78 -j DNAT --to-destination 192.168.1.20
iptables -A FORWARD -p tcp --dport  25 -d 192.168.1.20 -j ACCEPT
iptables -A FORWARD -s 192.168.1.20 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 110 -d
45.56.67.78 -j DNAT --to-destination 192.168.1.20
iptables -A FORWARD -p tcp --dport 110 -d 192.168.1.20 -j ACCEPT
iptables -A FORWARD -s 192.168.1.20 -m state --state ESTABLISHED,RELATED -j ACCEPT

Ovviamente le due sedi sono in VPN e tutti gli host si vedono tra di loro con gli indirizzi privati.

A questo punto sui dns delle due filiali dovrò gestire per ogni filiale gli host locali e gli host remoti separatamente.

Aggiungiamo una terza sede senza serivizi, il dns di qeusta terza sede dovrò gestire sempre gli stessi host, ma con tutti gli ip pubblici.

Tre sedi con tre configurazioni diverse, e la cosa può essere molto ma molto più complicata, fidatevi, ve lo dico per esperienza :-)

A questo punto rinted può venire in aiuto:

1) nella sede con il web server configuro rinetd per fare il forward della porta 80 dall’ip pubblico all’ip privato, configurando, sempre sul firewall, il forwarding nel file di configurazione /etc/rinted.conf inserendo la riga

67.78.89.90  80  192.168.0.10 80

2) nella sede con il mail stessa cosa cosi

45.56.67.78 25 192.168.1.20 25
45.56.67.78 110 192.168.1.20 110

In questo modo posso:

1) gestire un solo dns dove configurare tutto e gli altri li imposto puppa.org come zona di replica dal primario

2) non gestisco alcun dns server locale, carico tutto sul dns del provider dove ho comprato i nuome (arub, tophost, register o chi per loro) e vivo felice :-)

Protezione di un sistema linux agendo su parametri di sistema

Della serie “tutto fà brodo”, qui trovate una lista di impostazioni da fare sulle regole di firewall di iptables e su alcuni impostazioni di sistema che possono rendere la vita un pochino più difficile agli “acher” che invece di andare a fare cose più divertenti si divertono con i port scanning ed altre amenità.

.

Fatene buon uso, tanto e’ gratis :-)

.

#
#—————————————————————
# protezione dai syn-flood
#—————————————————————
iptables -A FORWARD -p tcp –syn -m limit –limit 3/s -j ACCEPT
#—————————————————————
# protezione da scan sospetti
#—————————————————————
iptables -A FORWARD -p tcp –tcp-flags SYN,ACK,FIN,RST RST -m limit –limit 1/s -j ACCEPT
#—————————————————————
# Enabling spooginf protecion
#—————————————————————
echo ‘1′ > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
#—————————————————————
# Enabling SYN-flood protection – Protection from Denial of Service (DOS) attacks
#—————————————————————
echo “1″ > /proc/sys/net/ipv4/tcp_syncookies
#—————————————————————
# Disable the acception of ICMP-redirect messages.
#—————————————————————
echo “0″ > /proc/sys/net/ipv4/conf/all/accept_redirects
#—————————————————————
# Disable responding to ping broadcasts
#—————————————————————
echo “1″ > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
#————————————————————-
# ICMP Dead Error Messages protection
#————————————————————-
echo “1″ > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
#—————————————————————
# Disable routing triangulation. Respond to queries out
# the same interface, not another. Helps to maintain state

# Also protects against IP spoofing
#—————————————————————
echo “2″ > /proc/sys/net/ipv4/conf/all/rp_filter
#—————————————————————
# Drop Invalid packets
#—————————————————————
iptables -A INPUT -m state –state INVALID -j DROP
iptables -A FORWARD -m state –state INVALID -j DROP
#—————————————————————
# Allow world to send ICMP packets?
#—————————————————————
iptables -A INPUT -p icmp –icmp-type echo-request -m limit –limit 20/second –limit-burst 100 -j ACCEPT
#—————————————————————
# Drop (NMAP) scan packets #
#—————————————————————
iptables -N VALID_CHECK
iptables -A VALID_CHECK -p tcp –tcp-flags ALL FIN,URG,PSH -j DROP
iptables -A VALID_CHECK -p tcp –tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
iptables -A VALID_CHECK -p tcp –tcp-flags ALL ALL -j DROP
iptables -A VALID_CHECK -p tcp –tcp-flags ALL FIN -j DROP
iptables -A VALID_CHECK -p tcp –tcp-flags SYN,RST SYN,RST -j DROP
iptables -A VALID_CHECK -p tcp –tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -A VALID_CHECK -p tcp –tcp-flags ALL NONE -j DROP
#—————————————————————
# Drop packets with bad tcp flags
#—————————————————————
iptables -A VALID_CHECK -p tcp –tcp-option 64 -j DROP
iptables -A VALID_CHECK -p tcp –tcp-option 128 -j DROP
iptables -A INPUT -p tcp –dport 0 -j DROP
iptables -A INPUT -p udp –dport 0 -j DROP
iptables -A INPUT -p tcp –sport 0 -j DROP
iptables -A INPUT -p udp –sport 0 -j DROP
#—————————————————————
# General stealth scan drop
#—————————————————————
iptables -A INPUT -p tcp ! –syn -j DROP

hitstatus