sto mettendo mano per la prima volta ad iptables, mi ha aiutato molto sardylan su irc, e adesso sto vedendo di rifinire il tutto cercando qua e la le info che mi servono...
La situazione è la seguente:
Ho un modem ethernet (AliceGate), a questo c'è collegato il mio serverino (tramite eth0), su cui lancio la connessione usando pppoe, quest'ultimo ha anche un'altra interfaccia di rete (eth1) a cui è collegato il laptop.
Quello che sto cercando di ottenere è che il server mi faccia da gateway per il laptop, permettendomi di navigare in rete, il server mi fa da webserver e dns principalmente. Ho attivato anche dyndns per rendere visibile dall'esterno il mio server.
Questo è lo script che ho preparato fin ora (sarebbe più corretto dire "che sardylan ha preparato", io mi sono solo limitato ad apportare qualche modifica):
Codice: Seleziona tutto
#!/bin/bash
IPT_CMD="/usr/sbin/iptables"
SW_VERB="-v"
IF_LAN="eth0"
IF_WAN="ppp0"
IF_INT="eth1"
firewall_init() {
echo "0" > /proc/sys/net/ipv4/ip_forward
$IPT_CMD -F $SW_VERB
$IPT_CMD -t nat -F $SW_VERB
$IPT_CMD -t mangle -F $SW_VERB
$IPT_CMD -X $SW_VERB
$IPT_CMD -t nat -X $SW_VERB
$IPT_CMD -t mangle -X $SW_VERB
}
firewall_policies() {
$IPT_CMD -P INPUT $1 $SW_VERB
$IPT_CMD -P OUTPUT $1 $SW_VERB
$IPT_CMD -P FORWARD $1 $SW_VERB
}
main_rules() {
$IPT_CMD -A INPUT -i lo -j ACCEPT $SW_VERB
$IPT_CMD -A INPUT -i $IF_LAN -j ACCEPT $SW_VERB
$IPT_CMD -A INPUT -i $IF_WAN -m state --state ESTABLISHED,RELATED -j ACCEPT $SW_VERB
$IPT_CMD -A OUTPUT -o lo -j ACCEPT $SW_VERB
$IPT_CMD -A OUTPUT -o $IF_LAN -j ACCEPT $SW_VERB
$IPT_CMD -A OUTPUT -o $IF_WAN -j ACCEPT $SW_VERB
}
forwarding_rules() {
$IPT_CMD -A FORWARD -i $IF_LAN -o $IF_WAN -j ACCEPT $SW_VERB
$IPT_CMD -A FORWARD -i $IF_WAN -m state --state ESTABLISHED,RELATED -j ACCEPT $SW_VERB
$IPT_CMD -A FORWARD -i $IF_LAN -o $IF_INT -m state --state ESTABLISHED,RELATED -j ACCEPT $SW_VERB
$IPT_CMD -A FORWARD -i $IF_INT -o $IF_LAN -j ACCEPT $SW_VERB
# ABILITO IL MASQUERADING
$IPT_CMD -t nat -A POSTROUTING -o $EXTERNAL -j MASQUERADE $SW_VERB
}
closing_rules() {
$IPT_CMD -A INPUT -j DROP $SW_VERB
$IPT_CMD -A OUTPUT -j DROP $SW_VERB
$IPT_CMD -A FORWARD -j DROP $SW_VERB
$IPT_CMD -Z $SW_VERB
$IPT_CMD -t nat -Z $SW_VERB
$IPT_CMD -t mangle -Z $SW_VERB
echo "1" > /proc/sys/net/ipv4/ip_forward
}
case "$1" in
start)
echo "Configuring firewall... "
firewall_init
firewall_policies DROP
main_rules
forwarding_rules
closing_rules
;;
stop)
echo "Resetting firewall... "
firewall_init
firewall_policies ACCEPT
;;
status)
$IPT_CMD -L -n -v --line-numbers > /tmp/firewall.out
echo >> /tmp/firewall.out
$IPT_CMD -t nat -L -n -v --line-numbers >> /tmp/firewall.out
cat /tmp/firewall.out | less
rm /tmp/firewall.out
;;
*)
echo "Usage: `basename $0` start|stop|status"
exit 1
;;
esac
Il mio timore è quello di non riuscire a collegarmi in ssh al server se dovessi sbagliare qualcosa, quindi se mi date una mano faccio qualche esperimento
Un'altra domanda, per aprire, ad esempio, la porta 8022 per ssh solo dall'interno dovrei fare
Codice: Seleziona tutto
iptables -A INPUT -i $IF_INT -p tcp -dport 8022 -j ACCEPTGrazie mille a tutti in anticipo...

