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组成:

  1. filter: 默认有三个chain——INPUT,OUTPUT和FORWARD

  2. nat: 做NAT工作,默认三个chain——OUTPUT,PREROUTING,POSTROUTING

  3. mangle: 对包的一些参数进行修改,默认有五个chain——INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING

  4. raw:作用未明,默认有两个chain——OUTPUT,PREROUTING

不同的table分管不同的方面。iptables的默认命令是对filter生效。可以用-t nat指定对nat生效。

  • 所谓的配置防火墙就是:

向chain添加rule:

  每个chain都是由一系列rule组成的,比如你要更改INPUT这个chain来允许用户访问你机器上的某个端口。比如:这个INPUT有两个rule,一个用于允许用户访问你的5901端口,一个用于允许用户访问你的5902端口。


图解


iptables总结_iptables


查看并加载iptables相关模块

  1. lsmod |egrep "nat|filter"

  2. 载入下列模块

    modprobe ip_tables

    modprobe iptable_filter

    modprobe iptable_nat

    modprobe ip_conntrack

    modprobe ip_conntrack_ftp

    modprobe ip_nat_ftp

    modprobe ipt_state


iptables基础命令

  1. /etc/init.d/iptables 

    Usage: iptables {start|stop|reload|restart|condrestart|status|panic|save}

  2. iptables -nL --line-numbers  查看iptables已添加的规则

  3. iptables -F  清除所有规则,不会处理默认的规则。

  4. iptables -X  删除用户自定义的链。

  5. iptables -Z  链的记数器清零。

  6. iptables -A  末尾追加规则

  7. iptables -I  前面或中间插入规则

  8. iptables -D  删除指定链的规则

  9. /etc/init.d/iptables save 

    将iptables的的策略写进/etc/sysconfig/iptables文件里,重启生效


规则命令总结


  1. 禁止访问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

  2. 根据源地址封

    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

  3. 删除指定规则

    iptables -t filter -D INPUT -i eth0 -s 10.0.0.104 -j DROP

    还可以指定条目删除:

    iptables -nL --line-numbers

    iptables -t filter -D INPUT 2

  4. 匹配指定协议外的所有协议

    iptables -A INPUT -p ! tcp

  5. 匹配主机源IP

    iptables -A INPUT -s 10.0.0.14

    iptables -A INPUT ! -s 10.0.0.14

  6. 匹配网段

    iptables -A INPUT -s 10.0.0.0/24

    iptables -A INPUT ! -s 10.0.0.0/24

  7. 匹配单一端口

    iptables -A INPUT -p tcp --sport 53

    iptables -A INPUT -p udp --dport 53 

  8. 匹配指定端口之外的端口

    iptables -A INPUT -p tcp !--dport 22

    iptables -I INPUT -p tcp ! --dport 22  -s 10.0.0.123 -j DROP

  9. 匹配端口范围

    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

  10. 匹配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 

  11. 匹配指定的网络接口

    iptables -A INPUT -i eth0

    iptables -A FORWARD -o eth0

  12. 匹配网络状态

    -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

  13. -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



企业案例


  1. 清空原有配置

    iptables -F

    iptables -X

    iptables -Z

  2. 先允许自己连接

    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

  3. 设置默认规则

    iptables -P INPUT DROP

    iptables -P OUTPUT ACCEPT

    iptables -P FORWARD DROP  

  4. 允许部分网段可以连接

    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  

  5. 打开对外提供服务的应用端口

    iptables -A INPUT -p tcp --dport 80 -j ACCEPT

    ……

  6. 允许ping 命令

    iptables -A INPUT -p icmp --icmp-type 8  -j ACCEPT

  7. 允许关联的状态包

    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    iptables -A OUTPUT -m state --state ESTABLISHED,RELATED-j ACCEPT

  8. 保存并查看

    /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.