2022年iptables配置实例 .pdf
iptables 配置实例2009-01-06 11:53 iptables 基本命令使用举例一、链的基本操作1、清除所有的规则。1)清除预设表filter 中所有规则链中的规则。# iptables -F 2)清除预设表filter 中使用者自定链中的规则。#iptables -X #iptables -Z 2、设置链的默认策略。一般有两种方法。1)首先允许所有的包,然后再禁止有危险的包通过放火墙。#iptables -P INPUT ACCEPT #iptables -P OUTPUT ACCEPT #iptables -P FORWARD ACCEPT 2)首先禁止所有的包,然后根据需要的服务允许特定的包通过防火墙。#iptables -P INPUT DROP #iptables -P OUTPUT DROP #iptables -P FORWARD DROP 3、列出表 /链中的所有规则。默认只列出filter 表。#iptables -L 4、向链中添加规则。下面的语句用于开放网络接口:#iptables -A INPUT -i lo -j ACCEPT #iptables -A OUTPUT -o lo -j ACCEPT #iptables -A INPUT -i eth0 -j ACEPT #iptables -A OUTPUT -o eth1 -j ACCEPT #iptables -A FORWARD -i eth1 -j ACCEPT #iptables -A FORWARD -0 eth1 -j ACCEPT 注意 :由于本地进程不会经过FORWARD链,因此回环接口lo 只在 INPUT和 OUTPUT两个链上作用。5、使用者自定义链。#iptables -N custom#iptables -A custom -s 0/0 -d 0/0 -p icmp -j DROP#iptables -A INPUT -s 0/0 -d 0/0 -j DROP 二、设置基本的规则匹配1、指定协议匹配。1)匹配指定协议。#iptables -A INPUT -p tcp 2)匹配指定协议之外的所有协议。#iptables -A INPUT -p !tcp 2、指定地址匹配。1)指定匹配的主机。#iptables -A INPUT -s 192.168.0.18 2)指定匹配的网络。#iptables -A INPUT -s 192.168.2.0/24 3)匹配指定主机之外的地址。#iptables -A FORWARD -s !192.168.0.19 4)匹配指定网络之外的网络。#iptables -A FORWARD -s ! 192.168.3.0/24 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 8 页 - - - - - - - - - 3、指定网络接口匹配。1)指定单一的网络接口匹配。#iptables -A INPUT -i eth0 #iptables -A FORWARD -o eth0 2)指定同类型的网络接口匹配。#iptables -A FORWARD -o ppp+ 4、指定端口匹配。1)指定单一端口匹配。#iptables -A INPUT -p tcp -sport www #iptables -A INPUT -p udp -dport 53 2)匹配指定端口之外的端口。#iptables -A INPUT -p tcp -dport !22 3)匹配端口范围。#iptables -A INPUT -p tcp -sport 22:80 4)匹配 ICMP端口和 ICMP 类型。 #iptables -A INOUT -p icmp -icimp-type 8 5)指定 ip 碎片。每个网络接口都有一个MTU(最大传输单元) ,这个参数定义了可以通过的数据包的最大尺寸。如果一个数据包大于这个参数值时,系统会将其划分成更小的数据包(称为ip 碎片)来传输,而接受方则对这些ip 碎片再进行重组以还原整个包。这样会导致一个问题:当系统将大数据包划分成ip 碎片传输时,第一个碎片含有完整的包头信息(IP+TCP 、UDP 和ICMP) ,但是后续的碎片只有包头的部分信息(如源地址、目的地址) 。因此,检查后面的ip 碎片的头部(象有TCP 、UDP 和 ICMP 一样)是不可能的。假如有这样的一条规则:#iptables -A FORWARD -p tcp -s 192.168.1.0/24 -d 192.168.2.100 -dport 80 -j ACCEPT并且这时的 FORWARD的 policy 为 DROP时,系统只会让第一个ip 碎片通过,而余下的碎片因为包头信息不完整而无法通过。可以通过-fragment/-f 选项来指定第二个及以后的ip 碎片解决上述问题。#iptables -A FORWARD -f -s 192.168.1.0/24 -d 192.168.2.100 -j ACCEPT 注意现在有许多进行ip碎片攻击的实例,如DoS攻击,因此允许ip 碎片通过是有安全隐患的,对于这一点可以采用iptables 的匹配扩展来进行限制。三、设置扩展的规则匹配(举例已忽略目标动作)1、多端口匹配。1)匹配多个源端口。#iptables -A INPUT -p tcp -m multiport -sport 22,53,80,1102)匹配多个目的端口。#iptables -A INPUT -p tcp -m multiport -dpoort 22,53,803)匹配多端口(无论是源端口还是目的端口)#iptables -A INPUT -p tcp -m multiport -port 22,53,80,1102、指定 TCP匹配扩展使用-tcp-flags 选项可以根据tcp 包的标志位进行过滤。#iptables -A INPUT -p tcp -tcp-flags SYN,FIN,ACK SYN #iptables -A FROWARD -p tcp -tcp-flags ALL SYN,ACK 上实例中第一个表示SYN 、 ACK 、 FIN的标志都检查,但是只有SYN匹配。第二个表示ALL(SYN ,ACK ,FIN,RST ,URG,PSH )的标志都检查,但是只有设置了SYN和 ACK的匹配。 #iptables -A FORWARD -p tcp -syn选项-syn 相当于 -tcp-flags SYN,RST,ACK SYN的简写。3、 limit 速率匹配扩展。 1) 指定单位时间内允许通过的数据包个数,单位时间可以是/second、/minute 、/hour 、/day 或使用第一个子母。#iptables -A INPUT -m limit -limit 300/hour 2 )指定触发事件的阀值。#iptables -A INPUT -m limit -limit-burst 10用来比对一次同时涌入的名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 8 页 - - - - - - - - - 封包是否超过10 个,超过此上限的包将直接丢弃。3)同时指定速率限制和触发阀值。#iptables -A INPUT -p icmp -m limit -limit 3/m -limit-burst 3 表示每分钟允许的最大包数量为限制速率(本例为3)加上当前的触发阀值burst 数。任何情况下,都可保证3 个数据包通过,触发阀值burst 相当于允许额外的包数量。4)基于状态的匹配扩展(连接跟踪)每个网络连接包括以下信息:源地址、目标地址、源端口、目的端口,称为套接字对(socket pairs) ;协议类型、连接状态(TCP 协议)和超时时间等。防火墙把这些信息称为状态(stateful ) 。状态包过滤防火墙能在内存中维护一个跟踪状态的表,比简单包过滤防火墙具有更大的安全性,命令格式如下:iptables -m state -state !state ,state,state,state 其中, state 表是一个逗号分割的列表,用来指定连接状态,4 种:NEW: 该包想要开始一个新的连接(重新连接或连接重定向)RELATED: 该包是属于某个已经建立的连接所建立的新连接。举例:FTP 的数据传输连接和控制连接之间就是RELATED关系。 ESTABLISHED:该包属于某个已经建立的连接。INVALID: 该包不匹配于任何连接,通常这些包被DROP 。例如:(1)在 INPUT链添加一条规则,匹配已经建立的连接或由已经建立的连接所建立的新连接。 即匹配所有的TCP回应包。 #iptables -A INPUT -m state -state RELATED,ESTABLISHED (2)在 INPUT链链添加一条规则,匹配所有从非 eth0 接口来的连接请求包。#iptables -A INPUT -m state -state NEW -i !eth0 又如,对于ftp 连接可以使用下面的连接跟踪:(1)被动(Passive)ftp 连接模式。 #iptables -A INPUT -p tcp -sport 1024: -dport 1024: -m state -state ESTABLISHED -j ACCEPT#iptables -A OUTPUT -p tcp -sport 1024: -dport 1024: -mstate -state ESTABLISHED,RELATED -j ACCEPT (2)主动(Active )ftp连接模式 #iptables -A INNPUT -p tcp -sport 20 -m state -state ESTABLISHED,RELATED -j ACCEPT#iptables -A OUTPUT -p tcp -OUTPUT -p tcp -dport 20 -m state -state ESTABLISHED -j ACCEPT5)TOS匹配扩展。四、设置目标扩展目标扩展由内核模块组成,而且iptables 的一个可选扩展提供了新的命令行选项Iptables 配置实例 : Iptables 配置的目的, 一个是防止公网的入侵,一个是让内网的兄弟们上网。在没配 IPTABLES之前,只有本机能上网。Rh8.0的系统设置 中有个 安全级别 , 它主要是针对本机来说的,不能用它来配置iptables 。打开 安全级别 ,把它配成 无防火墙 级别。为了配置、测试方便,可以先用KWrite 编个 脚本 ,采用 复制 、粘贴 方式,把全部语句一次性粘贴到 终端 里执行。这样修改测试都很方便。打开 其他 - 辅助设施 中的 KWrite ,将下面的样本输入或粘贴到里面(其中,eth0、eth1名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 8 页 - - - - - - - - - 分别是外、内网卡) :echo Enable IP Forwarding. echo 1 /proc/sys/net/ipv4/ip_forward echo Starting iptables rules. /sbin/modprobe iptable_filter /sbin/modprobe ip_tables /sbin/modprobe iptable_nat /sbin/modprobe ip_nat_ftp ;支持被动FTP /sbin/modprobe ip_conntrack_ftp ; /sbin/modprobe ip_conntrack_h323 ;支持 NETMEETING /sbin/modprobe ip_nat_h323 ; iptables -F INPUT iptables -F FORWARD iptables -F OUTPUT iptables -F POSTROUTING -t nat iptables -F PREROUTING -t nat iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -i eth1 -j ACCEPT iptables -A INPUT -i eth0 -m state -state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT iptables -A FORWARD -i eth0 -m state -state ESTABLISHED,RELATED -j ACCEPT iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE /etc/rc.d/init.d/iptables restart iptables -L 再另存为一个文件放到桌面上,便于使用。在这个配置里面,INPUT 和转发 FORWARD功能的缺省值都是拒绝(DROP ) ,这意味着在后面的 INPUT和 FORWARD语句中没有表明通过(ACCEPT )的都将被拒之门外。这是一个最好的安全模式,经过使用赛门铁克的在线测试,所有公网端口都是隐藏的。注意,所有内网端口都是打开的,本机对内没有安全可言。其它的语句我就不多说了,最后一句是显示配置执行后的链路结果。每次修改完后,将整篇语句全部复制,再粘贴到终端 ,它将自动配置、启动、显示一次。反复修改、测试,直到达到你的要求。最后将整篇语句全部复制,再粘贴到/etc/rc.d/rc.local文件后面,你的配置开机后也可以自动执行了。内容来自 : 脚本之家 # touch /etc/rc.d/firewall # chmod u+x /etc/rc.d/firewall 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 8 页 - - - - - - - - - # echo /etc/rc.d/firewall /etc/rc.d/rc.local # vi /etc/rc.d/firewall #!/bin/bash echo 1 /proc/sys/net/ipv4/ip_forward INET_IFACE=eth1 INET_IP=10.19.51.182 LAN_IFACE=eth0 LAN_IP=192.168.0.1 LAN_IP_RANGE=192.168.0.0/24 IPT=/sbin/iptables SERVER=192.168.0.100 DNS=192.168.0.99 HTTP=80 MAIL_SMTP=25 MAIL_POP3=110 DNS_PORT=53 /sbin/depmod -a /sbin/modprobe ip_tables /sbin/modprobe iptable_nat /sbin/modprobe ip_nat_ftp /sbin/modprobe ipt_LOG $IPT -P INPUT DROP $IPT -P FORWARD DROP $IPT -P OUTPUT DROP $IPT -t nat -P PREROUTING ACCEPT $IPT -t nat -P POSTROUTING ACCEPT $IPT -t nat -P OUTPUT ACCEPT for TABLE in filter nat mangle ; do $IPT -t $TABLE -F $IPT -t $TABLE -X done $IPT -A INPUT -m state -state ESTABLISHED,RELATED -j ACCEPT for DNS in $(grep n /etc/resolv.conf|awk print $2) ; do $IPT -A INPUT -p udp -s $DNS -sport domain -j ACCEPT done $IPT -A INPUT -p tcp -sport $HTTP -j ACCEPT $IPT -A INPUT -p tcp -sport $MAIL_25 -j ACCEPT $IPT -A INPUT -p tcp -sport $MAIL_110 -j ACCEPT $IPT -A INPUT -p tcp -sport $DNS_PORT -j ACCEPT $IPT -N LOGDENY $IPT -A LOGDENY -j LOG -log-prefix iptables: $IPT -A LOGDENY -j DROP $IPT -A INPUT -i ! lo -m state -state NEW,INVALID -j LOGDENY #if $INET_IFACE = ppp0 ; then 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 8 页 - - - - - - - - - #$IPT -t nat -A POSTROUTING -o $INET_IFACE -j MASQUERADE #else #$IPT -t nat -A POSTROUTING -o $INET_IFACE -j SNAT -to $INET_IP #fi $IPT -t nat -A POSTROUTING -o $INET_IFACE -s 192.168.0.25 -j SNAT -to $INET_IP $IPT -t net -A PRERROUTING -p tcp -d $INET_IP -dport $HTTP -j DNAT -to $SERVER:$HTTP $IPT -t net -A PRERROUTING -p tcp -d $INET_IP -dport $MAIL_25 -j DNAT -to $SERVER:$MAIL_25 $IPT -t net -A PRERROUTING -p tcp -d $INET_IP -dport $MAIL_110 -j DNAT -to $SERVER:$MAIL_110 $IPT -t net -A PRERROUTING -p tcp -d $INET_IP -dport $DNS_PORT -j DNAT -to $DNS:$DNS_PORT :wq #/etc/rc.d/firewall 一个使用iptables 配置 NAT的实例2008-07-15 10:41 本文介绍如何在linux 系统上使用iptables 建立 NAT, 我们可以把它做为一个网关, 从而局域网的多台机器可以使用一个公开的ip 地址连接外网. 我使用的方法是重写通过NAT 系统 IP包的源地址和目标地址. 准备 : CPU: PII或更高系统 : 任何 Linux 版本软件 : Iptables 网卡 : 2 块想法 : 用你的广域网IP 替换 xx.xx.xx.xx 用你的局域网IP 替换 yy.yy.yy.yy (比如 : 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8) WAN = eth0 有一个外网ip 地址 xx.xx.xx.xx LAN = eth1 有一个内网ip 地址yy.yy.yy.yy/ 255.255.0.0 过程 : 步骤 #1. 添加 2 块网卡到你的Linux 系统 . 步骤 #2. 确认你的网卡是否正确安装: ls /etc/sysconfig/network-scripts/ifcfg-eth* | wc -l 结果输出应为 2步骤 #3. 配置 eth0, 使用外网ip 地址 (基于 ip 的外部网络或互连网) cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BOOTPROTO=none 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 8 页 - - - - - - - - - BROADCAST=xx.xx.xx.255 # 附加选项HWADDR=00:50:BA:88:72:D4 # 附加选项IPADDR=xx.xx.xx.xx NETMASK=255.255.255.0 # ISP提供NETWORK=xx.xx.xx.0 # 可选ONBOOT=yes TYPE=Ethernet USERCTL=no IPV6INIT=no PEERDNS=yes GATEWAY=xx.xx.xx.1 # ISP 提供步骤 #4. 配置 eth1, 使用局域网地址(内部网络 ) cat /etc/sysconfig/network-scripts/ifcfg-eth1 BOOTPROTO=none PEERDNS=yes HWADDR=00:50:8B:CF:9C:05 # Optional TYPE=Ethernet IPV6INIT=no DEVICE=eth1 NETMASK=255.255.0.0 # Specify based on your requirement BROADCAST= IPADDR=192.168.2.1 # Gateway of the LAN NETWORK=192.168.0.0 # Optional USERCTL=no ONBOOT=yes 步骤 #5. 配置主机(可选 ) cat /etc/hosts 127.0.0.1 nat localhost.localdomain localhost 步骤 #6. 配置网关cat /etc/sysconfig/network NETWORKING=yes HOSTNAME=nat GATEWAY=xx.xx.xx.1 # 互连网或外网网关, ISP提供步骤 #6. 配置 DNS cat /etc/resolv.conf nameserver 203.145.184.13 # 主 DNS服务器 , ISP提供nameserver 202.56.250.5 # 第二个 DNS服务器 , ISP提供步骤 #8. 使用 IP Tables配置 NAT # 删除刷新缺省表如filter, 其它表如 nat 需清楚标明 : iptables -flush # 刷新所有过滤规则和NAT表. iptables -table nat -flush iptables -delete-chain #删除所有非缺省的规则链和nat 表iptables -table nat -delete-chain 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 8 页 - - - - - - - - - #建立 IP 转发和伪装iptables -table nat -append POSTROUTING -out-interface eth0 -j MASQUERADE iptables -append FORWARD -in-interface eth1 -j ACCEPT #打开内核的包转发功能echo 1 /proc/sys/net/ipv4/ip_forward #应用 iptables 配置service iptables restart 步骤 #9. 测试# 用一台客户机ping 网关ping 192.168.2.1 然后测试能否访问外网: ping 内部网络客户端的配置局部办公网络的所有计算机把网关设置为linux(系统 )网关的内网ip 地址 . DNS设置为 ISP提供的 DNS. Windows95,2000,XP 上的配置 : 选择开始 - 设置 - 控制面版 选择网络 图标选择配置 , 然后双击以太网络的TCP/IP部分 (不是 TCP/IP - 拨号适配器 ) 然后输入 : 网关 : 使用 linux 系统的内网ip 地址 .(192.168.2.1) DNS 配置 : 使用 IPS提供的 DNS地址 . (通常使用互连网地址) IP 地址 : ip 地址 (192.168.XXX.XXX - 静态 )和掩码 (小的本地办公网络通常使用255.255.0.0). 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 8 页 - - - - - - - - -