doc/el_GR.ISO8859-7/articles/dialup-firewall/article.sgml
2004-07-24 22:17:40 +00:00

401 lines
17 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!--
Dialup Firewall
The FreeBSD Greek Documentation Project
Original version: 1.30
-->
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" [
<!ENTITY % man PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN">
%man;
]>
<article lang="el">
<articleinfo>
<title>Σύνδεση μέσω τηλεφώνου και firewalling στο FreeBSD</title>
<authorgroup>
<author>
<firstname>Marc</firstname>
<surname>Silver</surname>
<affiliation>
<address><email>marcs@draenor.org</email></address>
</affiliation>
</author>
</authorgroup>
<pubdate>$FreeBSD$</pubdate>
<abstract>
<para>Αυτό το άρθρο περιγράφει πως μπορείτε να ρυθμίσετε ένα firewall
χρησιμοποιώντας μια PPP σύνδεση μέσω τηλεφώνου στο FreeBSD με το IPFW.
Πιο συγκεκριμένα, ένα firewall πάνω από μια σύνδεση μέσω τηλεφώνου που
έχει δυναμική IP διεύθυνση. Αυτό το κείμενο δεν ασχολείται με το πως
θα ρυθμίσετε την PPP σύνδεσή σας.</para>
</abstract>
</articleinfo>
<sect1 id="preface">
<title>Πρόλογος</title>
<para>Σύνδεση μέσω τηλεφώνου και firewalling στο FreeBSD</para>
<para>Αυτό το κείμενο περιγράφει την διαδικασία που χρειάζεται για να
ρυθμίσετε ένα firewall στο FreeBSD όταν η IP διεύθυνση δίνεται δυναμικά
από τον ISP σας. Παρόλο που έχω προσπαθήσει να κάνω αυτό το κείμενο
όσο το δυνατόν πιο πλήρες και σωστό, είστε ευπρόσδεκτοι να στείλετε τα
σχόλιά ή τις προτάσεις σας στην διεύθυνση
<email>marcs@draenor.org</email>.</para>
</sect1>
<sect1 id="kernel">
<title>Παράμετροι του πυρήνα</title>
<para>Το πρώτο πράγμα που θα χρειαστεί να κάνετε είναι να μεταγλωττίσετε
τον πυρήνα σας. Αν χρειάζεστε βοήθεια για να το κάνετε αυτό, τότε το
καλύτερο μέρος να ξεκινήσετε είναι το <ulink
URL="../../books/handbook/kernelconfig.html">τμήμα
ρυθμίσεων του πυρήνα στο Εγχειρίδιο</ulink>. Θα πρέπει να προσθέσετε
τις παρακάτω επιλογές στις ρυθμίσεις του πυρήνα σας:</para>
<variablelist>
<varlistentry>
<term><literal>options IPFIREWALL</literal></term>
<listitem>
<para>Ενεργοποιεί τον firewall κώδικα του πυρήνα.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>options IPFW2</literal></term>
<listitem>
<para>Ενεργοποιεί την νέα έκδοση του IPFW.</para>
<important>
<para>Αυτή η επιλογή έχει νόημα μόνο αν χρησιμοποιείτε την έκδοση
4.X του FreeBSD, είναι ενεργοποιημένη ήδη στις νεώτερες
εκδόσεις.<para>
</important>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>options IPFIREWALL_VERBOSE</literal></term>
<listitem>
<para>Στέλνει τα μηνύματα για τα κατάλληλα πακέτα στο log του
συστήματος.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>options
IPFIREWALL_VERBOSE_LIMIT=<replaceable>100</replaceable></literal></term>
<listitem>
<para>Βάζει κάποιο όριο στις φορές που κάποια εγγραφή θα
καταγράφεται. Αυτό εμποδίζει τα log αρχεία σας από το να γεμίσουν
με πολλές επαναλαμβανόμενες εγγραφές.
<replaceable>100</replaceable> είναι μια αρκετά λογική τιμή, αλλά
μπορείτε να το ρυθμίσετε ανάλογα με τις απαιτήσεις σας.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>options IPDIVERT</literal></term>
<listitem>
<para>Ενεργοποιεί τα <emphasis>divert</emphasis> sockets, που θα
δούμε αργότερα τι κάνουν.</para>
</listitem>
</varlistentry>
</variablelist>
<para>Υπάρχουν κι άλλα <emphasis>προαιρετικά</emphasis> πράγματα που
μπορείτε να προσθέσετε στον πυρήνα σας για ακόμα μεγαλύτερη ασφάλεια.
Δεν είναι απαραίτητα για να ρυθμίσετε ένα firewall έτσι ώστε να
δουλεύει, αλλά κάποιοι αρκετά παρανοϊκοί χρήστες μπορεί να θέλουν να τα
ενεργοποιήσουν.</para>
<variablelist>
<varlistentry>
<term><literal>options TCP_DROP_SYNFIN</literal></term>
<listitem>
<para>Αυτή η επιλογή δίνει την δυνατότητα στον πυρήνα να αγνοεί τα
TCP πακέτα που έχουν και την SYN και την FIN επιλογή. Έτσι
εμποδίζονται εργαλεία όπως το
<filename role="package">security/nmap</filename> κλπ. στην
προσπάθειά τους να
αναγνωρίσουν το TCP stack του μηχανήματος, αλλά επίσης είναι
ασύμβατο με τις επεκτάσεις που περιγράφει το RFC1644. Αυτό
<emphasis>δεν</emphasis> προτείνεται για ένα μηχάνημα που θα
τρέχει κάποιο web server.</para>
</listitem>
</varlistentry>
</variablelist>
<para>Μην κάνετε reboot όταν έχετε μεταγλωττίσει τον πυρήνα. Ελπίζουμε
πως θα χρειαστεί μόνο μια επανεκκίνηση, στο τέλος της
εγκατάστασης του firewall.</para>
</sect1>
<sect1 id="rcconf">
<title>Αλλαγές στο <filename>/etc/rc.conf</filename> για να φορτώνεται
το firewall</title>
<para>Τώρα πρέπει να κάνουμε κάποιες αλλαγές στο
<filename>/etc/rc.conf</filename> με τις ρυθμίσεις μας για το
firewall. Απλά προσθέστε τις παρακάτω γραμμές:</para>
<programlisting>firewall_enable="YES"
firewall_script="/etc/firewall/fwrules"
natd_enable="YES"
natd_interface="tun0"
natd_flags="-dynamic"</programlisting>
<para>Για περισσότερες πληροφορίες σχετικά με τη σημασίας καθεμιάς από
αυτές τις γραμμές, ρίξτε μια ματιά στο
<filename>/etc/defaults/rc.conf</filename> και διαβάστε την man σελίδα
&man.rc.conf.5;</para>
</sect1>
<sect1>
<title>Απενεργοποιήστε την ενσωματωμένη μετάφραση διευθύνσεων του
PPP</title>
<para>Μπορεί ήδη να χρησιμοποιείτε την ενσωματωμένη μετάφραση διευθύνσεων
του PPP (NAT). Αν ναι, τότε θα πρέπει να την απενεργοποιήσετε, αφού τα
παραδείγματα που θα δούμε παρακάτω χρησιμοποιούν το &man.natd.8; για να
κάνουν το ίδιο πράγμα.</para>
<para>Αν έχετε ήδη τις απαραίτητες γραμμές για να ξεκινάει το PPP
αυτόματα, μάλλον μοιάζουν κάπως έτσι:</para>
<programlisting>ppp_enable="YES"
ppp_mode="auto"
ppp_nat="YES"
ppp_profile="<replaceable>profile</replaceable>"</programlisting>
<para>Αν ναι, πρέπει να απενεργοποιήσετε το <literal>ppp_nat</literal>
προσθέτοντας στο αρχείο <filename>rc.conf</filename> σας την γραμμή
<literal>ppp_nat="YES"</literal>.
Θα πρέπει επίσης να αφαιρέσετε τυχόν <literal>nat enable yes</literal> ή
<literal>alias enable yes</literal> έχει το
<filename>/etc/ppp/ppp.conf</filename> σας.</para>
</sect1>
<sect1 id="rules">
<title>Οι κανόνες του firewall</title>
<para>Έχουμε σχεδόν τελειώσει. Το μόνο που απομένει τώρα είναι να
ορίσουμε τους κανόνες του firewall και τότε μπορούμε να επανεκκινήσουμε
το σύστημα ώστε να ξεκινήσει το firewall. Καταλαβαίνω πως ο καθένας θα
θέλει κάτι λίγο ή πολύ διαφορετικό στους κανόνες του. Αυτό που
προσπάθησα να κάνω είναι να γράψω κάποιους βασικούς κανόνες που
ταιριάζουν στους πιο πολλούς χρήστες που συνδέονται στο δίκτυο μέσω
τηλεφώνου. Μπορείτε προφανώς να κάνετε αλλαγές σύμφωνα με τις ανάγκες
σας, χρησιμοποιώντας τους παρακάτω κανόνες σαν την βάση για το δικό σας
σετ κανόνων. Ας αρχίσουμε όμως με τις βασικές αρχές ενός κλειστού
firewall. Αυτό που θέλετε να κάνετε είναι να κλείσετε τα πάντα και μετά
να ανοίξετε μόνο ότι πραγματικά σας χρειάζεται. Οι κανόνες θα πρέπει
λοιπόν πρώτα να επιτρέπουν και μετά να απαγορεύουν. Η λογική πίσω από
αυτό είναι ότι πρώτα βάζετε τους κανόνες που επιτρέπουν πράγματα να
περάσουν και ύστερα όλα τα άλλα απαγορεύονται. :)</para>
<para>Ύστερα, φτιάξτε ένα κατάλογο <filename
class="directory">/etc/firewall</filename>. Αλλάξτε κατάλογο μέσα σε
αυτόν και δημιουργήστε το αρχείο <filename>fwrules</filename> που το
όνομά του είχαμε γράψει στο <filename>rc.conf</filename>. Σημειώστε πως
μπορείτε να αλλάξετε το όνομα του αρχείου αυτού σε ότι θέλετε. Αυτός ο
οδηγός δίνει αυτό το όνομα σαν παράδειγμα και μόνο.</para>
<para>Ας δούμε τώρα ένα παράδειγμα firewall, που έχει αρκετά καλά
σχόλια.</para>
<programlisting># Define the firewall command (as in /etc/rc.firewall) for easy
# reference. Helps to make it easier to read.
fwcmd="/sbin/ipfw"
# Force a flushing of the current rules before we reload.
$fwcmd -f flush
# Divert all packets through the tunnel interface.
$fwcmd add divert natd all from any to any via tun0
# Allow all connections that have dynamic rules built for them,
# but deny established connections that don't have a dynamic rule.
# See ipfw(8) for details.
$fwcmd add check-state
$fwcmd add deny tcp from any to any established
# Allow all localhost connections
$fwcmd add allow tcp from me to any out via lo0 setup keep-state
$fwcmd add deny tcp from me to any out via lo0
$fwcmd add allow ip from me to any out via lo0 keep-state
# Allow all connections from my network card that I initiate
$fwcmd add allow tcp from me to any out xmit any setup keep-state
$fwcmd add deny tcp from me to any
$fwcmd add allow ip from me to any out xmit any keep-state
# Everyone on the Internet is allowed to connect to the following
# services on the machine. This example shows that people may connect
# to sshd and a webserver.
$fwcmd add allow tcp from any to me dst-port 22,80 in recv any setup keep-state
# This sends a RESET to all ident packets.
$fwcmd add reset log tcp from any to me 113 in recv any
# Enable ICMP: remove type 8 if you don't want your host to be pingable
$fwcmd add allow icmp from any to any icmptypes 0,3,8,11,12,13,14
# Deny all the rest.
$fwcmd add deny log ip from any to any</programlisting>
<para>Τώρα έχετε ένα ολοκληρωμένο firewall που επιτρέπει συνδέσεις στις
θύρες 22 και 80 και καταγράφει όλες τις άλλες συνδέσεις στο log του
συστήματος. Πλέον είστε έτοιμοι για επανεκκίνηση και το firewall θα
πρέπει να ξεκινήσει να δουλεύει. Αν δείτε ότι αυτό είναι λάθος, ή έχετε
οποιαδήποτε προβλήματα, ή ακόμα καλύτερα έχετε κάποιες προτάσεις για να
διορθωθεί αυτή η σελίδα, επικοινωνήστε μαζί μου με email.</para>
</sect1>
<sect1>
<title>Ερωτήσεις</title>
<qandaset>
<qandaentry>
<question>
<para>Γιατί χρησιμοποιείς το &man.natd.8; και το &man.ipfw.8; αφού
θα μπορούσες να χρησιμοποιήσεις τα φίλτρα του &man.ppp.8;;</para>
</question>
<answer>
<para>Θα πρέπει να είμαι ειλικρινής και να πω ότι δεν υπάρχει
κάποιος σοβαρός λόγος που χρησιμοποιώ το <command>ipfw</command>
και το <command>natd</command> αντί για τα ενσωματωμένα φίλτρα του
<command>ppp</command>. Από συζητήσεις που είχα με διάφορα άτομα
φαίνεται πως οι πιο πολλοί συμφωνούν στο εξής: το
<command>ipfw</command> έχει σαφώς πιο πολλές δυνατότητες και
είναι πιο ευέλικτο στις ρυθμίσεις του από ότι τα φίλτρα του
<command>ppp</command>, αλλά ότι κερδίζει σε δυνατότητες το χάνει
σε ευκολία τροποποίησης των ρυθμίσεων. Ένας από τους λόγους που
το χρησιμοποιώ είναι επειδή προτιμώ το φιλτράρισμα του firewall να
γίνεται στο επίπεδο του πυρήνα, κι όχι από ένα πρόγραμμα στο
επίπεδο του χρήστη.</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>Βλέπω μηνύματα όπως <errorname>limit 100 reached on entry
2800</errorname> και μετά από αυτό δεν ξαναβλέπω ποτέ μηνύματα στο
log μου. Δουλεύει ακόμα το firewall μου;</para>
</question>
<answer>
<para>Αυτό απλά σημαίνει πως έχει χρησιμοποιηθεί το μέγιστο όριο
καταγραφής (logging) για αυτό τον κανόνα. Ο κανόνας ο ίδιος
εξακολουθεί να δουλεύει, αλλά δεν θα στέλνει πια μηνύματα στο log
του συστήματος μέχρι να μηδενίσετε πάλι τους μετρητές. Μπορείτε
να μηδενίσετε τους μετρητές με την εντολή <command>ipfw
resetlog</command>. Εναλλακτικά, μπορείτε να αυξήσετε το όριο
καταγραφής στις ρυθμίσεις του πυρήνα σας με την επιλογή
<option>IPFIREWALL_VERBOSE_LIMIT</option> όπως περιγράψαμε
παραπάνω. Μπορείτε να αλλάξετε αυτό το όριο (χωρίς να
μεταγλωττίσετε πάλι τον πυρήνα σας και να κάνετε reboot)
χρησιμοποιώντας την &man.sysctl.8; τιμή
net.inet.ip.fw.verbose_limit.</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>Αν χρησιμοποιώ διευθύνσεις εσωτερικά που ανήκουν στην ομάδα
192.168.0.0 range, μπορώ να αλλάξω την εντολή σε κάτι όπως
<literal>$fwcmd add deny all from any to 192.168.0.0:255.255.0.0
via tun0</literal> στους κανόνες του firewall για να εμποδίσω τα
μηχανήματα έξω από το δίκτυο από το να συνδέονται με τα εσωτερικά
μηχανήματα;</para>
</question>
<answer>
<para>Η σύντομη απάντηση είναι όχι. Ο λόγος γι αυτό είναι ότι το
<command>natd</command> κάνει μετάφραση διευθύνσεων για
<emphasis>οτιδήποτε</emphasis> περνάει μέσω του interface
<devicename>tun0</devicename>. Έτσι, τα εισερχόμενα πακέτα θα
εμφανίζονται μόνο στην δυναμικά ορισμένη IP διεύθυνση του
εξωτερικού interface και <emphasis>όχι</emphasis> στην διεύθυνση
του εσωτερικού δικτύου. Σημειώστε όμως ότι μπορείτε να προσθέσετε
ένα κανόνα <literal>$fwcmd add deny all from
192.168.0.4:255.255.0.0 to any via tun0</literal> ο οποίος θα
απαγορεύει σε ένα μηχάνημα του εσωτερικού δικτύου να στείλει
οτιδήποτε πέρα από το firewall.</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>Κάποιο λάθος πρέπει να έγινε. Ακολούθησα τις εντολές κατά
γράμμα και τώρα κλειδώθηκα απέξω.</para>
</question>
<answer>
<para>Αυτός ο οδηγός υποθέτει ότι χρησιμοποιείτε το
<emphasis>userland-ppp</emphasis>, γι αυτό κι οι κανόνες που
δίνονται χρησιμοποιούν το <devicename>tun0</devicename> interface,
που αντιστοιχεί στην πρώτη σύνδεση που φτιάχνεται με το
&man.ppp.8; (αλλιώς γνωστό και ως <emphasis>user-ppp</emphasis>).
Η επόμενη σύνδεση θα χρησιμοποιούσε το
<devicename>tun1</devicename>, μετά το
<devicename>tun2</devicename> και πάει λέγοντας.</para>
<para>Θα πρέπει επίσης να θυμάστε ότι το &man.pppd.8; χρησιμοποιεί
το interface <devicename>ppp0</devicename>, οπότε αν ξεκινήσετε τη
σύνδεσή σας με το &man.pppd.8; θα πρέπει να αντικαταστήσετε το
<devicename>tun0</devicename> με <devicename>ppp0</devicename>.
Παρακάτω θα δείξουμε ένα εύκολο τρόπο να αλλάξετε τους κανόνες του
firewall κατάλληλα. Οι αρχικοί κανόνες σώζονται σε ένα αρχείο με
όνομα <filename>fwrules_tun0</filename>.</para>
<screen> &prompt.user; <userinput>cd /etc/firewall</userinput>
/etc/firewall&prompt.user; <userinput>su</userinput>
<prompt>Password:</prompt>
/etc/firewall&prompt.root; <userinput>mv fwrules fwrules_tun0</userinput>
/etc/firewall&prompt.root; <userinput>cat fwrules_tun0 | sed s/tun0/ppp0/g > fwrules</userinput>
</screen>
<para>Για να καταλάβετε αν χρησιμοποιείτε το &man.ppp.8; ή το
&man.pppd.8; μπορείτε να εξετάσετε την έξοδο της &man.ifconfig.8;
αφού ενεργοποιηθεί η σύνδεσή σας. Π.χ., για μια σύνδεση που
ενεργοποιήθηκε από το &man.pppd.8; θα δείτε κάτι σαν αυτό
(δείχνονται μόνο οι σχετικές γραμμές):</para>
<screen> &prompt.user; <userinput>ifconfig</userinput>
<emphasis>(skipped...)</emphasis>
ppp0: flags=<replaceable>8051&lt;UP,POINTOPOINT,RUNNING,MULTICAST&gt; mtu 1524</replaceable>
inet <replaceable>xxx.xxx.xxx.xxx</replaceable> --&gt; <replaceable>xxx.xxx.xxx.xxx</replaceable> netmask <replaceable>0xff000000</replaceable>
<emphasis>(skipped...)</emphasis>
</screen>
<para>Από την άλλη, για μια σύνδεση που ενεργοποιήθηκε με το
&man.ppp.8; (<emphasis>user-ppp</emphasis>) θά πρεπε να δείτε κάτι
παρόμοιο με το παρακάτω:</para>
<screen> &prompt.user; <userinput>ifconfig</userinput>
<emphasis>(skipped...)</emphasis>
ppp0: flags=<replaceable>8010&lt;POINTOPOINT,MULTICAST&gt; mtu 1500</replaceable>
<emphasis>(skipped...)</emphasis>
tun0: flags=<replaceable>8051&lt;UP,POINTOPOINT,RUNNING,MULTICAST&gt; mtu 1524</replaceable>
<emphasis>(IPv6 stuff skipped...)</emphasis>
inet <replaceable>xxx.xxx.xxx.xxx</replaceable> --&gt; <replaceable>xxx.xxx.xxx.xxx</replaceable> netmask <replaceable>0xffffff00</replaceable>
Opened by PID <replaceable>xxxxx</replaceable>
<emphasis>(skipped...)</emphasis></screen>
</answer>
</qandaentry>
</qandaset>
</sect1>
</article>