iptables 语法格式:

表及链的操作选项:

  -N :新增链

  -I  : 插入规则

  -A :添加规则

  -D :删除规则

  -R :修改某条规则

  -X :删除自定义的链(前提为该链被引用次数为0及规则为空)

  -F :清除所有规则

  -Z:清零 (清除所有链的计数值)

  -P :定义默认规则(ACCEPT,DROP,REJECT..)

  -L :列出所有规则

    -v:列出详细信息

    -n:以数字方式显示信息

    常用:iptables -vnL

  -E:改变链名称

规则匹配相关选项:

  -s   :源地址(例:192.168.2.0/16)

  -d   :目标地址

  --dport  :目标端口(例:137:140为137~140所有端口,可单独指定某个端口)

  --sport   :源端口

  -p :指定protocol (例 tcp,udp ,..)

  -i :入方向网卡接口

  -o :出方向网卡接口

 

实战:

1.使用iptables放行icmp协议,允许自己ping对端,及允许对端ping 自己

1 iptables -I OUTPUT -s 192.168.2.243 -d 192.168.2.244 -p icmp --icmp-type 8/0 -j ACCEPT   (实现自己访问对端)
2 iptables -I INPUT -s 192.168.2.244 -d 192.168.2.243 -p icmp --icmp-type 0/0 -j ACCEPT
3 
4 
5 iptables -I INPUT -s 192.168.2.244 -d 192.168.2.243 -p icmp --icmp-type 8/0 -j ACCEPT  (实现对端访问本机)
6 iptables -I OUTPUT -s 192.168.2.243 -d 192.168.2.244 -p icmp --icmp-type 0/0 -j ACCEPT

 

2.使用iptables放行DNS流量

1 1.实现允许本机(DNS服务器)访问外部根DNS服务器作递归查询
 2 iptables -I OUTPUT -s 192.168.2.244 -p tcp --dport 53 -j ACCEPT
 3 iptables -I OUTPUT -s 192.168.2.244 -p udp --dport 53 -j ACCEPT
 4 
 5 iptables -I INPUT -d 192.168.2.244 -p tcp --sport 53 -j ACCEPT
 6 iptables -I INPUT -d 192.168.2.244 -p udp --sport 53 -j ACCEPT
 7 
 8 
 9 
10 
11 2.实现客户机访问本机作域名解析
12 iptables -I INPUT -s 192.168.15.86 -d 192.168.2.244 -p tcp --dport 53 -j ACCEPT
13 iptables -I INPUT -s 192.168.15.86 -d 192.168.2.244 -p udp --dport 53 -j ACCEPT
14 
15 iptables -I OUTPUT -s 192.168.2.244 -d 192.168.15.86 -p tcp --sport 53 -j ACCEPT
16 iptables -I OUTPUT -s 192.168.2.244 -d 192.168.15.86 -p udp --sport 53 -j ACCEPT

 

 

3. 放行samba 流量

1 iptables -I INPUT -s 192.168.2.244 -d 192.168.2.243 -p tcp -m multiport --dport 139,445 -j ACCEPT
2 iptables -I INPUT -s 192.168.2.244 -d 192.168.2.243 -p udp -m multiport --dport 137,138 -j ACCEPT
3 4 
5 iptables -I OUTPUT -s 192.168.2.243 -d 192.168.2.244 -p tcp -m multiport --sport 139,445 -j ACCEPT
6 iptables -I OUTPUT -s 192.168.2.243 -d 192.168.2.244 -p udp -m multiport --sport 137,138 -j ACCEPT

 

扩展匹配 选项:

  -m 

    multiport    (匹配多个离散端口)

      --dports 22,23,139,445 ...

      --sports ...

      示例: 同时开放多个端口

      

1 iptables -I INPUT -s 192.168.2.2 -d 192.168.2.3 -p tcp -m multiport --dport 22,23,80,445 -j ACCEPT
2 iptables -I OUTPUT -s 192.168.2.3 -d 192.168.2.2 -p tcp -m multiport --sport 22,23,80,445 -j ACCEPT

 

    iprange   (匹配地址范围)

      --src-range

      --dst-range   

      示例:icmp同时放行多个客户机访问

1 iptables -I INPUT -d 192.168.20.243 -p icmp --icmp-type 8/0 -m iprange --src-range 192.168.20.240-192.168.20.245 -j ACCEPT
2 iptables -I OUTPUT -s 192.168.20.243 -p icmp --icmp-type 0/0 -m iprange --dst-range 192.168.20.240-192.168.20.245 -j ACCEPT

 

    time  (匹配放行时间)

      --timestart

      --timestop

      [!] --weekdays day,[day,...]

      [!] --monthdays day,[day,...] 

      示例:匹配指定时间段内访问telnet-server

 

1 iptables -R INPUT 1 -s 192.168.20.244 -d 192.168.20.243 -p tcp --dport 23 -m time --timestart 10:00 --timestop 14:00 --kerneltz -j ACCEPT
2 iptables -R OUTPUT 1 -s 192.168.20.243 -d 192.168.20.244 -p tcp --sport 23 -m time --timestart 10:10 --timestop 14:00 --kerneltz -j ACCEPT
3 
4 注:--kerneltz 为使用内核时区 (时区错误会导致指定时间内无法连接)
5 timedatectl set-timezone Asia/Shanghai   (修改指定时区为Shanghai
1 iptables -R OUTPUT 1 -s 192.168.20.243 -d 192.168.20.244 -p tcp --sport 23 -m time --timestart 10:10 --timestop 14:00 --kerneltz --weekdays 1,2,3,4,5 -j ACCEPT
2 iptables -R INPUT 1 -s 192.168.20.244 -d 192.168.20.243 -p tcp --dport 23 -m time --timestart 10:00 --timestop 14:00 --kerneltz --weekdays 1,2,3,4,5 -j ACCEPT
3 
4 --weekdays 可指定工作日连接,1为周一

 

    string    (过滤字符串)

      --algo  bm   (指定http加密方式一般为bm)

      --string pattern  

  

1 iptables -I OUTPUT -s 192.168.20.243 -p tcp --sport 80 -m string --algo bm --string "iptables" -j REJECT
2 http page 中出现 iptables 字样时  REJECT

 

    connlimit      (限制连接次数)

      --connlimit-upto    (小于多少次允许,根据防火墙默认策略制定)

      --connlimit-above   (在几次之上就拒绝)

    

1 iptables -I INPUT -s 192.168.15.86 -p tcp --syn -m connlimit --connlimit-above 5 -j REJECT
2 syn=1出现5次以上拒绝该地址连接(syn=1为TCP第一次握手状态)

 

    limit   (限制传输速率)

      --limit rate[/second /minute /hour /day ]  (速率/时间)

      --limit-burst number   (令牌桶大小)

      

1 iptables -R INPUT 1 -d 192.168.20.243 -p icmp --icmp-type 8/0 -m limit --limit-burst=5 --limit=10/minute -j ACCEPT
2 指定icmp协议允许每分钟10次请求,每分钟最多同时连续5次

 

    state   (追踪报文状态,根据状态定制策略)

        需提前装载模块:

          nf_conntrack

          nf_conntrack_ipv4

          nf_conntrack_ftp    (用于追踪FTP协议数据,装载后可使用 RELATED 状态)

      --state (NEW,ESTABLISHED,RELATED,INVALID,UNTRACKED) 

      示例:

  

1 iptables -I OUTPUT -s 192.168.20.243 -m state --state ESTABLISHED -j ACCEPT
2 出站报文状态为ESTABLISHED状态时放行,一般客户端初次请求报文状态为NEW,服务端回应时报文状态为ESTABLISHED

 

 

-j  target   (匹配条件后执行动作)

    ACCEPT    (允许)

    DROP   (丢弃)

    REJECT   (拒绝)

    LOG   (记录日志)

       --log-level    (指定日志等级)

       --log-prefix    (添加日志信息前缀)

      默认日志文件为: /var/log/message

  

1 iptables -A INPUT -d 192.168.20.243 -p tcp --dport 22 -j LOG --log-prefix access-ssh

 

     

NAT

  当主机作为对外防火墙提供服务时,可用NAT对原,目的地址作转换;(类似与路由器NAT功能)

  示例:

  

1  iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.16.30.254  (转换源地址为 172.16.30.254
2 
3 iptables -t nat -A PREROUTING -d 192.168.20.243 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.2:8080
4 (端口非必须指定,默认为目标端口