input output forward prerouting postrouting
五链相当于在五个位置设置安全策略做检查
流量进入网卡(路由表)后查看是否是发给自己的,
1 总的检查口 prerouting
2 是发给自己的就转发给自己进程的端口,input
不是就转发走,只是穿过 output
4 自己访问外部网络时,流量往外出的时候也要经过自己的路由表 forward
穿过我的做设置,例如教室内访问视频网站
5 最外面的出口做检查 postouting
1 隐式扩展
不用写调用哪个模块,当指定协议的时候系统会自动调用协议所需要的模块,协议名就是模块名,系统自己去找,tcp,udp协议
指定端口号
只让tcp的22端口通过
iptables -I INPUT 3 -s 192.168.1.11 -p tcp --dport22 -j ACCEPT
dport目标端口
sport源端口
指定端口范围,必须是连续的 m:n 例如1:10 1到10
自定义链
除了系统自带的五个链,自己可以自定义链
1先自定义一个链
Iptables –N invalid_packets
重命名
Iptables –E invalid_packets INVALID_PACKETS
为自定义的链添加规则
Iptables –A invalid_packets –p tcp –tcp-flags ALL ALL –j REJECT
定义完不和原有规则关联就没意义,就像函数,只定义没调用就无意义
Iptables –A OUTPUT –j INVALID_PACKAGES
从我这里出的,只要是不符合规则的统统拒绝
删除时,先删除关联的链,再清空自定义链添加的内容,最后删除自定义链
Iptables –D OUTPUT 1
Iptables –F invalid_packets
Iptables –X invalid_packets
显示扩展
1 multiport 可以指定不连续端口
iptables -I INPUT -p tcp -m multiport --dports 139,445 -j ACCEPT
2 iprange
iptables -I INPUT -m iprange --src-range 192.168.1.11-192.168.1.12 -j ACCEPT
3 mac --mac-source
Ip 限制了可以从mac突破限制
Iptables -I INPUT 3 -m mac --mac-source 00:0C:29:D9:83:55 -j ACCEPT
加两个
Iptables -I INPUT 3 -m mac --mac-source 00:0C:29:D9:83:55 -s 192.168.1.11 -j ACCEPT
4 string
对应用层数据的字符串进行限制
例如用户访问百度搜索google等字符串,可以屏蔽掉
Iptables -I OUTPUT -m string --algo bm --string”google” -f REJECT
Tcpdump -I etho port 80
5 time
iptables -I INPUT 3 -m time --timestart 01:00:00 --timestop 02:00:00 --weekdays 1,2,3,4,5 -j ACCEPT
周一到周五的上班时间才能访问
6 connlimit 限制单个机器的连接数
限制客户端的IP连接数,并发连接数
--connlimit-upto n 小于某个值,在某个范围内时是匹配的
--connlimit-above n 连接数大于n的时候匹配
超过两个就拒绝
iptables -A INPUT -m connlimit --connlimit-above 2 -j REJECT
添加策略是防止和iptables -vnL 里面其他策略冲突
7 limit 扩展 限制总的连接数,多个机器加起来
先放行5个,以后每一分钟放行一个
iptables -A INPUT -m limit --limit 1/minute --limit-burst 5 -j ACCEPT
8 state
New:第一次访问就叫做new
ESTABLISHED:第二次访问的叫做established
RELATED:新发起的与已有连接相关联的连接,例如ftp协议中数据连接与命令连接的关系
防火墙策略中,established放在最前面,之前检查过了,再次见面直接放在最前面直接通过
例如 旧的已经连接过的用户accept,新的用户只有httpd80端口可以连,其他的都不让连
Iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Iptables -I INPUT 4 tcp --dport 80 -m state --state NEW -j ACCEPT
针对ftp的端口容易变化的特性,加载专门模块
modprobe nf_conntrack_ftp
可以加入开机启动 /etc/rc.d/rc.local
Lsmod |grep ftp 查看是否加载成功
加载后, 新添加的21端口和相关联的内容都放行
新发起的请求连接的21端口是允许的
iptables -I INPUT 3 -p tcp --dport 21 -m state --state NEW -j ACCEPT
相关的已经建立连接的直接放行
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT