Newsgroup: it.comp.os.linux.sys
Titolo: cosa c'è di sbagliato in questo?

Un amico ha un problema con questo /etc/init.d/rete... praticamente 
dopo il login il pc si blocca...
Così funziona:
*******************************************
#!/bin/sh
# NAT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# abilitiamo l'attraversamento dei pacchetti
# tra un'interfaccia e l'altra
echo 1 > /proc/sys/net/ipv4/ip_forward
# Trasparent Proxy
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT 
--to-port 3128
iptables -A INPUT -j ACCEPT -m state --state NEW,ESTABLISHED,RELATED -i 
eth1 -p tcp
--dport 3128
iptables -A OUTPUT -j ACCEPT -m state --state NEW,ESTABLISHED,RELATED 
-o eth0 -p
tcp --dport 80
iptables -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED -i 
eth0 -p tcp
--sport 80
iptables -A OUTPUT -j ACCEPT -m state --state ESTABLISHED,RELATED -o 
eth1 -p tcp
--sport 80
**************************************************
così non funziona:
#!/bin/sh
# ripuliamo tutto
iptables -F
iptables -t nat -F
# impostiamo la policy per i pacchetti in ingresso
# bloccando il traffico
iptables -P INPUT DROP
# impostiamo la policy per i pacchetti in transito
# tra le interfacce bloccando il traffico
iptables -P FORWARD DROP
# impostiamo la policy per i pacchetti in uscita
# abilitando il traffico
iptables -P OUTPUT ACCEPT
# abilitiamo il transito di pacchetti provenienti
# dalla rete interna
iptables -A FORWARD -s eth1 -j ACCEPT
# abilitiamo i pacchetti icmp (il ping) per l'interfaccia
# di loopback
iptables -A INPUT -i lo -p icmp -j ACCEPT
# abilitiamo i pacchetti icmp per la scheda di rete
iptables -A INPUT -i eth0 -p icmp -j ACCEPT
# NAT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# abilitiamo l'attraversamento dei pacchetti
# tra un'interfaccia e l'altra
echo 1 > /proc/sys/net/ipv4/ip_forward
# Trasparent Proxy
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT 
--to-port 3128
iptables -A INPUT -j ACCEPT -m state --state NEW,ESTABLISHED,RELATED -i 
eth1 -p tcp
--dport 3128
iptables -A OUTPUT -j ACCEPT -m state --state NEW,ESTABLISHED,RELATED 
-o eth0 -p
tcp --dport 80
iptables -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED -i 
eth0 -p tcp
--sport 80
iptables -A OUTPUT -j ACCEPT -m state --state ESTABLISHED,RELATED -o 
eth1 -p tcp
--sport 80
-- 
-ciao       Raziel       #ICQ 314405452
[HT] Real Quilian (851574) - Italia - IX.189
http://razielweb.altervista.org
           *Knoppix 3.8 su HD User*

 iptables -P INPUT DROP
se questa viene commentata, tutto funziona... non capisco proprio


iptables -A INPUT -i lo -p icmp -j ACCEPT
Togli "-p icmp": l'interfaccia "lo" devi sbloccarla.
-- 
Ci sono 10 tipi di persone al mondo: quelle che capiscono il sistema binario
e quelle che non lo capiscono.

 Togli "-p icmp": l'interfaccia "lo" devi sbloccarla.
stamattina gli ho fatto aggiungere questo (v.sotto), l'interfaccia 
grafica funziona, ma nessuno naviga, nè il server, nè i client. Quindi 
gli faccio togliere anche iptables -A INPUT -i lo -p icmp -j ACCEPT, 
giusto?
# abilito le comunicazioni su lo
iptables -A INPUT -i lo -j ACCEPT
# abilitiamo i pacchetti icmp (il ping) per l'interfaccia
# di loopback
iptables -A INPUT -i lo -p icmp -j ACCEPT
-- 


 iptables -A INPUT -i lo -p icmp -j ACCEPT
anche togliendo questo il server e i pc client non navigano... che 
fare? :(


 fare? :(
scusa eh ma come <censored> fa a risolvere i nomi ?
iptables -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED -i eth0 
levando "-p tcp" probabilmente risolve.
Ma mi sa che hai dei GROSSI dubbi su come funzioni in generale internet, la
risoluzione dei nomi etcccc...
Non esiste solo il TCP, sai ?
Max

 Non esiste solo il TCP, sai ?
ok, lo so, ma come te lo spieghi che questo funziona:
#!/bin/sh
# NAT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# abilitiamo l'attraversamento dei pacchetti
# tra un'interfaccia e l'altra
echo 1 > /proc/sys/net/ipv4/ip_forward
# Trasparent Proxy
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT 
--to-port 3128
iptables -A INPUT -j ACCEPT -m state --state NEW,ESTABLISHED,RELATED -i 
eth1 -p tcp
--dport 3128
iptables -A OUTPUT -j ACCEPT -m state --state NEW,ESTABLISHED,RELATED 
-o eth0 -p
tcp --dport 80
iptables -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED -i 
eth0 -p tcp
--sport 80
iptables -A OUTPUT -j ACCEPT -m state --state ESTABLISHED,RELATED -o 
eth1 -p tcp
--sport 80
-- 


 eth0 
ok, ora con questo si collega, grazie


 ok, ora con questo si collega, grazie
il punto della situazione è il server si collega.. i client continuano 
a non collegarsi :(


 non collegarsi :(
IMHO lo script va rif... rivisto. Se vuoi, ti posto la mia "filosofia"
in un generico script per firewall... sufficientemente parametrico. :-)
bye G.L.

 :-)
accetto tutto :)


 il login il pc si blocca...
Se vuoi un consiglio, installagli shorewall e vivi felice.
Con 3 banali regole fai tutto quello che fa questo script e sei sicuro
di non sbagliare nulla e di non dimenticarti nulla.
-- 
Flavio Visentin
Membro del CICAP
Comitato Italiano per il Controllo delle Affermazioni di P4



no imho deve capire cosa scrive.
Che vuol DIRE "non si collegano" ??
Scommetto che navigano tramite web e non scaricano, ad esempio, la posta.
Lo vuoi capire che l'UDP, porta 53, SERVE ?
devi farla passare anche in forward.... non devi permettere solo il TCP.
IMHO hai bisogno di una bella infarinata su come funziona internet in
generale.... 
Metti due belle regoline in fondo alle 3 catene (in,out e fw) che logghino
i pacchetti che arrivano alla fine e poi sono droppati.
Almeno vedi cosa stai buttando.
Se in stalli shorewall non capirai mai una beneamata mazza di quello che
fai.
Max
Max

 accetto tutto :)
Eccolo, per un firewall con dmz, dotato di dhcp e proxy (occhio alle
linee mandate a capo dal newsreader):
#!/bin/bash
# Common Variables
IPT="$IPT"
# Wan, Lan, Dmz interfaces
EXT_IF="eth1"
INT_IF="eth0"
DMZ_IF="eth2"
PUBLIC_NET="
172.16.200.128/29
"
PRIVATE_NET="
10.10.10.0/24
"
DMZ_NET="
192.168.0.0/24
"
PUBLIC_FW="172.16.200.130"
PUBLIC_WWW="172.16.200.131"
DMZ_FW="192.168.0.254"
DMZ_MAIL="192.168.0.100
DMZ_WWW="192.168.0.101"
PRIVATE_FW="10.10.10.254"
ADMIN_IP="10.10.10.1"
# Required modules
/sbin/modprobe ip_tables
/sbin/modprobe ip_conntrack
/sbin/modprobe iptable_nat
/sbin/modprobe iptable_filter
/sbin/modprobe iptable_mangle
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_conntrack_irc
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_nat_irc
/sbin/modprobe ipt_LOG
/sbin/modprobe ipt_REJECT
/sbin/modprobe ipt_MASQUERADE
/sbin/modprobe ipt_REDIRECT
/sbin/modprobe ipt_TOS
/sbin/modprobe ipt_state
# Required Kernel parameters (enabling packet forwarding)
/bin/echo 1 > /proc/sys/net/ipv4/ip_forward
# Optional Kernel parameters (verifying source to avoid ip spoofing)
/bin/echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
# Rejecting source route
/bin/echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
# icmp
/bin/echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
/bin/echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
/bin/echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
# Martians - wan interface
/bin/echo 1 > /proc/sys/net/ipv4/conf/eth1/log_martians
/bin/echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
/bin/echo 0 > /proc/sys/net/ipv4/conf/all/proxy_arp
# Initializating chains and policies
$IPT -F
$IPT -t nat -F
$IPT -t mangle -F
$IPT -X
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT DROP
# Optimize various services by manipulating TOS ip header field
$IPT -A PREROUTING -t mangle -p tcp --dport telnet -j TOS --set-tos 
Minimize-Delay
$IPT -A PREROUTING -t mangle -p tcp --dport ftp -j TOS --set-tos 
Minimize-Delay
$IPT -A PREROUTING -t mangle -p tcp --dport ftp-data -j TOS --set-tos 
Maximize-Throughput
$IPT -A PREROUTING -t mangle -p tcp --dport www -j TOS --set-tos 
Maximize-Throughput
$IPT -A PREROUTING -t mangle -p tcp --dport domain -j TOS --set-tos 
Maximize-Reliability
$IPT -A PREROUTING -t mangle -p tcp --dport pop3 -j TOS --set-tos 
Minimize-Cost
$IPT -A PREROUTING -t mangle -p tcp --dport smtp -j TOS --set-tos 
Minimize-Cost
$IPT -A PREROUTING -t mangle -p tcp --dport nntp -j TOS --set-tos 
Minimize-Cost
# Masquerading private net and DMZ (Source Dynamic NAT)
$IPT -t nat -s $PRIVATE_NET -A POSTROUTING -o $EXT_IF -j SNAT --to 
$PUBLIC_FW
# Dmz hosts update (see FORWARD to enable)
$IPT -t nat -s $DMZ_NET -A POSTROUTING -o $EXT_IF -j SNAT --to $PUBLIC_FW
# Firewalling
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Some Services Request Ident...
$IPT -A INPUT -p tcp --dport auth -j REJECT --reject-with tcp-reset
# Traffic coming from loopback interface entirely accepted
$IPT -A INPUT -i lo -j ACCEPT
# Grant access to administrator...
$IPT -A INPUT -p tcp -i $INT_IF -s $ADMIN_IP -d $PRIVATE_FW --dport ssh 
-j ACCEPT
# Various services to be granted for LAN and DMZ
# Squid proxy
$IPT -A INPUT -p tcp -i $INT_IF -m state --state NEW -s $PRIVATE_NET -d 
$PRIVATE_FW --dport squid -j ACCEPT
# DHCP server
$IPT -A INPUT -i $INT_IF -p tcp --dport bootps -j ACCEPT
$IPT -A INPUT -i $INT_IF -p udp --dport bootps -j ACCEPT
# Logging certain input dropped packets...
$IPT -A INPUT -i $EXT_IF -j LOG --log-prefix "NetFilter INPUT - "
$IPT -A INPUT -i $DMZ_IF -j LOG --log-prefix "NetFilter INPUT - "
$IPT -A INPUT -j DROP
# Forward Rules
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# Completely Opened from lan to the internet (lan - Best to use: safe ports)
# $IPT -A FORWARD -i $INT_IF -o $EXT_IF -s $PRIVATE_NET -j ACCEPT
# Some Services Request Ident...
$IPT -A FORWARD -p tcp --dport auth -j REJECT --reject-with tcp-reset
# Only For dmz hosts software updates
# $IPT -A FORWARD -s $DMZ_NET -o $EXT_IF -j ACCEPT
# Particular needs for admin
$IPT -A FORWARD -i $INT_IF -o $DMZ_IF -s $ADMIN_IP -j ACCEPT
$IPT -A FORWARD -i $INT_IF -o $EXT_IF -p tcp -s $ADMIN_IP --dport ftp -j 
ACCEPT
$IPT -A FORWARD -i $INT_IF -o $EXT_IF -p icmp -s $ADMIN_IP -j ACCEPT
# Enable Mail/Dns access from lan to dmz services
$IPT -A FORWARD -i $INT_IF -o $DMZ_IF -m state --state NEW -s 
$PRIVATE_NET -d $DMZ_MAIL -p tcp --dport domain -j ACCEPT
$IPT -A FORWARD -i $INT_IF -o $DMZ_IF -m state --state NEW -s 
$PRIVATE_NET -d $DMZ_MAIL -p udp --dport domain -j ACCEPT
$IPT -A FORWARD -i $INT_IF -o $DMZ_IF -m state --state NEW -s 
$PRIVATE_NET -d $DMZ_MAIL -p tcp --dport smtp -j ACCEPT
$IPT -A FORWARD -i $INT_IF -o $DMZ_IF -m state --state NEW -s 
$PRIVATE_NET -d $DMZ_MAIL -p tcp --dport pop3 -j ACCEPT
# Normal forward configuration
# Safe Ports
# $IPT -A FORWARD -i $INT_IF -o $EXT_IF -p tcp -s $PRIVATE_NET --dport 
1025:65535 -j ACCEPT
# $IPT -A FORWARD -i $INT_IF -o $EXT_IF -p udp -s $PRIVATE_NET --dport 
1025:65535 -j ACCEPT
# Internet Services allowed from lan...
$IPT -A FORWARD -i $INT_IF -o $EXT_IF -p tcp -s $PRIVATE_NET --dport 
pop3 -j ACCEPT
$IPT -A FORWARD -i $INT_IF -o $EXT_IF -p tcp -s $PRIVATE_NET --dport 
imap2 -j ACCEPT
$IPT -A FORWARD -i $INT_IF -o $EXT_IF -p tcp -s $PRIVATE_NET --dport 
imap3 -j ACCEPT
$IPT -A FORWARD -i $INT_IF -o $EXT_IF -p tcp -s $PRIVATE_NET --dport 
nntp -j ACCEPT
$IPT -A FORWARD -i $INT_IF -o $EXT_IF -p tcp -s $PRIVATE_NET --dport ntp 
-j ACCEPT
$IPT -A FORWARD -i $INT_IF -o $EXT_IF -p udp -s $PRIVATE_NET --dport ntp 
-j ACCEPT
# Allows Dns/Mail external server access
$IPT -A FORWARD -i $DMZ_IF -o $EXT_IF -p tcp -s $DMZ_MAIL --dport domain 
-j ACCEPT
$IPT -A FORWARD -i $DMZ_IF -o $EXT_IF -p udp -s $DMZ_MAIL --dport domain 
-j ACCEPT
$IPT -A FORWARD -i $DMZ_IF -o $EXT_IF -p tcp -s $DMZ_MAIL --dport smtp 
-j ACCEPT
# Allows dmz access to ntp time sincronization servers
$IPT -A FORWARD -p tcp -s $DMZ_NET -o $EXT_IF --dport ntp -j ACCEPT
$IPT -A FORWARD -p udp -s $DMZ_NET -o $EXT_IF --dport ntp -j ACCEPT
# Smtp/Pop3 world opened (dangerous - KEEP SERVER UPDATED)
$IPT -A FORWARD -i $EXT_IF -o $DMZ_IF -m state --state NEW -p tcp -d 
$DMZ_MAIL --dport smtp -j ACCEPT
$IPT -A FORWARD -i $EXT_IF -o $DMZ_IF -m state --state NEW -p tcp -d 
$DMZ_MAIL --dport pop3 -j ACCEPT
# Web Server (dangerous - KEEP SERVER UPDATED)
$IPT -A FORWARD -i $EXT_IF -o $DMZ_IF -m state --state NEW -p tcp -d 
$DMZ_WWW --dport www -j ACCEPT
# Logging Certain Forward Dropped Packets...
$IPT -A FORWARD -i $EXT_IF -j LOG --log-prefix "NetFilter FORWARD - "
$IPT -A FORWARD -i $INT_IF -j REJECT
$IPT -A FORWARD -i $DMZ_IF -j REJECT
$IPT -A FORWARD -j DROP
# Output Rules
$IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Some Services Request Ident...
$IPT -A OUTPUT -p tcp --dport auth -j REJECT --reject-with tcp-reset
# Completely Opened
$IPT -A OUTPUT -j ACCEPT
# Logging Certain Output Dropped Packets...
$IPT -A OUTPUT -j LOG --log-prefix "NetFilter OUTPUT - "
$IPT -A OUTPUT -j REJECT
# Destination NAT on dmz or intranet private network
# Web Server: publicy accessible
$IPT -A PREROUTING -t nat -p tcp -d $PUBLIC_WWW --dport www -j DNAT --to 
$DMZ_WWW:80
# Mail Server: accessibile pubblicamente
$IPT -A PREROUTING -t nat -p tcp -d $PUBLIC_FW --dport smtp -j DNAT --to 
$DMZ_MAIL:25
$IPT -A PREROUTING -t nat -p tcp -d $PUBLIC_FW --dport pop3 -j DNAT --to 
$DMZ_MAIL:110
# Transparent Proxying
$IPT -t nat -A PREROUTING -i $INT_IF -s $PRIVATE_NET -p tcp --dport www 
-j REDIRECT --to-port 3128
exit 0

 Che vuol DIRE "non si collegano" ??
Son d'accordo, ma anche uno script d'esempio aiuta a capire. Poi, per
me, sono pienamente d'accordo che Raziel non solo deve mettere a punto
il fatto che il dns ha bisogno della porta 53/udp, ma anche rileggersi
bene la struttura che sta dietro netfilter/iptables, in particolare
l'ascii art delle chains:
http://www.netfilter.org/documentation/index.html#documentation-howto
bye G.L.

 
http://www.netfilter.org/documentation/index.html#documentation-howto
grazie mille per lo script, ci aiuterà sicuramente. so bene anch'io che 
non c'è solo il tcp, ma non ero a conoscenza di questa 53/udp... sono 
alle prime armi con iptables e per di più non sto provando direttamente 
sul pc-server (che è a molti km di distanza da me). Ti ringrazio anche 
per il link, lo leggerò sicuramente. Poi vi dico come è andata a finire 
:)


 grazie mille per lo script, ci aiuterà sicuramente.
Errata corrige. in testa allo script, modifica l'assegnazione della
variabile "IPT":
IPT="/sbin/iptables"
bye G.L.