“四表五链”及“堵通策略”
A.“四表”是指,iptables的功能——filter, nat, mangle, raw.
filter, 控制数据包是否允许进出及转发(INPUT、OUTPUT、FORWARD),可以控制的链路有input, forward, output
nat, 控制数据包中地址转换,可以控制的链路有prerouting, input, output, postrouting
mangle,修改数据包中的原数据,可以控制的链路有prerouting, input, forward, output, postrouting
raw,控制nat表中连接追踪机制的启用状况,可以控制的链路有prerouting, output
B.“五链”是指内核中控制网络的NetFilter定义的五个规则链,分别为
PREROUTING, 路由前
INPUT, 数据包流入口
FORWARD, 转发管卡
OUTPUT, 数据包出口
POSTROUTING, 路由后
C.堵通策略是指对数据包所做的操作,一般有两种操作——“通(ACCEPT)”、“堵(DROP)”,还有一种操作很常见REJECT.
查看iptables表
-L, --list [chain]:列出规则;
-v, --verbose:详细信息;
-vv, -vvv 更加详细的信息
-n, --numeric:数字格式显示主机地址和端口号;
iptables -nL
iptables -nvL
iptables命令使用操作(iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型] 参数)
iptables [-t table] COMMAND [chain] CRETIRIA -j ACTION
-t table,是指操作的表
filter、nat、mangle或raw, 默认使用filter
COMMAND,子命令,定义对规则的管理
-A, --append chain rule-specification:追加新规则于指定链的尾部;
-I, --insert chain [rulenum] rule-specification:插入新规则于指定链的指定位置,默认为首部;
-R, --replace chain rulenum rule-specification:替换指定的规则为新的规则;
-D, --delete chain rulenum:根据规则编号删除规则;
chain, 指明链路
PREROUTING, 路由前
INPUT, 数据包流入口
FORWARD, 转发管卡
OUTPUT, 数据包出口
POSTROUTING, 路由后
CRETIRIA, 匹配的条件或标准
ACTION,操作动作
“通(ACCEPT)”、“堵(DROP)”,REJECT
例如,不允许10.8.0.0/16网络对80/tcp端口进行访问
iptables -A INPUT -s 10.8.0.0/16 -d 188.131.150.204 -p tcp --dport 80 -j DROP
放开8888端口
iptables -I INPUT -p tcp --dport 8888 -j ACCEPT
修改8888端口为拒绝
iptables -R INPUT 1 -p tcp --dport 8888 -j DROP
删除8888拒绝端口
iptables -D INPUT -p tcp --dport 8888 -j DROP
若是两个规则都有,那条规则在上,按那条规则走(如下所示,因为DROP在ACCEPT之上,所以会拒绝访问8888端口)
扩展匹配条件
multiport 以离散或连续的 方式定义多端口匹配条件,最多15个;
[!] --source-ports,--sports port[,port|,port:port]...:指定多个源端口;
[!] --destination-ports,--dports port[,port|,port:port]...:指定多个目标端口;
iptables -I INPUT -d 188.131.150.204 -p tcp -m multiport --dports 22,80,139,445,3306 -j ACCEPT
iprange以连续地址块的方式来指明多IP地址匹配条件;
[!] --src-range from[-to]
[!] --dst-range from[-to]
阻止来自IP地址x.x.x.x eth0 tcp的包
iptables -A INPUT -i eth0 -s x.x.x.x -j DROP
iptables -A INPUT -i eth0 -p tcp -s x.x.x.x -j DROP
拒绝访问防火墙的新数据包,但允许响应连接或与已有连接相关的数据包
iptables -A INPUT -p tcp -m state --state NEW -j DROP
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
“-m state”表示数据包的连接状态,“NEW”表示与任何连接无关的
“ESTABLISHED”表示已经响应请求或者已经建立连接的数据包,“RELATED”表示与已建立的连接有相关性的,比如FTP数据连接等。