iptables 示例
例2.1 在filter表的INPUT链的末尾添加一条防火墙规则。
[root@localhost ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT例2.2 在filter表的INPUT链中插入一条防火墙规则(此处省略了“-t filter”选项,按默认处理filter表)。
[root@localhost ~]# iptables -I INPUT -p udp -j ACCEPT例2.3 在filter表的INPUT链中插入一条防火墙规则(作为链中的第二条规则)。
[root@localhost ~]# iptables -I INPUT 2 -p icmp -j ACCEPT例2.4 查看filter表INPUT链中的所有规则,同时显示各条规则的顺序号。
[root@localhost ~]# iptables -L INPUT --line-numbers例2.5 查看filter表各链中所有规则的详细信息,同时以数字形式显示地址和端口信息。
[root@localhost ~]# iptables -vnL例2.6 删除filter表INPUT链中的第2条规则。
[root@localhost ~]# iptables -D INPUT 2例2.7 清空filter表,nat表,mangle表各链中的所有规则。
[root@localhost ~]# iptables -F
[root@localhost ~]# iptables -t nat -F
[root@localhost ~]# iptables -t mangle -F例2.8 将filter表中FORWARD规则链的默认策略设为DROP。
[root@localhost ~]# iptables -t filter -P FORWARD DROP例2.9 将filter表中OUTPUT规则链的默认策略设为ACCEPT。
[root@localhost ~]# iptables -P OUTPUT ACCEPT例2.10 查看iptables命令中关于icmp协议的帮助信息(在输出内容的最后部分列出)。
[root@localhost ~]# iptables -p icmp -h例2.11 在raw表中新增一条自定义的规则链,链名为TCP_PACKETS。
[root@localhost ~]# iptables -t raw -N TCP_PACKETS
[root@localhost ~]# iptables -t raw -L //查看raw表中的所有规则链中相关信息例2.12 清空raw表中用户自定义的所有规则链。
[root@localhost ~]# iptables -t raw -x例2.13 拒绝进入防火墙的所有icmp协议数据包。
[root@localhost ~]# iptables -I INPUT -p icmp -j REJECT例2.14 允许防火墙转发除icmp协议以外的所有数据包(使用惊叹号“!”可以将条件取反)。
[root@localhost ~]# iptables -A FORWARD -p ! icmp -j ACCEPT
[root@localhost ~]# iptables -L FORWARD例2.15 拒绝转发来自192.168.1.11主机的数据,允许转发来自192.168.0.0/24网段的数据。
[root@localhost ~]# iptables -A FORWARD -s 192.168.1.11 -j REJECT
[root@localhost ~]# iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT例2.16 丢弃从外网接口(eth1)进入防火墙本机的源地址为私网地址的数据包。
[root@localhost ~]# iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP
[root@localhost ~]# iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP
[root@localhost ~]# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP例2.17 管理员在网关服务器上检测到来自某个IP网段(如10.20.30.0/24)的频繁扫描,希望设置iptables规则封堵改IP地址段,两小时后分解。
[root@localhost ~]# iptables -I INPUT -s 10.20.30.0/24 -j DROP //设置封堵策略
[root@localhost ~]# iptables -I FORWARD -s 10.20.30.0/24 -j DROP
[root@localhost ~]# at now +2 hours
at>iptables -D INPUT 1
at>iptables -D FORWARD 1
at><EOT> //此处按Ctrl+D组合键例2.18 仅允许系统管理员从202.13.0.0/16网段使用SSH方式远程登录防火墙主机。
[root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -s 202.13.0.0/16 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -j DROP例2.19 允许本机开放从TCP端口20-1024提供的应用服务。
[root@localhost ~]# iptables -A INPUT -p tcp --dport 20:1024 -j ACCEPT
[root@localhost ~]# iptables -A OUTPUT -p tcp --sport 20:1024 -j ACCEPT例2.20 作为网关使用时,允许转发来自192.168.0.0/24局域网段的DNS解析请求数据包。
[root@localhost ~]# iptables -A FORWARD -s 192.168.0.0/24 -p udp --dport 53 -j ACCEPT
[root@localhost ~]# iptables -A FORWARD -d 192.168.0.0/24 -p udp --sport 53 -j ACCRPT例2.21 拒绝从外网接口(eth1)直接访问防火墙本机的数据包,但是允许响应防火墙TCP请求的数据包进入。
[root@localhost ~]# iptables -P INPUT DROP
[root@localhost ~]# iptables -I INPUT -i eth1 -p tcp --tcp-flags SYN,RST,ACK SYN -j REJECT
[root@localhost ~]# iptables -I INPUT -i eth1 -p tcp --tcp-flags ! --syn -j ACCEPT //--syn的用法为兼容旧版本iptables的形式,此处等同于--tcp-flags SYN,RST,ACK SYN例2.22 禁止其他主机ping防火墙主机,但是允许从防火墙上ping其他主机(允许接收ICMP回应数据)。
[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type Echo-Request -j DROP
[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type Echo-Reply -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type destination-Unreachable -j ACCEPT例2.23 禁止转发来自MAC地址为00:0C:29:27:55:3F的主机数据包。
[root@localhost ~]# iptables -A FORWARD -m mac --mac-source 00:0C:29:27:55:3F -j DROP例2.24 允许防火墙本机对外开放TCP端口20,21,25,110以及被动模式FTP端口1250-1280。
[root@localhost ~]# iptables -A INPUT -p tcp -m multiport --dport 20,21,25,110,1250:1280 -j ACCEPT例2.25 禁止转发源IP地址为192.168.1.20-192.168.1.99的TCP数据包。
[root@localhost ~]# iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.20-192.168.1.99 -j DROP例2.26 禁止转发与正常TCP连接无关的非--syn请求数据包(如网络中可能存在的一些非法***数据包)。
[root@localhost ~]# iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP例2.27 拒绝访问防火墙的新数据包,但允许响应连接或已有连接相关的数据包。
[root@localhost ~]# iptables -A INPUT -p tcp -m state --state NEW -j DROP
[root@localhost ~]# iptables -A INPUT -p tcp -m state --state ESTABLISHED RELATED -j ACCEPT例2.28 在服务器中设置防火墙策略,只开放本机的WEB服务(80端口)、FTP服务器(21 20端口、20450-20480),放行外部主机发往主机发往服务器其他端口的答应数据包,
将其他入站数据包均予以丢弃处理。
[root@localhost ~]# iptables -I INPUT -p tcp -m multiport --dport 20,21,80 -j ACCEPT
[root@localhost ~]# iptables -I INPUT -p tcp --dport 20450:20480 -j ACCEPT
[root@localhost ~]# iptables -I INPUT -p tcp -m state --state ESTABLISHID -j ACCEPT
[root@localhost ~]# iptables -P INPUT DROP //将默认策略设为DROP例2.29 对于尝试通过SSH方式登录防火墙主机的访问数据,记录日志信息并禁止其访问。
[root@localhost ~]# iptables -I INPUT -p tcp --dport 22 -j DROP
[root@localhost ~]# iptables -I INPUT -p tcp --dport 22 -j LOG
用于将记录日志的频率限制为平均三次/分钟,允许的峰值为八次
[root@localhost ~]# iptables -R INPUT 1 -p tcp --dport 22 -m limit --limit 3/minute --limit-burst 8 -j LOG例2.30 自定义一个新的链MyLAN1,转发自/至192.168.1.0/24网段的数据包均交给该链中的规则处理。
[root@localhost ~]# iptables -t filter -N MyLAN1
[root@localhost ~]# iptables -A FORWARD -s 192.168.1.0/24 -j MyLAN1
[root@localhost ~]# iptables -A FORWARD -d 192.168.1.0/24 -j MyLAN1
[root@localhost ~]# iptables -A MyLAN1 -p icmp -j DROP例2.31 将当前调试好的iptables规则保存到配置文件,并通过iptables服务脚本自动加载。
[root@localhost ~]# iptables-save > /etc/sysconfig/iptables
[root@localhost ~]# service iptables restart
[root@localhost ~]# chkconfig --level 35 iptables on例2.32 从已保存的规则配置文件中导入iptables规则。
[root@localhost ~]# iptables-restore < /etc/sysconfig/iptables例2.33 在脚本文件中预先将防火墙主机的IP地址、网络接口、局域网地址等定义为变量。
INET_IP="214.36.25.14"
INET_IF="eth1"
LAN_IP="192.168.1.4"
INET_IF="eth0" 例2.34 在脚本文件中预先加载iptables需要用到的内核模块
/sbin/depmod -a //检测所有模块的依赖关系
/sbin/modprobe ip_tables //加载iptables基本模块
/sbin/modprobe ip_conntrack //加载连接跟踪功能模块
/sbin/modprobe iptable_filter //加载规则表功能模块
/sbin/modprobe iptable_nat
/sbin/modprobe iptable_mangle
/sbin/modprobe iptable_raw
/sbin/modprobe ipt_REJECT //加载部分扩展功能模块(根据实际使用情况选择)
/sbin/modprobe ipt_LOG
/sbin/modprobe ipt_iprange
/sbin/modprobe xt_state
/sbin/modprobe xt_multiport
/sbin/modprobe xt_mac
/sbin/modprobe xt_limit
/sbin/modprobe ip_nat_ftp //加载支持对FTP连接进行nat转换的功能模块
/sbin/modprobe ip_nat_irc
/sbin/modprobe ip_conntrack_ftp //加载支持FTP连接跟踪的功能模块
/sbin/modprobe ip_conntrack_irc例2.35 在脚本文件中开启防火墙主机的路由转发功能。
/sbin/sysctl -w net.ipv4.ip_forward=1
或者
echo 1 > /proc/sys/net/ipv4/ip_forward例2.36 通过修改/etc/sysctl.conf文件的方式开启防火墙主机的路由转发功能。
[root@localhost ~]# vi /etc/sysctl.conf //查找修改以下行
net.ipv4.ip_forward=1
[root@localhost ~]# sysctl -p //重新加载/etc/sysctl.conf文件中的sysctl配置例2.37 删除用户自定义的链,清空已存在的规则,将filter表的默认策略恢复为允许。
/sbin/iptables -X
/sbin/iptables -t nat -X
/sbin/iptables -t mangle -X
/sbin/iptables -F
/sbin/iptables -t nat -F
/sbin/iptables -t mangle -F
/sbin/iptables -t raw -F
/sbin/iptables -p INPUT ACCEPT
/sbin/iptables -p OUTPUT ACCEPT
/sbin/iptables -p FORWARD ACCEPT例3.1 设置MASQUERADE策略,使192.168.1.0/24网段能够通过网关的ppp0连接共享上网。
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o pppo -j MASQUERADE例3.2 使用“layer7”显式匹配策略过滤使用qq、msn、edonkey等应用层协议的数据访问。
[root@localhost ~]# iptables -A FORWARD -m layer7 --17proto qq -j DROP
[root@localhost ~]# iptables -A FORWARD -m layer7 --17proto msn-filetransfer -j DROP
[root@localhost ~]# iptables -A FORWARD -m layer7 --17proto msnmessenger -j DROP
[root@localhost ~]# iptables -A FORWARD -m layer7 --17proto bittorrent -j DROP
[root@localhost ~]# iptables -A FORWARD -m layer7 --17proto xunlei -j DROP
[root@localhost ~]# iptables -A FORWARD -m layer7 --17proto edonkey -j DROP 例3.3 使用“--connlimit”显式匹配进行数据并发连接控制,超过100个并发连接时将拒绝。
[root@localhost ~]# iptables -A FORWARD -p tcp --syn -m connlimit --connlimit-above 100 -j DROP例3.4 使用“-time”显式匹配根据时间范围设置数据访问策略,允许周一到周五8:00-18:00之间的数据访问。
[root@localhost ~]# iptables -A FORWARD -p tcp --dport 80 -m time --timestart 8:30 --timestop 18:00 --weekdays Mon,Tue,Wed,Thu,Fri -j ACCEPT例3.5 使用“string”显式匹配策略过滤包含“tencent”、“verycd”、“×××”、“×××”的网络访问数据。
[root@localhost ~]# iptables -A FORWARD -p udp --dport 53 -m string --string "tencent" --algo bm -j DROP
[root@localhost ~]# iptables -A FORWARD -p udp --dport 53 -m string --string "verycd" --algo bm -j DROP
[root@localhost ~]# iptables -A FORWARD -p tcp --dport 80 -m string --string "×××" --algo bm -j DROP
[root@localhost ~]# iptables -A FORWARD -p tcp --dport 80 -m string --string "×××" --algo bm -j DROP
其中的“--algo”参数用于指定字符串识别算法,可以是“bm”或者“kmp”,任选其中一种即可。需要注意的是,“--string”匹配对中文字符串的过滤效果可能不是很理想。
https://blog.51cto.com/liweizhong/572936