iptables概述
框架
tables > chains > rules(target)
说明
整体上可认为iptables就是由许多chain组成的,要不然其老版本怎么叫做ipchains呢。但是划分层次为:
一个table可由多个chain组成,一个chain可由多个rules组成(一个rule对应一个target)。
target概念的好处是:系统预置了一些target,如ACCEPT,DROP,REJECT,LOG等,意思是如果这个包匹配这条rule,其处理办法就是target。这里引入target的好处在于,允许用户自定义一条chain,然后用chain名做为新的target,这样,就可以聚合一些rule!形成了层次性的rule,就是说如果满足这条rule,那么再看其target里面的rule。
详解
iptables由四张table组成,每张table由默认的chain组成:
filter: 默认有三个chain——INPUT,OUTPUT和FORWARD
nat: 做NAT工作,默认三个chain——OUTPUT,PREROUTING,POSTROUTING
mangle: 对包的一些参数进行修改,默认有五个chain——INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING
raw:作用未明,默认有两个chain——OUTPUT,PREROUTING
不同的table分管不同的方面。iptables的默认命令是对filter生效。可以用-t nat指定对nat生效。
所谓的配置防火墙就是:
向chain添加rule:
每个chain都是由一系列rule组成的,比如你要更改INPUT这个chain来允许用户访问你机器上的某个端口。比如:这个INPUT有两个rule,一个用于允许用户访问你的5901端口,一个用于允许用户访问你的5902端口。
图解
查看并加载iptables相关模块
lsmod |egrep "nat|filter"
载入下列模块
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state
iptables基础命令
/etc/init.d/iptables
Usage: iptables {start|stop|reload|restart|condrestart|status|panic|save}
iptables -nL --line-numbers 查看iptables已添加的规则
iptables -F 清除所有规则,不会处理默认的规则。
iptables -X 删除用户自定义的链。
iptables -Z 链的记数器清零。
iptables -A 末尾追加规则
iptables -I 前面或中间插入规则
iptables -D 删除指定链的规则
/etc/init.d/iptables save
将iptables的的策略写进/etc/sysconfig/iptables文件里,重启生效
规则命令总结
禁止访问3306端口
iptables -t filter -A INPUT -p tcp --dport 3306 -j DROP
iptables -A INPUT-p tcp --dport 52113 -j DROP
说明:
1.iptables默认用的就是filter表,因此,以上两条命令等价。
2. 其中的INPUT DROP要大写。
3. --jump -jtarget
target for rule(may load target extension)
基本的处理行为:ACCEPT(接受)、DROP(丢弃)、REJECT(拒绝)
比较:
DROP好于REJECT
根据源地址封
iptables -t filter -A INPUT -i eth0 -s 10.0.0.104 -j DROP
iptables -t filter -A INPUT -i eth0 ! -s 10.0.0.104 -j DROP
iptables -t filter -I INPUT 2 -i eth0 -s 10.0.0.0/24 -j DROP
删除指定规则
iptables -t filter -D INPUT -i eth0 -s 10.0.0.104 -j DROP
还可以指定条目删除:
iptables -nL --line-numbers
iptables -t filter -D INPUT 2
匹配指定协议外的所有协议
iptables -A INPUT -p ! tcp
匹配主机源IP
iptables -A INPUT -s 10.0.0.14
iptables -A INPUT ! -s 10.0.0.14
匹配网段
iptables -A INPUT -s 10.0.0.0/24
iptables -A INPUT ! -s 10.0.0.0/24
匹配单一端口
iptables -A INPUT -p tcp --sport 53
iptables -A INPUT -p udp --dport 53
匹配指定端口之外的端口
iptables -A INPUT -p tcp !--dport 22
iptables -I INPUT -p tcp ! --dport 22 -s 10.0.0.123 -j DROP
匹配端口范围
iptables -I INPUT -p tcp --dport 52000:53000 -j DROP
iptables -A INPUT -p tcp --sport 22:80
iptables -I INPUT -p tcp -m multiport --dport 21,22,23,24-j ACCEPT
iptables -I INPUT -p tcp --dport 3306:8809 -j ACCEPT
iptables -I INPUT -p tcp --dport 18:80 -j DROP
匹配ICMP类型
iptables -A INPUT -p icmp --icmp-type 8
例如:
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
iptables -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
iptables -t filter -I INPUT -p icmp --icmp-type 8 -i eth0 -s 192.168.1.0/24 -j DROP
匹配指定的网络接口
iptables -A INPUT -i eth0
iptables -A FORWARD -o eth0
匹配网络状态
-m state --state
NEW:已经或将启动新的连接
ESTABLISHED:已建立的连接
RELATED:正在启动新连接
INVALID:非法或无法识别的
例如:
FTP服务是特殊的,需要配状态连接。
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED-j ACCEPT
-m limit
--limit n/{second/minute/hour}:指定时间内的请求速率"n"为速率,后面为时间分别为:秒、分、时
--limit-burst [n]:在同一时间内允许通过的请求"n"为数字,不指定默认为5
fg:本机地址:172.16.14.1,允许172.16.0.0/16网络ping本机,但限制每分钟请求不能超过20,每次并发不能超过6个
iptables -A INPUT -s 172.16.0.0/16 -d 172.16.14.1 -p icmp--icmp-type 8 -m limit --limit 20/min --limit-burst 6 -j ACCEPT
iptables -AOUTPUT -s 172.16.14.1 -d 172.16.0.0/16 -p icmp --icmp-type 0 -j ACCEPT
企业案例
清空原有配置
iptables -F
iptables -X
iptables -Z
先允许自己连接
iptables -A INPUT -p tcp --dport 52113 -s 10.0.0.0/24 -jACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
设置默认规则
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
允许部分网段可以连接
iptables -A INPUT -s 192.168.1.0/24 -p all -j ACCEPT
iptables -A INPUT -s 10.0.0.0/24 -p all -j ACCEPT
打开对外提供服务的应用端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
……
允许ping 命令
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
允许关联的状态包
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED-j ACCEPT
保存并查看
/etc/init.d/iptables save
cat /etc/sysconfig/iptables
工作中我们第一次都是通过命令去写规则或者写成脚本,自动执行;之后的添加删除规则都是通过编辑/etc/sysconfig/iptables文件来实现的。然后执行/etc/init.d/iptables reload使其生效。
iptables常用企业案例
1、Linux主机防火墙(表:FILTER)
2、局域网共享上网(表:NAT 链:POSTROUTING)
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j SNAT --to-source 192.168.1.7
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j MASQUERADE
3、外部地址和端口,映射为内部地址和端口(表:NAT 链:PREROUTING)
iptables -t nat -A PREROUTING -d 10.0.0.7 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.8:9000
4、映射多个外网IP上网
iptables -t nat -A POSTROUTING -s 10.0.0.0/255.255.240.0 -o eth0 -j SNAT --to-source 124.42.60.11-124.42.60.16
iptables -t nat -A POSTROUTING -s 172.16.1.0/255.255.255.0 -o eth0 -j SNAT --to-source 124.42.60.103-124.42.60.106
用于企业办公网络,多人都去12306抢票,这样如果使用一个外网ip的话,会被当成黄牛给封了,造成无法访问12306.