iptables : 命令分析

1. iptables 规则中各参数的含义

-P 代表协议(PROTOCOL)

  • 指明当前规则针对的传输协议(如 TCP、UDP、ICMP 等)
  • 可能的参数值有:tcp, udp, icmp, all
  • 使用 “all” 表示适用于所有协议。而如果在规则中不指定 -p 参数,则默认使用 “all” 参数。一般不使用 “all” 这个值,要么指定某个特定的协议,要么就指定 -p 参数。
  • -p 的参数值既可以用名称(如 tcp)也可以用协议对应的数值(如 6 代表 tcp 协议)
  • /etc/protocols 文件中包含了所有允许的协议名称和相应数值
  • 也可以用长的参数名 –protocol

-S 代表源地址(SOURCE)

  • 指定数据包的源地址
  • 可以是 ip 地址,或者网络地址,或者主机名(hostname)
  • 例如:-s 192.168.1.101 表示针对特定的 ip 地址
  • 对于网络掩码,使用 /mask。例如,“-s 192.168.1.0/24″ 表示网络掩码为 255.255.255.0 的所有 192.168.1.x 地址都匹配。
  • 如果不指定 -s 参数,默认匹配所有源地址
  • 也可以用长参数名 –src 或者 –source

-D 代表目的地址(DESTINATION)

  • 指定数据包的目的地址
  • 使用方式与上面的 “-s” 一样(不同之处仅在于 -s 指源,而 -d 表示目的地址)
  • 也可以用长参数名 –dst 或者 –destination

-J 代表跳转(TARGET)

  • j 的意思是 “jump”(跳转) 到目标
  • 指定当某个数据包满足该规则的时候的就跳转到的下一个处理规则,而不再顺序执行后面的规则判断
  • 可能的值有:ACCEPT, DROP, QUEUE, RETURN,分别表示接受、丢弃、进入队列,返回(跳出,通常是从某个 chain 中跳回到调用该 chain 的上层 chain)
  • 也可以跳转到某个自定义的 chain 中,使用该 chain 的名称做为跳转目标

-I 代表 IN INTERFACE(入站接口)

  • i 表示 “input interface”(输入接口,即,指定网络数据处理的网卡,一般 eth0 即表示第一块有线网卡的外网接口,lo 表示局域网接口)
  • 可以直接理解为 “-i” 表示接口。不过,-i 和 -o 都表示接口,-i 表示输入时的接口,而 -o 特指输出用的接口。
  • 指定数据包进入 INPUT、FORWARD 和 PREROUTING 链时经由的接口。
  • 例如:-i eth0 表示该规则应该针对从 eth0 接口进来的数据包。
  • 如果不指定 -i 参数,则经由系统中所有可用的接口进入的数据包都可以匹配该规则。
  • 也可以使用长参数 –in-interface

-O 代表 OUT INTERFACE(出站接口)

  • o 表示 “output interface”(出站经由接口)
  • 指定发送出去的数据包进入 INPUT、FORWARD 和 PREROUTING 链时经由的接口。
  • 如果不指定 -o 参数,则经由系统中所有可用的接口发出的数据包都可以匹配该规则。
  • 也可以使用长参数 –out-interface

 

2. 其它防火墙参数选项

上面某些防火墙参数还有属于它自己的参数选项,可以与其配合使用。下面是一些常用的选项。

要使用这些参数选项,需要指定相应的参数,例如,要使用 “–sport” 选项,应该在规则中指定 “-p tcp” (或者 “-p udp”)等参数。

注意:所有这些选项前面都是 –(2个短横线 – )。

–SPORT 表示 SOURCE PORT (源端口,用于 -P TCP, 或者 -P UDP)

  • 默认匹配所有端口(未特别指定时)
  • 可以指定端口号(数字),也可以指定端口名称。例如,默认的 SSH 端口号码为 22,名称为 ssh,可以表示为 “–sport 22″ 或者 “–sport ssh”。
  • /etc/services 文件包含了所有允许的端口名称和对应的端口号码。
  • 在规则中使用号码比使用名称要好(效率高些)
  • 要匹配一个端口范围,使用英文半角冒号(:),如 22:100 匹配从 22 到 100 的所有端口号。
  • 也可以使用长名称 –source-port

–DPORT 表示 DESTINATION PORT (目的端口,-P TCP, 或者 -P UDP)

  • 与 –sport 的用法相同,区别仅在于对象是目的端口
  • 也可以使用长名称 –destination-port

–TCP-FLAGS 表示 TCP FLAGS (用于 -P TCP)

  • 可以使用英文半角逗号(,)来指定多个 TCP 状态标识
  • 可能值有:SYN, ACK, FIN, RST, URG, PSH。可以全用,也可以不用。

–ICMP-TYPE 表示 ICMP TYPE (ICMP 类型,用于 -P ICMP)

  • 当使用 icmp 协议 “-p icmp” 的时候,可以使用 “–icmp-type” 特别指定 ICMP 类型
  • 例如,使用 “–icmp-type 0″ 表示 “Echo Reply”,“–icmp-type 8″ 表示 “Echo”。

 

 

参考:

[1]http://blog.csdn.net/reyleon/article/details/12976341  [详细]

[2]https://cnzhx.net/blog/common-iptables-cli/      [详细]

[3]http://man.linuxde.net/iptables

iptables clean all rules (五)

1.
错误的写法:
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X

我刚开始这么写,导致我被挡在墙外了,每次还要重启服务器。

2. 正确的写法:
#!/bin/sh
echo “Stopping firewall and allowing everyone…”
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

注:别忘了 accept

 

参考:http://www.cyberciti.biz/tips/linux-iptables-how-to-flush-all-rules.html

iptables 配置: 端口转发 (四)

1. 本机端口转发(例子:将80端口转发到81端口)
iptables -t nat -A OUTPUT -d 127.0.0.1 -p tcp –dport 80 -j REDIRECT –to-ports 81

2. 从本机出去的网址,目标端口是80 ,统一转发到预设的81端口上
比如: 想访问www.baidu.com ——-> 81端口(预设的网页)
iptables -t nat -A OUTPUT -p tcp –dport 80 -j REDIRECT –to-ports 81

[待验证]iptables -t nat -A PREROUTING -p tcp –dport 80 -j REDIRECT –to-ports 8080

iptables block facebook.com (三)

1. 无效

iptables -I OUTPUT -p tcp -d www.facebook.com -j REJECT
iptables -I OUTPUT -p udp -d www.facebook.com -j REJECT

无效

iptables -I OUTPUT  -d www.facebook.com -j REJECT

无效

iptables -I FORWARD -d www.facebook.com -j DROP

无效

iptables -I FORWARD -d www.facebook.com -j DROP

iptables -I OUTPUT  -d www.facebook.com -j REJECT

2. 有效

iptables -I FORWARD -d www.facebook.com -j DROP
iptables -I OUTPUT -p tcp -d www.facebook.com -j REJECT
iptables -I OUTPUT -p udp -d www.facebook.com -j REJECT

3. 有效

iptables -I FORWARD -m string –algo bm –string “facebook.com” -j REJECT #DROP
iptables -I OUTPUT -m string –algo bm –string “facebook.com” -j REJECT # DROP

iptables 使用注意 (一)

1.  我第一次开始使用iptables的时候,是参考鸟哥书里的教程

[root@www ~]# vim bin/firewall.sh
#!/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin; export PATH

# 1. 清除规则
iptables -F
iptables -X
iptables -Z

# 2. 设定政策
iptables -P   INPUT DROP
iptables -P  OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

# 3~5. 制订各项规则
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
#iptables -A INPUT -i eth0 -s 192.168.1.0/24 -j ACCEPT

# 6. 写入防火墙规则配置文件
/etc/init.d/iptables save

[root@www ~]# sh bin/firewall.sh

注【tips】: 网卡要选对,刚开始用笔记本调试,使用wifi上网,我把书里的东西照搬过来,

造成不能上网,需要将eth0改成wlan0,网卡要根据自己实际的情况,进行配置。

2. 刚开始调试iptables 最好先在本地linux上先测试,测试ok,再在远程服务器上使用。要不然

刚开始很容易造成连不上远程服务器的情况

3. 调试 iptables block domain  【如禁止访问taobao.com , qq.com , youku.com】的时候,最好

每次都把缓存清一下,要不然很容易造成误判。

有一次,明明这条command应该有效果的,可是网页还是正常访问,这都是cache造成的,

浪费了很多时间。

4. iptables 顺序要注意。规则顺序的重要性

-A  -I  区别使用

sudo iptables -L -n  [查看规则顺序]

iptables block domains

1. http://www.cyberciti.biz/tips/linux-iptables-examples.html

#11.1: Example – Block Facebook.com Domain

First, find out all ip address of facebook.com, enter:
# host -t a www.facebook.com

Sample outputs:

www.facebook.com has address 69.171.228.40
Find CIDR for 69.171.228.40, enter:
# whois 69.171.228.40 | grep CIDR

Sample outputs:

CIDR: 69.171.224.0/19
To prevent outgoing access to www.facebook.com, enter:
# iptables -A OUTPUT -p tcp -d 69.171.224.0/19 -j DROP

You can also use domain name, enter:
# iptables -A OUTPUT -p tcp -d www.facebook.com -j DROP
# iptables -A OUTPUT -p tcp -d facebook.com -j DROP

2. iptables ping
iptables -A INPUT -p icmp -m comment –comment “Allow Ping to work as expected” -j ACCEPT

参考:https://www.linode.com/docs/security/firewalls/control-network-traffic-with-iptables

 

3. iptables block domain , 国内网址验证ok,国外还不行

facebook.com taobao.com  有使用udp

iptables -A OUTPUT -d taobao.com -j REJECT
iptables -A OUTPUT -d www.taobao.com -j REJECT

4.   iptables  http  https

qq.com , taobao.com   使用http , 使用80 port

google.com facebook.com  这些使用的是https , 使用443 port  [重点考虑 ipv6]

chenwei@li653-123:~$ host facebook.com
facebook.com has address 173.252.120.6
facebook.com has IPv6 address 2a03:2880:2130:cf05:face:b00c:0:1
facebook.com mail is handled by 10 msgin.vvv.facebook.com.