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