һ��Iptables�Ķ��弰�������
iptables �ǽ����� netfilter �ܹ����ϵ�һ������˹��?�ߣ�����Ҫ������������������ǽ�������?Iptables �� ipchains ��չ��������Ĺ��ܸ�Ϊǿ��Iptables �ṩ�������ֹ��ܣ�����ˡ�NAT�������ַת������ͨ�õ� pre-route packet mangling������ˣ��������˰��Dz��İ�����ݡ�Iptables �ڰ���˷�������� ipchians ����Ҫ�ŵ����ٶȸ�죬ʹ�ø�㡣NAT��NAT ���Է�ΪԴ��ַ NAT ��Ŀ�ĵ�ַ NAT��
Iptables �����ӡ������ɾ�����˹���ʵ��������ִ����Щ���ǹ������ netfilter �������ģ�飨�� iptables ģ��� nat ģ�飩��Netfilter �� Linux ������һ��ͨ�üܹ������ṩ��һϵ�е� ���?��tables����ÿ���������� ��������chains����ɣ���ÿ�����п�����һ�������� ������rule����ɡ�
iptables��4���?5���������б��ǰ��ն���ݰ�IJ�����ֵģ����ǰ��ղ�ͬ��Hook������ֵģ������ʵ������netfilter������ά�ȡ�
1��4����:
filter,nat,mangle,raw��
Ĭ�ϱ���filter��û��ָ�����ʱ�����filter�?��
��Ĵ������ȼ���raw>mangle>nat>filter��
filter��һ��Ĺ��˹���
nat:����nat���ܣ��˿�ӳ�䣬��ַӳ��ȣ�
mangle:���ڶ��ض���ݰ����
raw:������ߣ�����rawʱһ����Ϊ�˲�����iptables����ݰ�����Ӹ��ٴ��?�������
filter ���ϵͳ chain�� INPUT�����룩��FORWAD(��ǰ)��OUTPUT�������
nat ���ϵͳ chain�� PREROUTING��Ԥ���ࣩ��POSTROUTING��·��֮��OUTPUT�������
mangle ���ϵͳ chain�� PREROUTING��Ԥ���ࣩ��OUTPUT�������
2��5������
PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING��
PREROUTING:��ݰ����·�ɱ�֮ǰ
INPUT:ͨ��·�ɱ��Ŀ�ĵ�Ϊ����
FORWARDING:ͨ��·�ɱ��Ŀ�ĵز�Ϊ����
OUTPUT:�ɱ����������ת��
POSTROUTIONG:���͵���ӿ�֮ǰ��
ÿһ�����п�����һ������������ÿһ��������������ģ������ݰ�ͷ���������������������������ݰ�һ����ݰ��һ����ʱ��ϵͳ�ͻ�ӵ�һ������ʼ��飬���Ƿ��ϸù�������������� ������㣬ϵͳ����ݸ�����������ķ����������ݰ�����������������һ���������������ݰ��ϸ�������һ������Ļ���ϵͳ�ͻ��ݸ���Ԥ�ȶ���IJ������������ݰ�
����IPTABLES ���
��: iptables����ʹ�õ�����?filter��nat��mangle�������, �����ֻʹ�� filter ��, filter����Ĭ�ϱ�,������ʾ˵��.
��������: ����ӡ�ɾ����µȡ�
�������ڰ���˿������filter���е�INPUT��OUTPUT��FORWARD����Ҳ���Բ����û��Զ��������
����ƥ����������ָ�����ֹ���ƥ�䣬��IP��ַ���˿ڡ������͵ȡ�
Ŀ�궯����������ƥ��һ����ʱ������Ҫִ�е������õ��У�
ACCEPT�� �����ͨ��
DROP�� �����
һЩ��չ��Ŀ�껹�У�
REJECT: �ܾ�����ͬʱ�����߷���û�н��ܵ�֪ͨ��
LOG: ���й���Ϣ��¼����־��
TOS: ��д���TOSֵ��
REDIRECT: �ض���
redirect����ȫ����ת�����������õ���ת�ĵ�ַ�� �����·����������ӡ������������ĵ�ַ���п��Կ�����ת������ӵ�ַ�����ԣ�forward��Ӹ�Ч����forward����������Ҫʱ������ʹ��Request Dispatcher.forward()���������ң�����Ҳ����������ʵ�ʵ����ӡ�����Щ����£����磬��Ҫ��ת��һ������������ϵ���Դ�������ʹ�� HttpServletResponse.sendRequest()������
forward�������п���Ȩ��ת���ڿͻ����������ַ���в�����ʾ��ת���ĵ�ַ�����Dz���ı�Request��ֵ���������Ҫ����һ��ҳ�����ܴ��л�ȡ�µ���Ϣ�Ļ��������Request.setAttribute()������һЩ��־���������һ��ҳ���л�ȡ��
ʹFORWARD�����ܹ���Ч��2�ַ���:
��1��[root@rhlinux root]# vi /proc/sys/net/ipv4/ip_forward
[root@rhlinux root]# echo "1" > /proc/sys/net/ipv4/ip_forward
��2��[root@rhlinux root]# vi /etc/sysconfig/network
[root@rhlinux root]# echo "FORWARD_IPV4=true" > /etc/sysconfig/network
iptables���ʽ:
iptables [-t table] CMD [chain] [rule-matcher] [-j target]
��������:
-A �� -append ����ѡ��β����һ�����������
-D �� -delete ����ѡ��β��ɾ��һ�����߶�������
-R �� -replace ����ѡ�����滻һ��ƥ�����
-I �� -insert �Ը���Ĺ��������ѡ���в���һ�����߶��������������Ϊ1,������ͷ����
-L �� -list �г�ָ�����е����й���,���û��ָ����,���г����е����й���
-F �� -flush ���ָ�����ͱ��е����й���, ���粻ָ����,��ô��������������ա�
-N �� -new-chain ��ָ����һ���µ��û��Զ�����,����������������ͬ��
-X �� -delete-chain ɾ��ָ�����û�������,���豣֤���еĹ�����ʹ��ʱ����ɾ��,��û��ָ����,��ɾ�������û���.
-P �� -policy Ϊ������ָ��Ĭ�Ϲ���(����������),�û�������û��ȱʡ����,ȱʡ����Ҳʹ�������е����һ������,��-L��ʾʱ���ڵ�һ����ʾ.
-C �� -check ����İ��Ƿ���ָ�����Ĺ�����ƥ��.
-Z �� -zero ��ָ���������еĹ�����ֽ�(BYTE)����������.
-h ��ʾ������Ϣ.
����ƥ�������:
-p , [!] protocol ָ��Ҫƥ���Э��,������tcp, udp, icmp, all, ǰ!Ϊ����,��ʾ���Э���������Э��.
-s [!] address[/mask] ָ��Դ��ַ���ߵ�ַ��Χ.
-sport [!] port[:port] ָ��Դ�˿ںŻ�Χ,�����ö˿ں�Ҳ������/ETC/SERVICES�ļ��е�����.
-d [!] address[/mask] ָ��Ŀ�ĵ�ַ���ߵ�ַ��Χ.
-dport [!] port[:port] ָ��Ŀ�Ķ˿ںŻ�Χ,�����ö˿ں�Ҳ������/ETC/SERVICES�ļ��е�����.
-icmp-type [!] typename ָ��ƥ������ICMP��Ϣ����(����ʹ�� iptables -p icmp -h �鿴��Ч��ICMP������)
-o [!] interface name[+] ƥ�����Ķ�������ӿ�,��ѡ��ֻ�����OUTPUT,FORWARD,POSTROUTING���ǺϷ���.
����ƶ����ù���:
/etc/sysconfig/iptables �ļ��� iptables �ػ���̵��õ�Ĭ�Ϲ����ļ�.
����ʹ�����������ִ�й��IPTABLES����:
/sbin/iptables-save > /etc/sysconfig/iptables
Ҫ�ָ�ԭ���Ĺ����,����ʹ��:
/sbin/iptables-restore < /etc/sysconfig/iptables
iptables�����route������һ��,����֮��ͻ�ָ�,����:
[root@rhlinux root]# service iptables save
����ǰ���浽 /etc/sysconfig/iptables�� [ ȷ�� ]
��һ�ַ����ǣ�
/etc/rc.d/init.d/iptables ��IPTABLES�������ű�,����:
[root@rhlinux root]# /etc/rc.d/init.d/iptables save
����ǰ���浽 /etc/sysconfig/iptables�� [ ȷ�� ]
��ʵ��
���������
[root@rh34 root]# iptables -L -n
���г���/���е����й�����˷���ǽĬ��ʹ�õ���filter�?���ʹ�ô�����г�filter�����������ݣ�-n����ɼӿ���ʾ�ٶȣ�Ҳ�ɲ���-n����
[root@rh34 root]# iptables -F
�����Ԥ���filter�����й������еĹ���
[root@rh34 root]# iptables -X
�����Ԥ���filter��ʹ�����Զ������еĹ���
[root@rh34 root]# iptables -Z
����ָ���������е����а��ֽڼ��������㣩
------------------------------------------------------------
��������Ĭ�ϲ��ԣ�Ĭ���������У����߶������У�
[root@rh34 root]# iptables -P INPUT ACCEPT
[root@rh34 root]# iptables -P OUTPUT ACCEPT
[root@rh34 root]# iptables -P FORWARD ACCEPT
�����������ڲ�ͬ��������Ĭ��������ԣ���������Ӧ��DROP���ϸ������Ϸ���ǽӦ����DROPȻ���������ض���
---------------------------------------------------------------
��������ӹ�������������ǿ���ָ������ӿڣ����νӿ�ʱ�Ƚ�ʵ�ã���
[root@rh34 root]# iptables -A INPUT -i eth1 -j ACCEPT
[root@rh34 root]# iptables -A OUTPUT -o eth1 -j ACCEPT
[root@rh34 root]# iptables -A FORWARD -i eth1 -j ACCEPT
[root@rh34 root]# iptables -A FORWARD -o eth1 -j ACCEPT
--------------------------------------------------------------
ʹ���û��Զ�������
[root@rh34 root]# iptables -N brus
������һ���û��Զ������brus������
[root@rh34 root]# iptables -A brus -s 0/0 -d 0/0 -p icmp -j DROP
���ڴ�����������һ������
[root@rh34 root]# iptables -A INPUT -s 0/0 -d 0/0 -j brus
����Ĭ�ϵ�INPUT�����һ������ʹ���а���brus�Զ��������?
----------------------------------------------------------------
��ƥ�����ʵ��
ƥ��Э�飺
iptables -A INPUT -p tcp
��ָ��ƥ��Э��ΪTCP��
iptables -A INPUT -p ! tcp
��ָ��ƥ��TCP�����Э�飩
ƥ���ַ��
iptables -A INPUT -s 192.168.1.1
��ƥ������
iptables -A INPUT -s 192.168.1.0/24
��ƥ�����磩
iptables -A FORWARD -s ! 192.168.1.1
��ƥ�����������
iptables -A FORWARD -s ! 192.168.1.0/24
��ƥ����������磩
ƥ��ӿڣ�
iptables -A INPUT -i eth0
iptables -A FORWARD -o eth0
��ƥ��ij��ָ���Ľӿڣ�
iptables -A FORWARD -o ppp+
��ƥ����������Ϊppp�Ľӿڣ�
ƥ��˿ڣ�
iptables -A INPUT -p tcp --sport www
iptables -A INPUT -p tcp --sport 80
��ƥ�䵥һָ��Դ�˿ڣ�
iptables -A INPUT -p ucp --dport 53
��ƥ�䵥һָ��Ŀ�Ķ˿ڣ�
iptables -A INPUT -p ucp --dport ! 53
��ָ���˿����⣩
iptables -A INPUT -p tcp --dport 22:80
��ָ���˿ڷ�Χ����������ʵ�ֵ���22��80�˿ڣ�
---------------------------------------------------------------------------------
������չ�Ĺ��ƥ�䣺
��ϣ����ƥ��ļ�Ҫ˵������ʹ�ã� iptables -m name_of_match --help��
��˿�ƥ����չ��
iptables -A INPUT -p tcp -m multiport --source-port 22,53,80
��ƥ����Դ�˿ڣ�
iptables -A INPUT -p tcp -m multiport --destination-port 22,53,80
��ƥ����Ŀ�Ķ˿ڣ�
iptables -A INPUT -p tcp -m multiport --port 22,53,80
��ƥ�����˿ڣ�������Դ����Ŀ�Ķ˿ڣ�
--------------------------------------------------------------------------------
limit����ƥ����չ��
[root@redhatlinux9 root]# iptables -A FORWARD -m limit --limit 300/hour
����ʾ����ÿСʱ����ͨ��300����ݰ�
[root@redhatlinux9 root]# iptables -A INPUT -m limit --limit-burst 10
��--limit-burstָ������ʱ���ֵ(Ĭ��Ϊ5)�������ȶ�˲�������ݰ����������
����������������ȶ�һ��ͬʱӿ�����ݰ��Ƿ�ʮ������������İ�ֱ�ӱ�����
[root@redhatlinux9 root]# iptables -A FORWARD -p icmp -m limit --limit 3/m --limit-burst 3
���������ͨ��ƽ��ÿ����3������ô����ֵburst����Ϊ3�����ÿ����ͨ��İ����ĿС��3����ô����ֵbusrt����ÿ������(��ÿ��������ͨ��3������������Ϊ20��)���1�������ֵΪ3��ÿ����Ҫͨ��İ���������3����ô����ֵbusrt��������������ֵ������ڶ�������4������ô����ֵ��Ϊ2��ͬʱ4�������ͨ����������6������ֻ��ͨ��5��������ֵbusrt��Ϊ0��֮��ÿ������������С�ڵ���3������ֵbusrt����1�����ÿ���Ӱ������3������ֵbusrt�����٣�����ά��Ϊ0��
����ÿ�����������������������������(������Ϊ3)���ϵ�ǰ�Ĵ���ֵbusrt���κ�����£������Ա�֤3����ͨ���ֵbusrt�൱�����������İ�������
iptables�������������Linux�İ���˹�������ʵ�ַ���ǽ��NAT��զһ��iptables�����úܸ��ӣ����չ��ɺ���ʵ��iptables���ָ�������ѣ���������ͨ�����ʵ��ѧϰiptables����ϸ�÷���
�ġ�iptables����ϸ�÷�
1.ɾ�����й���
�����趨iptables����ʱ������һ����ȷ���ɹ�������������������ɹ���
iptables -F (or iptables --flush)
2.����chain����
����filter table��Ĭ�ϵ�chain����ΪACCEPT�����ǿ���ͨ������������chain�IJ��ԣ�
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
�����������ý����ա�ת���ͷ��������ʩ�бȽ��ϸ�İ���?���ڽ��պͷ��������Ϊ������һ��������������ʱ����Ҫע�����INPUT��OUTPUT�ֱ����á���Ȼ��������α��������ⷢ�����ϵ���������ɲ������á�
3.����ָ��ip
��ʱ�����Ƿ���ij��ip��ͣ���������������ʱ���ǿ���ʹ�����������ָ��ip�����İ���
BLOCK_THIS_IP="x.x.x.x"
iptables -A INPUT -i eth0 -p tcp -s "$BLOCK_THIS_IP" -j DROP
�����������ý���x.x.x.x ip����eth0��ڵ�tcp����
4.���÷�����
����iptables�����ǿ��Զ��ճ��õ��ķ�������а�ȫ���?�����趨ֻ��ͨ��ָ����Ρ���ָ�����ͨ��SSH���ӱ���
iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLESHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
��Ҫ֧���ɱ���ͨ��SSH������������������ڱ���˿ڽ������ӣ������Ҫ�������¹���
iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 22 -m state --state ESTABLESHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
���Ƶģ�����HTTP/HTTPS(80/443)��pop3(110)��rsync(873)��MySQL(3306)�Ȼ���tcp���ӵķ���Ҳ���Բ��������������á�
���ڻ���udp��dns����ʹ������������˿ڷ���
iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT
5.���ת������
������������ǽ����صķ�������һ��������ӵ�����������ڵİ�ת���������ʵ����������ͨ�ţ�����eth0��������eth1���ӹ������ù������£�
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
6.�˿�ת������
���ڶ˿ڣ�����Ҳ��������iptables���ת�����ã�
iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 192.168.102.37:22
�������422�˿ڵİ�ת����22�˿ڣ����ͨ��422�˿�Ҳ�ɽ���SSH���ӣ���Ȼ����422�˿ڣ�����Ҳ��Ҫ�����ϡ�4.���÷����һ��һ��������֧�����ӽ����Ĺ���
7.DoS��������
������չģ��limit�����ǻ���������iptables����ʵ��DoS����������
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
--litmit 25/minute ָʾÿ�����������������Ϊ25
--litmit-burst 100 ָʾ�����������100ʱ������ litmit/minute ����
8.����web�������
���ǿ��Խ�һ̨��������Ϊǰ�˷�����������iptables���������ַ������÷������£�
���ƴ���
iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:80
iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.102:80
iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.103:80
���ƴ���
�������ù����õ�nth��չģ�飬��80�˿ڵ���������̨��������
9.����������������־
ʹ��LOGĿ���syslog�������ǿ��Լ�¼ijЭ��ij�˿��µ��շ���������ü�¼��������������ͨ�����·�ʽʵ�֡�
�����Զ���һ��chain��
iptables -N LOGGING
��ν����н��հ���LOGGING chain�У�
iptables -A INPUT -j LOGGING
Ȼ��������־ǰ����־����
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7
�����DROP��������
iptables -A LOGGING -j DROP
���������syslog.conf�ļ���ָ��iptables����־�����
���ij��� ��Linux�� ���ͣ�ת������������ϵ��