που είναι το λάθος; iptables script

Demosthenes Koptsis demosthenesk at gmail.com
Sat May 7 00:18:35 EEST 2011


Χαίρετε θα ήθελα αν γίνεται κάποια βοήθεια...

έχω κάνει ποστ το ίδιο θέμα στο φόρουμ του ubuntu σχετικά με το
iptables.

http://forum.ubuntu-gr.org/viewtopic.php?f=25&t=18334#p185409

Η ιστορία έχει ως εξής, 

      * Επεξεργασία δημοσίευσης
      * Αποδοχή αυτής της απάντησης
      * Αναφέρετε αυτήν την δημοσίευση
      * Παράθεση demosthenesk
Ρύθμιση iptables
Δημοσίευσηαπό demosthenesk » Σήμερα, 19:29 

Θέλω σε πρώτη φάση με το iptables να μπλοκάρω τα πάντα, δλδ να έχω
Default Policy DROP και στην συνέχεια να ανοίγω μία μία τρύπες 
1) προς τις υπηρεσίες που θέλω να χρησιμοποιήσω σαν client και
2) προς τις υπηρεσίες που θέλω να προσφέρω σαν server.

στην προσπάθεια αυτή έκανα ένα μικρό script που με start/stop ξεκινά και
σταματά το firewall. (Θέλω να είναι σε αυτήν την μορφή για να το αλλάζω
εύκολα).

Όμως ενώ έχω ισχυρά την πεποίθηση ότι δεν κάνω κάποιο λάθος δεν μπορώ να
ανοίξω τρύπα στο firewall για να χρησιμοποιώ το απλό έναν ssh client.

Παρακάτω είναι το script.

---------------------------
#!/bin/sh
#
# Initscript for firewall.
#
# description: Starts and stops firewall
# 
### BEGIN INIT INFO
# Provides: firewall script
# Required-Start:    $local_fs
# Required-Stop:     $local_fs
# Default-Start:     3 5
# Default-Stop:      0 1 2 6
# Short-Description: Starts and stops firewall
### END INIT INFO

# Check if root is running this script

if [ $(id -u) -ne 0 ] ; then
    echo "ERROR: Try to run this as root."
    # LSB specification errorcode
    exit 4
fi

modprobe ip_conntrack_ftp

INTERFACE="eth1"
LOOPBACK_INTERFACE="lo"
IPADDR="192.168.0.5"
LOOPBACK="127.0.0.1"
CLASS_A="10.0.0.0/8"
CLASS_B="172.16.0.0/12"
CLASS_C="192.168.0.0/16"
CLASS_D_MULTICAST="224.0.0.0/4"
CLASS_E_RESERVED_NET="240.0.0.0/5"
BROADCAST_SRC="0.0.0.0"
BROADCAST_DEST="255.255.255.255"

PRIVPORTS="0:1023"
UNPRIVPORTS="1024:65535"

#########################################
#Enable broadcast echo protection
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

#Disable Source Routed Packets
for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do
    echo 0 > $f
done

#Enable TCP SYN Cookie Protection
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

#Disable ICMP Redirect Acceptance
for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do
    echo 0 > $f
done

#Dont send redirect messages
for f in /proc/sys/net/ipv4/conf/*/send_redirects; do
    echo 0 > $f
done

#Drop Spoofed Packets
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
    echo 1 > $f
done

#Log packets with impossible addresses
for f in /proc/sys/net/ipv4/conf/*/log_martians; do
    echo 1 > $f
done
#########################################

flush()
{
    #Remove any existing rules from all chains
    iptables --flush
    iptables -t nat --flush
    iptables -t mangle --flush
}


accept_policy()
{
    #set default policy to accept
    iptables --policy INPUT ACCEPT
    iptables --policy OUTPUT ACCEPT
    iptables --policy FORWARD ACCEPT

    iptables -t nat --policy PREROUTING ACCEPT
    iptables -t nat --policy OUTPUT ACCEPT
    iptables -t nat --policy POSTROUTING ACCEPT

    iptables -t mangle --policy PREROUTING ACCEPT
    iptables -t mangle --policy OUTPUT ACCEPT

}


drop_policy()
{
    #set default policy to drop
    iptables --policy INPUT DROP
    iptables --policy OUTPUT DROP
    iptables --policy FORWARD DROP

#    iptables -t nat --policy PREROUTING DROP
#    iptables -t nat --policy OUTPUT DROP
#    iptables -t nat --policy POSTROUTING DROP

    iptables -t mangle --policy PREROUTING DROP
    iptables -t mangle --policy OUTPUT DROP
}

remove_user_chains()
{
    iptables -X
    iptables -t nat -X
    iptables -t mangle -X
}


rules()
{
  ####### Allow ssh client to remote ssh server
#  iptables -A OUTPUT -p tcp -s $IPADDR --sport $UNPRIVPORTS --dport 22
-j ACCEPT
#  iptables -A INPUT -p tcp --sport 22 -d $IPADDR --dport $UNPRIVPORTS
-j ACCEPT 

  iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT
  iptables -A INPUT -p tcp --sport 22 -j ACCEPT 

  ##########################################################

}


start() 
{
    flush
    
    #unlimited traffic on loopback interface
    iptables -A INPUT -i lo -j ACCEPT
    iptables -A OUTPUT -o lo -j ACCEPT
        
    drop_policy
    remove_user_chains
    rules
}
  

stop() 
{   
    flush
    remove_user_chains
    accept_policy
}



restart() 
{
    stop
    start
}


case "$1" in
    start)
	start
	;;
    stop)
	stop
	;;
    restart)
	restart
	;;
    *)
	echo "Usage: $0 {start|stop|restart}"
	exit 1
esac

exit 0
----------------------

όλο το ζουμί είναι στην ρουτίνα rules().
Εκεί είναι οι κανόνες για να ανοίγω τρύπες στο firewall.

Επεξεργασία δημοσίευσης
      * Διαγραφή δημοσίευσης
      * Αποδοχή αυτής της απάντησης
      * Αναφέρετε αυτήν την δημοσίευση
      * Παράθεση demosthenesk
Re: Ρύθμιση iptables
Δημοσίευσηαπό demosthenesk » Σήμερα, 19:42 

Η γραμμή
iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT

λέει ότι επιτρέπεται ένα εξερχόμενο πακέτο tcp από το σύστημα (πιο καλά
από οπουδήποτε) προς οποιοδήποτε ssh server

η επόμενη γραμμή λέει ότι να δέχεται από οποιοδήποτε ssh server τα
πακέτα tcp σε οποιοδήποτε interface
iptables -A INPUT -p tcp --sport 22 -j ACCEPT 

επίτηδες έχω αυτήν την μορφή για να δω αν λειτουργεί. Όταν καταλάβω που
είναι το λάθος θα γράψω πιο σοφιστικέ κανόνες όπως
iptables -A OUTPUT -p tcp -s $IPADDR --sport $UNPRIVPORTS --dport 22 -j
ACCEPT
iptables -A INPUT -p tcp --sport 22 -d $IPADDR --dport $UNPRIVPORTS -j
ACCEPT 

αλλά έλα μου ντε που ούτε το απλό δεν λειτουργεί.
Υπόψιν εδώ θέλω να μπορώ να χρησιμοποιήσω έναν ssh client από το
μηχάνημα μου.


Τι λάθος κάνω;



-- 
Regards,
Demosthenes



More information about the Linux-greek-users mailing list