iptables可用操作 (1)-L : 显示所选链接的所有策略 : # iptables -L -n 查看iptables 策略 (2)-A : 在所选的链最尾部添加一条新的策略:# iptables -A INPUT -s 192.168.0.1 -j DROP (3)-D : 从所选链中删除策略,可以通过将策略的内容完整的写出来或指定在所愿链中的序号 # iptables -D INPUT 1 (4)-R:替换所选中的链里指定的策略:# iptables -R INPUT 1 -s 192.168.30.0 -j DROP(替换第一条) (5)-I: 从所选的链中指定策略前面插入一条新的策略 # iptables -I INPUT 2 -s 192.168.10.2 -j DROP (6)-F:清空所选链的策略,如果没有指定链,则清空指定表的所有链:# iptables -F INPUT (清空INPUT链) (7)-Z:将所选链的所有计数器归零,如果没有指定链,则将指定表所有链中计数器归零:# iptables -Z INPUT (8)-N:根据用户指定的名字建立新的链,在定义新链时所使用的名字不能和已有的链同名,数据包如果在自定义链里被匹配了就会被target/jump执行,如果没有被匹配则数据包将被送回调用自定义链的父链匹配 # iptables -N isok # iptables -A isok -p tcp -s 192.168.0.168 -j DROP # iptables -L -n Chain INPUT (policy ACCEPT) target prot opt source destination DROP tcp -- 172.28.10.0 0.0.0.0/0 tcp dpt:80 Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain isok (0 references) target prot opt source destination DROP tcp -- 192.168.0.168 0.0.0.0/0 (9)-X:删除指定的用户自定义的链。在删除这个链必须没有被引用,如果没有指定链名称,则删除所有自定义的链,如果没有指定表及链则删除默认表中左右自定义的链 # iptables -X isok ( iptables -X) (10)-E:对自定义的链进行重命名,该命令仅仅是改变自定义链的名字,对这个结构、工作没有任何影响 # iptables -E isok isallow (11)-P:为链设置默认的策略(如ACCEPT、DROP),所有不符合策略的数据包都被强制使用这个策略 # iptables -P INPUT DROP (12)--line-number:在显示策略时,输入序号,该参数只能和-L配合使用 # iptables -L --line-number (13)-s:匹配指定的IP源地址匹配数据包,指定网段为:# iptables -A INPUT -s 192.168.1.0/24 -j DROP (14)-d:匹配指定的IP目标地址匹配数据包,指定网段:# iptables -A INPUT -d 192.168.1.0/24 -j DROP (15)-i:<网络接口>:以数据包进入本地所使用的网络接口来匹配数据包,这个匹配操作只能用于 INPUT、FORWARD和PREROUTING这3个链 1、指定时使用网络接口名称,比如eth0、ppp0 2、使用加号作为通配符时,如果直接用一个加号,比如iptables -A INPUT -i +表示匹配所有的包,而不考虑使用哪个接口,这也是用-i参数的默认行为。通配符还可以使放在某一类接口的后面, 比如eth+表示所有的Ethernet接口 3、在接口前加感叹号表示取反(注意空格),比如“-i!eth0”意思是匹配来自除eth0外的所有包 4、lo表示本地回环地址 # iptables -A INPUT -i eth0 -s 192.168.0.99 -j DROP(阻止从eth0进入的源IP地址为192.168.0.99的所有通信) (16)-o:<网络接口>:以数据包离开本地所使用的网络接口来匹配数据包,该参数配置方法与-i参数相同 # iptables -A OUTPUT -o eth0 -s 192.168.0.99 -j DROP (17)--sport<端口>:基于数据包的源端口来匹配数据包: 1、该参数必须与-p参数配合使用 2、不指定--sport参数时,表示所有端口 3、可以使用连续的端口,比如“--sport 1000:1024"表示从1000到1024的所有端口 (包括1000、1024),”--sport 1024:1000“和”--sport 1000:1024“的效果相同 4、当省略第一个冒号时,默认从端口0开始,比如”--sport:1000"表示从0到1000的所有端口 5、当省略第二个冒号时,默认是65535,比如“--sport 1000:"表示从1000到65535的所有端口 6、在端口号前加感叹号表示取反(在感叹号与端口号之间必须有空格),比如”--sport!1000" 表示除1000号外的所有端口,“--sport ! 1000:1024"表示从1000到1024的所哟偶端口(包括1000、1024)之外的所有端口 # iptables -A INPUT -p tcp --sport 1000 -j DROP(阻止源端口为1000的所有tcp通信) # iptables -A INPUT -p tcp --sport 1000:1024 -j DROP(阻止源端口大于等于1000且小于等于1024的所有tcp通信) (18)--dport:基于数据包的目的端口来匹配包,该参数配置方法与--sport参数相同 # iptables -A INPUT -p tcp --dport 1000 -j DROP (阻止目标端口为1000的所有tcp通信) # iptables -A INPUT -p tcp --dport 1000:1024 -j DROP (阻止目标端口大于等于1000且小于等于1024的所有tcp通信) (19)-m multiport --sport<端口>:源端口多端口匹配,最多可以使用15个端口,使用逗号分隔,该参数必须与-p参数配合使用 # iptables -A INPUT -p tcp -m multiport --sport 1000,1024,1025 -j DROP (阻止源端口为1000,1024,1025的所有tcp通信) (20)-m multiport --dport<端口>:目的端口多端口匹配,最多可以使用15个端口,以逗号隔开,该参数必须与-p参数配合使用 # iptables -A INPUT -p tcp -m multiport --dport 1000,1024 -j DROP(阻止目的端口为1000,1024的所有tcp通信) (21)-m multiport --port<端口>:同端口多端口匹配,通端口是指源端口和目的端口使用相同端口的数据包 (22)--tcp-flags<检查标记列表><条件列表>:匹配指定的tcp标记,有两个参数,它们都是列表,列表内部用英文的都好作为分隔符,这两个列表之间用空格分开,第一个参数指定需要检查的tcp标记,第二个参数指定”在第一个列表中出现过的且必须被设为1(即状态是打开的)的“标记(第一个列表中其他的标记必须设置0),也就是说第一个参数提供检查范围,第二个参数提供被设置的调价(就是哪些位置1).这个匹配操作可以识别SYN、ACK、FIN、RST、URG、PSH标记另外还可以使用ALL、NONE。ALL是指选定所有的标,NONE是指未选定任何标记,也可以在参数钱使用感叹号取反 # iptables -p tcp --tcp-flags SYN,ACK,FIN SYN -j DROP(阻止SYN标记被设置而FIN和ACK标记没有被设置的所有tcp通信) # iptables -p tcp --tcp-flags ALL NONE -j DROP (阻止所有标记没有被设置为1的所有tcp通信) # iptables -p tcp --tcp-flags ! SYN,FIN,ACK SYN -j DROP (阻止FIN、ACK被设置为而SYN没有被设置的所有tcp通信) (23)--syn:匹配SYN标记被设置而ACK和RST标记没有设置的数据包(该参数与”iptables -p tcp --tcp-flags SYN,ACK,RST SYN" 有相同的效果) (24)--icmp-type<类型数值>:根据ICMP类型匹配包,类型的指定可以使用十进制数值 # iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT # iptables -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT # iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT # iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT (25)--mac-source<MAC地址>:基于数据包的源MAC地址匹配数据包,只能在PREROUTING,FORWARD,INPUT链中使用 # iptables -A INPUT -m mac --mac-source 00:50:56:C0:00:01 -j DROP (26)--uid-owner<UID>:按生成包的用户ID(UID)来匹配数据包,如例阻止所有UID为555的用户向外的所有通信 # iptables -A OUTPUT -m owner --uid-owner 555 -j DROP (27)--gid-owner<GID>:按生成包的用户所在的组的ID(GID)来匹配数据包 # iptables -A OUTPUT -m owner --gid-owner 555 -j DROP (28)--sid-owner<SID>;按生成数据包的会话ID(SID)来匹配外出数据包(一个进程以及它的子进程或他的多个线程都有同一个SID) # iptables -A OUTPUT -m owner --sid-owner 178 -j DROP (29)--state<状态列表>:匹配数据包的状态,多个状态使用逗号分隔,例子将允许连接本机的FTP服务器 # iptables -A INPUT -p tcp --dport 21 -j ACCEPT # iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 例:# iptables -A INPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT (30)DNAT:用于进行目标网络地址转换,就是重写数据包的目标IP地址,如果一个数据包被匹配,那么和他属于同一个流的所有的包都会被自动的转换,然后就可以被路由到正确的主机或网络DNAT在实际工作中非常有用,比如一台Web服务器位于局域网,而且没有可在Internet上使用的真实 IP地址,这时就可以使用DNAT让防火墙把所有到它自己HTTP端口的包转发给局域网内部真正的Web服务器,目的地址也可以是一个范围,这样DNAT会为每一个流随机分配一个IP地址,DNAT只能在nat表的PREROUTING,OUTPUT链中使用,或是被这两条链调用的链中,DNAT需要使用--to-dest参数指定写入IP包头的地址(也就是数据包要被转发到的地方); 还可以再地址后指定一个活一个范围的端口,如 --to-dest 192.168.1.10:80或192.168.1.10:80-100 # iptables -t nat -A PREROUTING -p tcp -d 202.13.0.2 --dport 80 -j DNAT --to-dest 192.168.0.1-192.168.0.10 (意思是说外面要访问内部的web服务器,需要经过202.13.0.2:80端口来访问,经过这个ip时需要进行目标网络地址转换,每个数据流被随机分配一个要转发到的地址,但同一个数据流总是使用同一个地址,也可以只指定一个IP地址作为参数) (31)SNAT:用于进行源网络地址转换,就是重写数据包的源IP地址,SNAT需要使用--to-source参数指定写入IP包头的地址, SNAT的其他语法与DNAT相同,SNAT只能有nat表的POSTROUTING链使用 # iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source 202.103.0.2 (意思为当内网的ip:192.168.0.0/24网段要访问外网时需要将这些内网ip伪装成公网ip才可以访问到外部) (32)MASQUERADE:该目标与SNAT作用相同,只是使用该目标时不需要指明--to-source。MASQUERADE是专门设计用于那些动态获取IP地址的连接(比如拨号上网等),如果有固定的IP地址,可推荐直接使用SNAT(也可以使用MASQUERADE)和SNAT一样,只能用于nat表的POSTROUTING链,而且它只有一个参数(不是必需的)--to-ports用于指定端口,使用该参数时必需配合-p使用 # iptables -t nat -A POSTROUTING -p tcp -j MASQUERADE --to-ports 1024-5000 # iptables -t nat -A POSTROUTING -p tcp -s 192.168.0.0/24 -j MASQUERADE (33)REDIRECT:在防火墙所在的主机内部转发数据包或流到另外一个端口(比如把所有去往端口HTTP的包REDIRECT到HTTP代理,当然这都发生在主机内部,本地生成的数据包都会被映射到127.0.0.1,换句话说这个目标把要转发的数据包的目的地址改写为本机主机的IP,在实现透明代理时就需要使用该目标(局域网内的主机不需要知道代理服务器的存在就可以正常上网被称为透明代理)。该目标只能用在nat表的PREROUTING、OUTPUT链和被它们调用的自定义链REDIRECT只有一个选项--to-ports用于指定端口(可以使用--to-ports 8080-8888的方式指定一个端口范围)。 举个例子:将本机tcp的80端口收到的数据包转发到本机的8080端口 # iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080 (34)REJECT:REJECT和DROP作用相同,区别在于它除了阻止数据包之外,还向发送者返回错误信息,该目标只用用在INPUT、FORWARD,OUTPUT和它们的子链,而且包含REJECT的链也只能被它们调用,否则不能发挥作用,它只有一个选项--reject-with用于控制返回的错误信息的类型 # iptables -A FORWARD -p tcp --dport 22 -j REJECT --reject-with tcp-reset ##################### iptables策略配置方法 ######################### (1)使用命令:在使用命令修改了策略后,需要使用如下命令让策略永久生效 # service iptables save (2)使用脚本:另外一个方法让策略永久生效的,编写一个脚本将所有的策略放入脚本然后每次开机自动运行该脚本(/etc/rc.locl) #!/bin/sh # 清除filter、nat表的所有侧率及计数器 iptables -t filter -F iptables -t filter -Z iptables -t filter -X iptables -t nat -F iptables -t nat -Z iptables -t nat -X #定义filter、nat表默认策略 iptables -t filter -P INPUT DROP iptables -t filter -p OUTPUT DROP iptables -t filter -P FORWARD ACCEPT iptables -t nat -P OUTPUT ACCEPT iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P POSTROUTING ACCEPT #允许IP转发 /bin/echo "1" >/pro/sys/net/ipv4/ip_forward #载入内核模块 modprode ip_conntrack-ftp modprode ip_nat_ftp #允许本机的所有通信 iptables -t filter -A INPUT -i lo -j ACCEPT iptables -t filter -A OUTPUT -o lo -j ACCEPT #运行ping iptables -t filter -A INPUT -m icmp --icmp-type 8 -j ACCEPT iptables -t filter -A OUTPUT -m icmp --icmp-type 0 -j ACCEPT iptables -t filter -A INPUT -m icmp --icmp-type 0 -j ACCEPT iptables -t filter -A OUTPUT -m icmp --icmp-type 8 -j ACCEPT #允许查询本机的DNS服务 iptables -t filter -A OUTPUT -o eth0 -p udp --dport 53 -j ACCEPT iptables -t filter -A INPUT -i eth0 -p udp --sport 53 -j ACCEPT #允许访问本机的FTP服务 iptables -t filter -A INPUT -p tcp --dport 21 -j ACCEPT iptables -t filter -A OUTPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -t filter -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT #################################### 常见服务策略配置 ########################################## 下面是iptables中通过策略允许常见服务通信的例子,除特殊说明外都架设服务于防火墙在同一主机且filter表INPUT及OUTPUT链默认策略时DROP,如果将IPtables做为网关或其他情况可根据实现情况选择不同的表(下列策略都假设服务使用默认端口) (1)NTP服务 # iptables -A INPUT -p udp -s 192.168.0.0/24 --dport 123 -j ACCEPT # iptables -A INPUT -p udp -s 192.168.0.0/24 --dport 37 -j ACCEPT # iptables -A OUTPUT -p udp -d 192.168.0.0/24 --sport 123 -j ACCEPT # iptables -A OUTPUT -p udp -d 192.168.0.0/24 --sport 37 -j ACCEPT (2)FTP服务 # iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 21 -j ACCEPT # iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT # iptables -A OUTPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT # iptables -A OUTPUT -p tcp -d 192.168.0.0/24 --sport 21 -j ACCEPT (3)DHCP服务 # iptables -A INPUT -p udp -s 192.168.0.0/24 --dport 67 -j ACCEPT # iptables -A INPUT -p udp -s 192.168.0.0/24 --sport 68 -j ACCEPT # iptables -A OUTPUT -p udp -d 192.168.0.0/24 --dport 67 -j ACCEPT # iptables -A OUTPUT -p udp -d 192.168.0.0/24 --sport 68 -j ACCEPT (4)DNS服务 # iptables -A INPUT -p udp -s 192.168.0.0/24 --dport 53 -j ACCEPT # iptables -A INPUT -p udp -s 192.168.0.0/24 --sport 53 -j ACCEPT # iptables -A OUTPUT -p udp -d 192.168.0.0/24 --dport 53 -j ACCEPT # iptables -A OUTPUT -p udp -d 192.168.0.0/24 --sport 53 -j ACCEPT (5)Samba服务 # iptables -A INPUT -p udp -s 192.168.0.0/24 --dport 137:139 -j ACCEPT # iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 137:139 -j ACCEPT # iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 445 -j ACCEPT # iptables -A INPUT -p udp -s 192.168.0.0/24 --dport 445 -j ACCEPT # iptables -A OUTPUT -p udp -d 192.168.0.0/24 --sport 137:139 -j ACCEPT # iptables -A OUTPUT -p tcp -d 192.168.0.0/24 --sport 137:139 -j ACCEPT # iptables -A OUTPUT -p udp -d 192.168.0.0/24 --sport 445 -j ACCEPT # iptables -A OUTPUT -p tcp -d 192.168.0.0/24 --sport 445 -j ACCEPT (6)NFS 服务 1、在使用iptables允许NFS服务时需要修改/etc/sysconfig/nfs文件的下列参数,是NFS使用固定端口 LOCKD_TCPPORT=4001 LOCKD_UDPPORT=4001 LOCKD_PORT=4002 STATD_PORT=4000 STATD_OUTGOING_PORT=4003 2、配置iptables策略 # iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 4000:4003 -j ACCEPT # iptables -A INPUT -p udp -s 192.168.0.0/24 --dport 4000:4003 -j ACCEPT # iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 2049 -j ACCEPT # iptables -A INPUT -p udp -s 192.168.0.0/24 --dport 2049 -j ACCEPT # iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 111 -j ACCEPT # iptables -A INPUT -p udp -s 192.168.0.0/24 --dport 111 -j ACCEPT # iptables -A OUTPUT -p tcp -d 192.168.0.0/24 --sport 4000:4003 -j ACCEPT # iptables -A OUTPUT -p udp -d 192.168.0.0/24 --sport 4000:4003 -j ACCEPT # iptables -A OUTPUT -p tcp -d 192.168.0.0/24 --sport 2049 -j ACCEPT # iptables -A OUTPUT -p udp -d 192.168.0.0/24 --sport 2049 -j ACCEPT # iptables -A OUTPUT -p tcp -d 192.168.0.0/24 --sport 111 -j ACCEPT # iptables -A OUTPUT -p udp -d 192.168.0.0/24 --sport 111 -j ACCEPT (7)日志服务 # iptables -A INPUT -p udp -s 192.168.0.0/24 --dport 514 -j ACCEPT # iptables -A OUTPUT -p udp -d 192.168.0.0/24 --sport 514 -j ACCEPT (8)HTTP/HTTPS服务 # iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 80 -j ACCEPT # iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 443 -j ACCEPT # iptables -A OUTPUT -p tcp -d 192.168.0.0/24 --sport 80 -j ACCEPT # iptables -A OUTPUT -p tcp -d 192.168.0.0/24 --sport 443 -j ACCEPT (8)WebDav服务 # iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 9800 -j ACCEPT # iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 9802 -j ACCEPT # iptables -A OUTPUT -p tcp -d 192.168.0.0/24 --sport 9800 -j ACCEPT # iptables -A OUTPUT -p tcp -d 192.168.0.0/24 --sport 9802 -j ACCEPT (9)SMTP服务 # iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 25 -j ACCEPT # iptables -A OUTPUT -p tcp -d 192.168.0.0/24 --sport 25 -j ACCEPT (10)POP3/POP3s服务 # iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 110 -j ACCEPT # iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 995 -j ACCEPt # iptables -A OUTPUT -p tcp -d 192.168.0.0/24 --sport 110 -j ACCEPT # iptables -A OUTPUT -p tcp -d 192.168.0.0/24 --sport 995 -j ACCEPT (11)IMAP/IMAPs服务 # iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 143 -j ACCEPT # iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 993 -j ACCEPT # iptalbes -A OUTPUT -p tcp -d 192.168.0.0/24 --sport 143 -j ACCEPT # iptables -A OUTPUT -p tcp -d 192.168.0.0/24 --sport 993 -j ACCEPT (12)LDAP服务 # iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 389 -j ACCEPT # iptables -A OUTPUT -p tcp -d 192.168.0.0/24 --sport 389 -j ACCEPT (14)SSH服务 # iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 22 -j ACCEPT # iptables -A OUTPUT -p tcp -d 192.168.0.0/24 --sport 22 -j ACCEPT (15)telnet服务 # iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 23 -j ACCEPT # iptables -A OUTPUT -p tcp -d 192.168.0.0/24 --sport 23 -j ACCEPT (16)MySQL服务 # iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 3306 -j ACCEPT # iptables -A OUTPUT -p tcp -d 192.168.0.0/24 --sport 3306 -j ACCEPT (17)SQL Server # iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 1433 -j ACCEPT # iptables -A OUTPUT -p tcp -d 192.168.0.0/24 --sport 1433 -j ACCEPT |