1.在Linux是使用内核内建的Netfilter这个机制来进行数据包过滤,而Netfilter提供了iptables这个软件来作为防火墙数据包过滤的命令。
2.防火墙的规则,根据数据包的分析资料“比对”预先定义的规则内容,若数据包数据与规则内容相同则进行动作,而不管后续的规则如何,否则就继续下一条规则的比对,直到规则比对完毕,则按照默认规则进行动作。因此防火墙添加的规则顺序十分重要。
在iptables的处理过程中,最好将相关文件写入脚本中。由于linux内核对网络功能也有和很多相关的攻击阻挡机制,这些设置数据主要是放置在/proc/sys/net/ipv4这个目录下,在设置iptables前可先将这些设置启动(也可写入/etc/sysctl.conf中):
----写入/etc/sysctl.conf
net.ipv4.tcp_syncookies = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf..... = 1(将conf内的所有选项设置成1)
----直接启动:
echo "1">/proc/sys/net/ipv4/tcp_syncookies
echo "1">/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo.......(参考附件中鸟哥的iptables.rule)
3.iptables内有多个表格,每个表格都定义出自己的默认策略和规则,且每个表格的用途不相同。
默认情况下,iptables有至少有三个表格:
管理本机进出的Filter
管理后端主机的NAT
管理特殊标志使用的Managle(较少使用)。
另外还可以自定义额外的链。
4.表格table与链chain的关系(以下主要对Filter和NAT进行讲解)。
----Filter(过滤器):主要跟进出Linux本机的数据包有关,是默认的table:
INPUT:主要与想要进入Linux本机的数据包有关
OUPUT:主要与Linux本机所要送出的数据包有关
FORWORD:与Linux本机没有关系,它可以传递数据包到后端的计算机中,与NAT的table相关性较高。
----NAT(网络地址转换):主要用于来源与目的地的IP或port的转换,与Linux本机无关,主要与Linux主机后的局域网计算机有关
PREROUTING:在进行路由判断之前所要进行的规则(DNAT/REDIRECT)
POSTROUTING:在进行路由判断之后所要进行的规则(SNAT/MASQUERADE)
OUTPUT:与发送出去的数据包有关
5.iptables规则的处理:
----iptables的查看:
iptables -t nat -L -n
iptables-save //能列出完整的防火墙规则,推荐
----iptables的清除:
iptables -t tables-F(清除所要的已制定的规则)
iptables -t tables -X(清除自定义的chain)
iptables -t tables -Z(将所要的chain的计数和流量统计归零)
----定义默认策略:
iptables -t [filter/nat] -P [INPUT/OUTPUT/FORWORD] [DROP/ACCEPT]
----Filter表规则的添加:
iptables [-AI 链名] [-io 网络接口] [-p 协议] [-s 源IP或源网络] [--sport 源端口范围] [-d 目标IP或网络] [--dport 目标端口范围]
[-m state] [--state 状态] -j [ACCEPT|DROP|REJECT|LOG]
选项参数说明:
-A:在链中新增一条规则,放在最后面。
-I:在链中插入一条规则,放在最前面。
链名:INPUT/OUT/FORWORD,同时与-io有关
-i:数据包要进入的网络接口
-o:数据包所传出的那个网络接口
-p:主要的数据包格式有:tcp.udp.icmp,all
-s:来源IP或网络,若规范为“不许”,则加上“!”即可
-d:目标IP或网络,同-s
-j:后面接的操作,主要为接受,丢弃(直接丢弃,不通知),拒绝(丢弃,同时通知客户端)及记录(记录在日志/messages中,这是唯一一个能够在规则匹配的情况下,继续往后比对的情况)
--sport/dport:其格式可以为20,21(20和21端口)或 20:25(20到25端口)
当-p为icmp时,可以针对其类型进行设置:。。。。。-p icmp --icmp-type 0/3/4/5/8 。。。。。。
-m:一些iptables的外挂模块,常见的有:state、mac等
--state:当-m设置成state时,采用此参数来设置数据包的状态:
INVALID:无效的数据包
ESTABLISHED:已经成功的连接状态
NEW:想要新建立连接的数据包状态
RELATED:这个是最常见的,表示这个数据包是主机发送出去的数据包相关
----NAT表的添加:
----IP分享器:让-s中的IP伪装成数据包出去(-o)的那款设备上的IP
echo "1" > /proc/sys/net/ipv4/ip_forward //让Linux具有route的功能
iptables -t nat -A POSTROUTING -s 来源IP/网络 -o 网络接口 -j MASQUERADE
----直接修改来源数据包的IP
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source xxxxxxxx //可以是固定IP,也可以是一个范围
----将外部数据包通过NAT机制传到到内网中的主机上
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80 //可以传导到其他ip及其其他端口
--在本机上面继续port转换,只适用于PREROUTING和OUTPUT链
iptables -t nat -A PREROUTING -p tcp -dport 80 -j REDIRECT --to-ports 8080
##PREROUTING与DNAT有关,POSTROUTING与SNAT有关
整理自:鸟哥的linux私房菜服务器篇
另外可参看:http://wenku.baidu.com/view/19bca0235901020207409c84.html
附:
iptables.rule####iptables.rule #!/bin/bash # �先�入您的相�P��担�不要�入�e�`了! EXTIF="eth0" # �@��是可以�B上 Public IP 的�W路介面 INIF="eth1" # �炔� LAN 的�B接介面;若�o�t��成 INIF="" INNET="192.168.100.0/24" # 若�o�炔烤W域介面,�填��成 INNET="" export EXTIF INIF INNET# 第一部份,��Ρ�C的防火���O定!########################################## # 1. 先�O定好核心的�W路功能: echo "1" > /proc/sys/net/ipv4/tcp_syncookies echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts for i in /proc/sys/net/ipv4/conf/*/{rp_filter,log_martians}; do echo "1" > $i done for i in /proc/sys/net/ipv4/conf/*/{accept_source_route,accept_redirects,\ send_redirects}; do echo "0" > $i done # 2. 清除��t、�O定�A�O政策及�_放 lo �c相�P的�O定值 PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin; export PATH iptables -F iptables -X iptables -Z iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # 3. ��宇~外的防火�� script 模�M if [ -f /usr/local/virus/iptables/iptables.deny ]; then sh /usr/local/virus/iptables/iptables.deny fi if [ -f /usr/local/virus/iptables/iptables.allow ]; then sh /usr/local/virus/iptables/iptables.allow fi if [ -f /usr/local/virus/httpd-err/iptables.http ]; then sh /usr/local/virus/httpd-err/iptables.http fi # 4. 允�S某些�型的 ICMP 封包�M入 AICMP="0 3 3/4 4 11 12 14 16 18" for tyicmp in $AICMP do iptables -A INPUT -i $EXTIF -p icmp --icmp-type $tyicmp -j ACCEPT done # 5. 允�S某些服�盏倪M入,�依照你自己的�h境�_�� # iptables -A INPUT -p TCP -i $EXTIF --dport 21 --sport 1024:65534 -j ACCEPT # FTP # iptables -A INPUT -p TCP -i $EXTIF --dport 22 --sport 1024:65534 -j ACCEPT # SSH # iptables -A INPUT -p TCP -i $EXTIF --dport 25 --sport 1024:65534 -j ACCEPT # SMTP # iptables -A INPUT -p UDP -i $EXTIF --dport 53 --sport 1024:65534 -j ACCEPT # DNS # iptables -A INPUT -p TCP -i $EXTIF --dport 53 --sport 1024:65534 -j ACCEPT # DNS # iptables -A INPUT -p TCP -i $EXTIF --dport 80 --sport 1024:65534 -j ACCEPT # WWW # iptables -A INPUT -p TCP -i $EXTIF --dport 110 --sport 1024:65534 -j ACCEPT # POP3 # iptables -A INPUT -p TCP -i $EXTIF --dport 443 --sport 1024:65534 -j ACCEPT # HTTPS # 第二部份,���後端主�C的防火���O定!############################### # 1. 先�d入一些有用的模�M modules="ip_tables iptable_nat ip_nat_ftp ip_nat_irc ip_conntrack ip_conntrack_ftp ip_conntrack_irc" for mod in $modules do testmod=`lsmod | grep "^${mod} " | awk '{print $1}'` if [ "$testmod" == "" ]; then modprobe $mod fi done # 2. 清除 NAT table 的��t吧! iptables -F -t nat iptables -X -t nat iptables -Z -t nat iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P POSTROUTING ACCEPT iptables -t nat -P OUTPUT ACCEPT # 3. 若有�炔拷槊娴拇嬖� (�p�W卡) �_放成�槁酚善鳎�且�� IP 分享器! if [ "$INIF" != "" ]; then iptables -A INPUT -i $INIF -j ACCEPT echo "1" > /proc/sys/net/ipv4/ip_forward if [ "$INNET" != "" ]; then for innet in $INNET do iptables -t nat -A POSTROUTING -s $innet -o $EXTIF -j MASQUERADE done fi fi # 如果你的 MSN 一直�o法�B�,或者是某些�W站 OK 某些�W站不 OK, # 可能是 MTU 的���},那你可以�⒌紫逻@一行�o他取消�]解���� MTU 限制��� # iptables -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss \ # --mss 1400:1536 -j TCPMSS --clamp-mss-to-pmtu # 4. NAT 伺服器後端的 LAN ��ν庵�伺服器�O定 # iptables -t nat -A PREROUTING -p tcp -i $EXTIF --dport 80 \ # -j DNAT --to-destination 192.168.1.210:80 # WWW # 5. 特殊的功能,包括 Windows �h端桌面所�a生的��t,假�O桌面主�C�� 1.2.3.4 # iptables -t nat -A PREROUTING -p tcp -s 1.2.3.4 --dport 6000 \ # -j DNAT --to-destination 192.168.100.10 # iptables -t nat -A PREROUTING -p tcp -s 1.2.3.4 --sport 3389 \ # -j DNAT --to-destination 192.168.100.20 # 6. 最�K�⑦@些功能�Υ嫦�戆桑� /etc/init.d/iptables save