[LinuxFocus-icon]
�����  |  �����  |  ������  |  �����

������� | ������ | ������ | ��� LF
��� �������� �������� �� ��������� ������: English  Castellano  ChineseGB  Deutsch  Francais  Nederlands  Russian  Turkce  

Vincent Renardias
����� Vincent Renardias
<vincent(at)renardias.com>

�� ������:

������������ GNU/Linux � 1993, ������� ��������� (Vincent Renardias) ����� ���������� ��� ����������� � 1996: ����������� Debian, ����������� ���������� ��������� GIMP � �������� ����� GNOME, ���������� ������ ������������� Linux User Group � ������� (PLUG)... ������, ����������� �������� R&D EFB2, �� ���������� ���������� GNU/Linux.



������� �� �������:
������� ������ <gooamoko(at)rambler.ru>

����������:

 

���������� ������� � Linux

[Illustration]

������:

������ ������ ������� ���� ������������ � ����������� ������� Linux Magazine France, ��������������� �� ������������. ��������, ������ � ����������� ������� ��������� LinuxFocus ����������� ��� ������ �� ����� ������������ �������. �������������� LinuxFocus �������� �� ��� ����� �� ����� �������� �� ����������. ������� ����, ��� �������� � ��� ������. ������ ������ ����� �������������� �� ���� �������, ������� �� �� �������������.


���� �� ������� ����� ������������� ������� ��������� - ��� ����������, ������� ���������� � ����. ��� ������ ������ ��������� ����������, ������������� � �������� ����������� (firewall).
� ������ ������ �� ����������� ����������� ���� ��� ������������� � ���������������� ����� �������.


_________________ _________________ _________________

 

����, Arp-������ ��� ������� ����?

�������� ���������� ����� ���� ���������� ��� ����, ������� ����� ����������� ��������� ������������� ������. �������� ����� ����� ���������� ������ ����� (������ ����) � ���������� ����� ��� ��������� ����.

������������ ����������� � ����
Firewall location

����� ����������� �������� ��� � ��������� ������������ ���������� ������� ������� �������, �� ������ ���� ��������� �������� ����� ���������� ����� � "������� �����". ����������� ��� �������������� ��� ������ ����������, �������� ��� ������� ���������� (������ Ethernet), ���� �� ������� ��������� � ���������� ����, � ������ - � ��������������, ����� ������� �������������� ������ � ������� ����. ����� �������, ������������ ������ ����� ���� ����� ����������, ������� ����� ��� �� ����� ����������� �� � ����������� �� �� ����������.
���������, �������������� ����������, ����� ���� �������� ����� ������� ������:

- "�������" ����: ��� �������� ����� ������������ ������������. ��������� ������������ ��� ���� ����� ����� ������ ��� ���������. ���������� ��������� ���� ������ ���� ��������� �� ������������� ����������� ������ �������������� � �������� �������� �� ��������� (��������� �����).

- ���� "ARP-������": ���������� ������������ ������������� ������� ���� �� ��� �������, ������� �������� � ������ �������� ��������� ��� ���� IP �������. ��� ������� ����������. ��������, �� 16-�� �������� ������� (� 28 ������ ������ �������), ������ 14 ��������, � ��� ��� ��� ������������ ����� ���� � ����������������� �����. �������� �ݣ ���� ��� � ����� �������, �� ��������� ��������� ������ � 14 �� 6 (8 ������� �� ������� ������ ���� � ������������������ ������). ����� �� �� ������ ��������� ������ �������� ��������� IP-�������, �� ������ ������������ ������ �������, ������� ����������� ����� � ���� ������. ����� ����, ������ ������� �� ������� �����-���� ��������� � ��������� ���� �� �� ��������������, �� �� ���������� �����������.

- ���� Ethernet: ������������ ���� Ethernet (�� IP ����), ������ �������� ���������� ��������� � ������ �����������. ����� ������������ ����� ���� ��������� ��� ���������� IP ������� Ethernet-�����������. � ����� ������, ���������� ���������� ���������� ��� ������ ping, traceroute � �.�. ������� ��������, ��� ���������� ���������� ������� � ����� ������������ ������� ���� ������ 2.2.x, � ������� ������ ������� �� ���� ������ 2.4.x ���� �� ��������.

 

���������� ������� ����������

������, ����� �� ����� ��� ���������� ��� ������, �� ������ ����������, ��� �� ������ ����� ����������� ��� ��� �� ������ ����� ����������.
���� ��� ���� ��������� ������ �������:

- ������, �������: ����������� ��� ������, ����� ���, ������� ������������� ��������.
- ������, ������: (�� � ���������, ����� ������������) ���� ����������� ������ �������������, � ��� ��������� ������������.

��� ������ �����������: � ������ ������, ��������� (���������) ������ �������� � ��������� ������ ������ ��� ������ ����� �����������������. ������ ��� ������ ���������� � ������������ ���������� ������, ����������� ��� ������������� ������.
�� ������ ������, ��������� (���������) ������ ������� ������������� ����������, ������� ����� ����� ������ �������... ���� ����� ������.

 

Netfilter

�������� ����� ������������ ����������� ����������� ��� ���������� ������� � Linux - ��� Netfilter; ��� �������� ������ 'ipchains', ������������ � Linux � ����� 2.2. Netfilter ������ �� ���� ������: ��������� ����, ������� ������ ���� �������������� � ����� ���� � ������� 'iptables' ������� ������ ���� �������� � ����� �������.

 

������ ���������

���������������� ������ �����, ��� ������� ����. ����� �� ������, ��� ���������� � ��������� �������� ����������. ��� ������, ��������� ����� ��������������� ��� ����, ������������ ARP-������ ��� ����������� ����� IP-�������, � ����� �� �������� ������� ����������.

����� ������ ������������ ������������ Debian ��� ��������� ����� �������, �� ���������� ����� ���� �������� ����� ������ �����������.

��-������, ��������, ��� ���� ���� ������������ Netfilter. ���� ��� ���, �� ����������� ������ ������ ���������:

ip_conntrack (4095 buckets, 32760 max)
ip_tables: (c)2000 Netfilter core team

�����, ��� �������� ����������������� ���� ����� ����������� ��������� Netfilter. ��������������� ����� ����� ���� ������� � ������� "Network Packet Filtering" ���� "Networking Options". �������� ����������� ����� � ������ "Netfilter Configuration". ���� �� ������������, ������ ������� ��� �����, ����� ����, ����� �������� Netfilter � ���� � �� ������������ ������. ���� �� �����-�� �������� ���� �� ������� Netfilter ��� �������� ��� �� ��������, ���������� �������� �� ����� � �� ����� �� ����� �������� � �����, ������� ��������������� � ������ ������.

�� ��� �� ������ ���������� ����� 'iproute2' (��������� �� �����������, �� ��� ������ ����� ������������ ������ �����, ��� ��� ������ ����� ��������� ������� ���������������� ������ (��������) �����). � ������������ Debian, ��� ��������� ������ 'iproute2' ���������� ������� ������� 'apt-get install iproute'.
� ������ �������������, ������� ��������������� ������. ���������� �� ����� ������� ����� ��� �� �������� �����, ������� ����� ��������� �� ���������� ������:
ftp://ftp.inr.ac.ru/ip-routing/

������ ������ ���� ���������������� ��� Ethernet �����. �� ������ �������� ���� �������� �� ��, ��� ���� Linux, ����� ���������� ��������������� ������������, ������������� ����� ������� ���� ��� ������ ������ ������. ��������������, ����������� ������ ������.
������ ������� ���� �������� ������� � ���������� ��������� ������ � ���� lilo.conf:
append="ether=0,0,eth1"

������ �� ������ ��������� Ethernet-����������. ��������� ���� ����� ��������� ������������ ���� � ��� �� IP-����� ��� ����� ����, ��������, ����� �������, ���� �����.
��������, ��� � ��� ���� ������� 10.1.2.96/28, ������ ������� ���������� � 10.1.2.96 �� 10.1.2.111 ������������. ������������� ����� ����� ����� 10.1.2.97, � ��� ��������� ��� ���������� - 10.1.2.98. ��������� eth0 ����� ��������� � �������������� ����� �������������� ������ RJ-45, ���� ��� ����� ��������� ��������, ��� ������������� ���� (hub) ��� ������ (switch); ��������� eth1 ����� ��������� � ����/������, � ������ - � ����������� ��������� ����.

��������������, ��� ���������� ����� ���������������� �� ���������� �����������:

address  : 10.1.2.98
netmask  : 255.255.255.240
network  : 10.1.2.96
broadcast: 10.1.2.111
gateway  : 10.1.2.97

����� ���������� ��������� ������ (��������), ������� ������ ����������� ����� ��������� ������������ ������� ���� ��� ���������� ���������.

net.vars: configuration variables

PREFIX=10.1.2
DMZ_ADDR=$PREFIX.96/28
# Interface definitions
BAD_IFACE=eth0
DMZ_IFACE=eth1
ROUTER=$PREFIX.97


net-config.sh: network configuration script

#!/bin/sh
# Comment out the next line to display the commands at execution time
# set -x
# We read the variables defined in the previous file
source /etc/init.d/net.vars
# We remove the present routes from the local network
ip route del $PREFIX.96/28 dev $BAD_IFACE
ip route del $PREFIX.96/28 dev $DMZ_IFACE
# We define that the local network can be reached through eth1
# and the router through eth0.
ip route add $ROUTER dev $BAD_IFACE
ip route add $PREFIX.96/28 dev $DMZ_IFACE
# We activate Proxy-ARP for both interfaces
echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp
echo 1 > /proc/sys/net/ipv4/conf/eth1/proxy_arp
# We activate the IP forwarding to allow the packets coming to one card
# to be routed to the other one.
echo 1 > /proc/sys/net/ipv4/ip_forward

������, ������� �������� � ���������� ��������� ARP-������ ��� ����� ������������.
��� ���� ����� ���� ��������� ��� "��������" � ������ � ��� �� ����, ��� ���������� ����� Ethernet ����� (��� MAC ����� ��� ���������� �����), ���������� ��� IP-������. ����� ���������-�������� ���������� ������: "����� MAC-����� ����������, �������� IP-����� 1.2.3.4 ?" � ���������-�������� ������ ��������.

��� ������ ������ "�������", ������������� ��� ������ tcpdump:
- ������: ��������� 172.16.6.72 ���������� MAC-�����, ������������ IP-������ 172.16.6.10.
19:46:15.702516 arp who-has 172.16.6.10 tell 172.16.6.72
- �����: ��������� 172.16.6.10 ������������� ���� ����� ������� �����.
19:46:15.702747 arp reply 172.16.6.10 is-at 0:a0:4b:7:43:71

��� �������� ��� � ���������� ��������� ����������: ARP-������� �������������� ��� ������ ����������������� ��������, ������������ ������ ����� ���������� �����. ����� �������, ������ �� ����������� ���������� �� ���������� MAC-������ ��������������, ������ ���� ���������� ����������� �����������. ��������� ������������ ARP-������ ��������� ������ ��� ��������, ��� ��� �� ����� ���������� ARP-�������.

�� ������ ������, �� ������ ����� ���������� ���� � �����������, ����������� ���� �������� ����� ��������� � ������� �����.

������, �� ������ ��������� ���������� ��������� Netfilter.
Netfilter ��������� ����������� ��������������� �� ����� �������. � ���������� ������������, ������ ����������� ����� ��������� ������:
- INPUT: ��� �������, �������� ����� ���������,
- FORWARD: ��� ���� �������, ������������ �� ������ ���������� � �������,
- OUTPUT: ��� �������, ��������� ����� ���������.

������� 'iptables' ��������� ���������, �������� � ������� ������� � ������ �� ���� ������� ��� ��������� ��������� ����������.
����� ����, ������ ������� ����� �������� �� ���������, ������� ���������� �������� � ������, ����� ����� �� ������������� �� ������ ������� � �������.

������ �������� ���������������� ������� - ���:
- ACCEPT: ������ ��������� ���������,
- REJECT: ����� ����������� � ���������� �����, ��������� � ������� (ICMP Port Unreachable, TCP RESET, � ����������� �� ��������),
- LOG: ���������� ������ ������� � ��������� ������,
- DROP: ����� ������������ � ����� �� ����������.

������ ������� ����� ����������� �������

Packet flow

��� ������� ����� iptables, ����������� ��������� ���������. �� ������������ �� �����:

-N: ������� ����� �������.
-X: ������� ������ �������.
-P: �������� �������� ������� �� ���������.
-L: ������� ������ ������ � �������.
-F: ���������� ��� ������� � �������.
-Z: ������� ����� � �������� �������, ��������� ����� �������.

��� ��������� ������� �������� ��������� �������:
-A: ��������� ������� � ����� �������.
-I: ��������� ����� ������� � �������� ������� � �������.
-R: �������� �������� ������� � �������.
-D: �������� ������� � �������, ��������� ���� ����� �������, ���� ��� ��������.

������� ���������� ��������� ������������ ������: �� ����������� ping-������ (��� ��� ICMP-������� 'echo-reply'), ������ �� ��������� ����������.
������� �������������, ��� �������� ��������� "���������" (�.�. �������� �� ������� ping):

# ping -c 1 172.16.6.74
PING 172.16.6.74 (172.16.6.74): 56 data bytes
64 bytes from 172.16.6.74: icmp_seq=0 ttl=255 time=0.6 ms

--- 172.16.6.74 ping statistics ---

1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.6/0.6/0.6 ms
������, ������� ������� (������� ������� ICMP-�����) � INPUT-������� ('-p icmp --icmp-type echo-reply') ��� �������, ������ � ���������� 172.16.6.74 ('-s 172.16.6.74'). ��� ������ ����� ��������������� ('-j DROP').
# iptables -A INPUT -s 172.16.6.74 -p icmp --icmp-type echo-reply -j DROP

������, ������� ����� "��������" ���� ���������:

# ping -c 3 172.16.6.74
PING 172.16.6.74 (172.16.6.74): 56 data bytes

--- 172.16.6.74 ping statistics ---

3 packets transmitted, 0 packets received, 100% packet loss

��� �� � ����� �������, ������ �� ������. �� ����� ���������, ��� ��� ������ ���� ������������� (3 ������ ��� 252 �����):

# iptables -L INPUT -v
Chain INPUT (policy ACCEPT 604K packets, 482M bytes)
 pkts bytes target     prot opt in    out     source       destination
  3   252   DROP       icmp --  any   any     172.16.6.74    anywhere

����� ������� ��� ��� ����, ��� ���� ������ ������� ������ ������� �� ������� INPUT:

# iptables -D INPUT 1

������, PING ���������� �����:

# ping -c 1 172.16.6.74
PING 172.16.6.74 (172.16.6.74): 56 data bytes
64 bytes from 172.16.6.74: icmp_seq=0 ttl=255 time=0.6 ms

--- 172.16.6.74 ping statistics ---

1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.6/0.6/0.6 ms
#

��������!

�� ������ �������� ������ ������� � ���� ���������� ������������ (������� �� �� ������� ������� � ����� ������) � ������� ����� ������� ���������� ����� ���. ��������, ����� ���� �������� �������� ������������ ������ � ��������� ��������.

������, ������� �������� ��������� ������� ��� ������������ �����������. �� ����� ��������� ssh, ������ �������� ���� (DNS), ������ http � smtp � ������ ������.
��� ���������, ������� ��������� �������� � �������� �������� (������), ���� ������� ������������ �����. �������� ������ ������� ������� ������������ ����� ���������� �����. ��� ��������� ������ ��������� ����������� ������� ��� �������� ������������ ��� ����� ������������ ������.

rc.firewall

#!/bin/sh

# Flushing out the rules
iptables -F
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD


# The chain is built according to the direction.
# bad = eth0 (outside)
# dmz = eth1 (inside)
iptables -X bad-dmz
iptables -N bad-dmz
iptables -X dmz-bad
iptables -N dmz-bad
iptables -X icmp-acc
iptables -N icmp-acc
iptables -X log-and-drop
iptables -N log-and-drop

# Specific chain used for logging packets before blocking them
iptables -A log-and-drop -j LOG --log-prefix "drop "
iptables -A log-and-drop -j DROP

# The packets having the TCP flags activated are dropped
# and so for the ones with no flag at all (often used with Nmap scans)
iptables -A FORWARD -p tcp --tcp-flags ALL ALL -j log-and-drop
iptables -A FORWARD -p tcp --tcp-flags ALL NONE -j log-and-drop

# The packets coming from reserved addresses classes are dropped
# and so for multicast
iptables -A FORWARD -i eth+ -s 224.0.0.0/4 -j log-and-drop
iptables -A FORWARD -i eth+ -s 192.168.0.0/16 -j log-and-drop
iptables -A FORWARD -i eth+ -s 172.16.0.0/12 -j log-and-drop
iptables -A FORWARD -i eth+ -s 10.0.0.0/8 -j log-and-drop

# The packets belonging to an already established connexion are accepted
iptables -A FORWARD -m state --state INVALID -j log-and-drop
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
# The corresponding chain is sent according to the packet origin
iptables -A FORWARD -s $DMZ_ADDR -i $DMZ_IFACE -o $BAD_IFACE -j dmz-bad
iptables -A FORWARD -o $DMZ_IFACE -j bad-dmz
# All the rest is ignored
iptables -A FORWARD -j log-and-drop

# Accepted ICMPs
iptables -A icmp-acc -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -A icmp-acc -p icmp --icmp-type source-quench -j ACCEPT
iptables -A icmp-acc -p icmp --icmp-type time-exceeded -j ACCEPT
iptables -A icmp-acc -p icmp --icmp-type echo-request -j ACCEPT
iptables -A icmp-acc -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A icmp-acc -j log-and-drop

# Outside -> Inside chain
# mail, DNS, http(s) and SSH are accepted
iptables -A bad-dmz -p tcp --dport smtp -j ACCEPT
iptables -A bad-dmz -p udp --dport domain -j ACCEPT
iptables -A bad-dmz -p tcp --dport domain -j ACCEPT
iptables -A bad-dmz -p tcp --dport www -j ACCEPT
iptables -A bad-dmz -p tcp --dport https -j ACCEPT
iptables -A bad-dmz -p tcp --dport ssh -j ACCEPT
iptables -A bad-dmz -p icmp -j icmp-acc
iptables -A bad-dmz -j log-and-drop

# Inside -> Outside chain
# mail, DNS, http(s) and telnet are accepted
iptables -A dmz-bad -p tcp --dport smtp -j ACCEPT
iptables -A dmz-bad -p tcp --sport smtp -j ACCEPT
iptables -A dmz-bad -p udp --dport domain -j ACCEPT
iptables -A dmz-bad -p tcp --dport domain -j ACCEPT
iptables -A dmz-bad -p tcp --dport www -j ACCEPT
iptables -A dmz-bad -p tcp --dport https -j ACCEPT
iptables -A dmz-bad -p tcp --dport telnet -j ACCEPT
iptables -A dmz-bad -p icmp -j icmp-acc
iptables -A dmz-bad -j log-and-drop

# Chains for the machine itself
iptables -N bad-if
iptables -N dmz-if
iptables -A INPUT -i $BAD_IFACE -j bad-if
iptables -A INPUT -i $DMZ_IFACE -j dmz-if

# External interface
# SSH only accepted on this machine
iptables -A bad-if -p icmp -j icmp-acc
iptables -A bad-if -p tcp --dport ssh -j ACCEPT
iptables -A bad-if -p tcp --sport ssh -j ACCEPT
ipchains -A bad-if -j log-and-drop

# Internal interface
iptables -A dmz-if -p icmp -j icmp-acc
iptables -A dmz-if -j ACCEPT

��������� ���� � �������� ������������. Linux ����� �������������� ���� ToS ("��� �������") � �������� ��� ��������, ����� ���� ������� ��������� ����������. ��������, ��������� ������� �������� ��������� SSH ������ ��� ��������� ������� ����������.

iptables -A OUTPUT -t mangle -p tcp --dport ssh -j TOS --set-tos Minimize-Delay

��� �� �����, ��� FTP ����������, �� ������ ������������ ����� '--set-tos Maximize-Throughput' ��� ��������� �������� ��������.

��� � �ӣ. ������, �� ������ ������ ��������� ������� ���������� �������. ������, ������ �����, ��� ���������� - �� �������, ����� ��������� ������������. ��� ����� ���� �ݣ ���� ����������������. ��������� ����������� �� ����������� ��� �� ������������� ������� ("�������") �������, ����� ��������� ������ �� ������������, ������ ����������� ��������� � �.�.

 

������ �� �������������� �������

 

�������� �������

� ������ ������� ���� �������� �������. �� ���� �������� �� ������ �������� ���� ����������� ��� ����������� ����������� ������ ��������� :
 talkback page 

Webpages maintained by the LinuxFocus Editor team
© Vincent Renardias, FDL
LinuxFocus.org
Translation information:
fr --> -- : Vincent Renardias <vincent(at)renardias.com>
fr --> en: Georges Tarbouriech <gt(at)linuxfocus.org>
en --> ru: ������� ������ <gooamoko(at)rambler.ru>

2003-05-24, generated by lfparser version 2.31