iptables笔记
1.查看iptables表
iptables -t filter -L iptables -t nat -L iptables -t mangle -L
介绍iptables命令
iptables -t table 命令 chain rules -j target
table 可以是filter、nat、mangle,默认是filter
-p 或--policy 定义默认策略 -A 或--addend 在规则列表的最后增加一条规则 -I 或--insert 在指定的位置插入一条规则 -D 或--delete 删除一个规则 -R 或--replace 替换规则列表中的某个规则 -F 或--flush 删除表中所有规则 iptables -t filter -P FORWARD ACCEPT iptables -t filter -I INPUT -p icmp -j DROP iptables -t filter -I INPUT 2 -p icmp -j DROP iptables -t filter -D INPUT 1 iptables -t filter -R INPUT 1 -p icmp -j ACCEPT iptables -t filter -F
iptables 匹配选项
-i 或--in-interface 指定数据包从哪个网络接口进入。 -o 或--out-interface 指定数据包从哪个网络接口输出 -p 或--protocol 协议类型,指定数据包匹配协议,如果TCP/UDP/ICMP等 -s 或--source 指定数据包匹配的源地址 -d 或--destination 指定数据包匹配的目标地址 --sport 指定数据包匹配的源端口号,可以使用"起始端口:结束端口"的格式指定一个范围的端口 --dport 指定数据包匹配的目标端口,可以使用"起始端口:结束端口"的格式指定一个范围的端口
iptables 处理动作
-j 参数用来指定要进行的处理动作,常用的处理动作包括:ACCEPT、REJECT、DROP、REDIRECT、MASQUERADE、LOG、DNAT、SNAT、MIRROR、RETURN、MARK。
ACCEPT:
将封包放行,进行完此处理动作后,将不再匹配其它规则,直接跳往下一个规则链。
示例:iptables -t filter -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
DROP:
丢弃封包不予处理,进行完此动作后,将不再匹配其它规则,直接中断过滤程序。
示例:iptables -t filter -A INPUT -p icmp -m icmp --icmp-type 8 -j DROP
REJECT:
阻拦该封包,并传送封包通知对方,可以传送的封包有几个选择:ICMP port-unreachable、ICMP echo-reply或是tcp-reset(这个封包会要求对方关闭连接)、进行完此处理动作后,将不再匹配其它规则,直接中断过滤程序。
示例:iptables -t filter -A INPUT -p icmp -m icmp --icmp-type 8 -j REJECT
LOG:
将封包相关信息记录到/var/log中,日志文件详细位置查阅/etc/syslog.conf配置文件,进行完此动作处理后,将会继续匹配其它规则。
示例:iptables -t filter -I INPUT -p tcp --dport 80 -j LOG
iptables 扩展匹配选项
匹配扩展中,还需要加-m引用模块的显示扩展
参数 -m state
基于状态监测的包过滤,指定监测那种状态
–state {NEW, ESTTBLISHED, INVALID, RELATED}
说明:用来比对链接状态,链接状态共有四种NEW, ESTTBLISHED, INVALID, RELATED。
INVALID 表示该封包的链接编号(Session ID)无法辨识或编号不正常
ESTABLISHED 表示该封包属于某个已经建立的连接
NEW 表示该封包想要起始一个连接(重设连接或将连接重定向)
RELATED 表示该封包是属于某个已经建立的连接,所建立的新连接。例如:FTP-DATA 连接必定是源自某个FTP连接
示例:DMZ区域中的服务器不能主动建立TCP连接,在OUTPUT链中将所有SYN报文丢弃 iptables -t filter -I OUTPUT -m state --state NEW -j DROP
参数 -m icmp –icmp-type
ping命令使用ICMP协议检查网络是否畅通,ICMP有两种常见的类型的数据包即icmp-type,常用的类型为echo-reply和echo-request。也可以使用代码来表示。
echo-reply 0
echo-request 8
示例:服务器可以ping通其他机器,其他机器不能ping通本机器 iptables -t filter -A INPUT -p icmp -m icmp --icmp-type 8 -j DROP
参数 -m multiport
指定多端口号
–sport 源端口
–dport 目标端口
示例:对外只放行22,80,1024-1026端口,其它端口的报文全部丢弃 iptables -t filter -A INPUT -p tcp -m multiport --dport 22,80,1024:1026 -j ACCEPT iptables -t filter -P INPUT DROP
参数 -m iprange
指定多IP段
–src-rangeip-ip
–dst-rangeip-ip
示例:只允许192.168.56.1-192.168.56.254访问本服务器22,88端口,其它IP拒绝访问 iptables -t filter -A INPUT -p tcp -m multiport --dport 22,80 -m iprange --src-range 192.168.56.1-192.168.56.254 -j ACCEPT iptables -t filter -A INPUT -p tcp -m multiport --dport 22,80 -j DROP
参数 -m connlimit
–connlimit-above 限定连接数
示例:ssh只允许同一个IP建立两个会话,超出丢弃,防止ssh爆破 iptables -t filter -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 2 -j DROP
参数 -m limit
–limit
用来比对某段时间内封包的平均流量,上面的例子是用来比对每小时平均流量是否超过300个封包。
除了每小时平均一次外,也可以每秒钟、每分钟、每小时或每天平均一次,
示例: iptables -t filter -I INPUT -m limit --limit 300/second -j ACCEPT iptables -t filter -A INPUT -j DROP
参数 -m mac –mac-source
用来比对封包来源网络接口网卡硬件地址,这个参数不能用在OUTPUT和Postrouing规则链上。
示例:ssh服务只允许MAC为 0A:00:27:00:00:14 访问,其他全部拒绝 iptables -t filter -A INPUT -p tcp --dport 22 -m mac --mac-source 0A:00:27:00:00:14 -j ACCEPT iptables -t filter -A INPUT -p tcp --dport 22 -j DROP