Linux iptables

[四表五链]
四表:raw, mangle, nat, filter
五链:INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING

 

filter表(默认):
  INPUT   #处理目标地址是本机的数据包
  OUTPUT   #处理源地址是本机的数据包
  FORWARD   #处理转发的数据流,需要ip_forward=1

nat表:
  PREROUTING   #处理路由前的数据包,修改目的IP,与DNAT一起使用
  POSTROUTING   #处理路由后的数据包,修改源IP,与SNAT一起使用
  OUTPUT     #处理本机产生的数据包

mangle表:负责修改数据包中特殊的路由标记,如TTL,TOS,MARK等
  INPUT
  OUTPUT
  PREROUTING
  POSTROUTING
  FORWARD

raw表:设置raw表一般是不再让iptables做数据包的链接跟踪处理,提高性能
  PREROUTING
  OUTPUT
  eg:
  iptables -t raw -A PREROUTING -d 1.2.3.4 -p tcp --dport 80 -j NOTRACK
  iptables -A FORWARD -m state --state UNTRACKED -j ACCEPT

*优先级是raw -> mangle -> nat -> filter

 

 

 

 


[操作]
1.规则查看

-t    #选择表
-L   #显示所选链的所有规则,如果没指定链,则显示所有链的所有规则
-n   #数字输出,IP和port会以数字的形式打印
-h   #显示帮助信息
-V   #显示版本信息
-v   #显示详细信息
-x   #扩展数字,显示包和字节计数器的精确值
--line-numbers   #显示规则的行号

2.规则清除
-F   #默认清除filter表中所有链的所有规则,可以指定表,指定链
-X   #默认删除filter中所有自定义链(必须没被规则引用),可以指定表,指定链
-Z   #默认清零filter中所有链的计数器,可以指定表,指定链

3.规则管理
-A   #追加一条规则,用法:iptables -t $table -A $chain $rule
-I   #插入一条规则,用法:iptables -t $table -I $chain $number $rule,默认number为1,插入头部
-R   #替换一条规则,用法:iptables -t $table -R $chain $number $new_rule
-D   #删除一条规则,用法:iptables -t $table -D $chain $number;iptables -t $table -D $chain $rule
-P   #定义默认规则,用法:iptables -t $table -P


4.规则参数
-p   #指定协议,tcp/udp/icmp等
--sport   #源端口
--dport   #目的端口
-i   #接收接口
-o   #发送接口
-j   #动作,ACCEPT/DROP/REJECT
-m   #匹配扩展模块
--syn   #tcp新建连接的请求报文

--tcp-flags mask comp   #mask表示检查范围,comp表示匹配
*有效值:SYN,ACK,FIN,RST,URG,PSH
*可以指定多个有效值,用逗号分割
*可以用ALL或者NONE
例如:
iptables -A INPUT -p tcp --tcp-flags ALL SYN,ACK -j ACCEPT   #匹配SYN,ACK标记为1,其它标记为0的数据包
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST SYN -j ACCEPT   #匹配SYN标记为1,ACK,FIN,RST标记为0的数据包
--syn 等同于 --tcp-flags ALL SYN 都是去匹配tcp新建连接请求报文

--icmp-type #icmp类型,8:请求 0:应答

5.扩展模块
1)state 状态检查
  NEW: 新建会话
  ESTABLISHED: 已经建立的会话
  RELATED: 有关联关系的连接,例如ftp
  INVALID: 无法识别的连接
  UNPACKED: 未被追踪的数据包
iptables -A INPUT -p tcp --dport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT

2)limit 速率限制
  --limit:最大平均匹配速率,取值有/second,/minute,/hour,/day;默认3/hour
  --limit-burst:设置阈值,默认是5
iptables -A INPUT -p icmp -m limit --limit 20/minute --limit-burst 10 -j ACCEPT #一开始给的阈值是10个数据包,每匹配到一个,limit-burst的值减1,当匹配到10个,limit-burst的值为0,以后每经过5秒,limit-burst的值加1,又能匹配到一个包

3)mac 用于MAC地址匹配
iptables -A INPUT -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP

4)multiport 用于匹配非连续的多个端口,做多指定15个
iptables -A INPUT -p tcp -m multiport --dport 22,80,443 -j ACCEPT #非连续端口匹配
iptables -A INPUT -p tcp --dport 20:100 -j ACCEPT #连续端口匹配

5)iprange 匹配一段IP,而非整个网段
iptables -A INPUT -p tcp -m iprange -s 10.10.10.1-10.10.10.5 --dport 22 -j ACCEPT

6)string 字符串匹配
iptables -A INPUT -p tcp --dport 80 -m string --string "sex" -j DROP

7)connlimit 连接数限制
  --connlimit-upto n #当 连接数 <= n 时匹配
  --connlimit-above n #当连接数 >n 时匹配
  --connlimit-mask n #使用前缀长度对主机进行分组
iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 100 -j REJECT #限制同一IP连接数,以IP位单位
iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 100 --connlimit-mask 24 -j REJECT #限制每组c类IP的连接数,以组位单位

8)time 用于时间匹配
  --timestart 09:00:00
  --timestop 18:00:00
  --weekdays 1,2,3,4,5,6,7
  --monthdays 1,2,3..
  --datestart 2019-01-01
  --datestop 2019-12-31


6.Nat
echo 1 > /proc/sys/net/ipv4/ip_forward #开启主机路由功能

SNAT源地址映射方式,一般用在固定外网的环境下
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j SNAT --to-source 10.10.10.10 #将源地址为192.168.10.0网段的ip地址映射到外网接口eth0的ip 10.10.10.10

MASQUERADE源地址伪装的方式,一般用在动态外网IP的环境下,当然也可用在固定外网IP环境下
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE

DNAT方式,相当于SNAT的反向代理,用在外网需要主动方位内网某个IP的环境下
iptables -t nat -A PREROUTING -d 10.10.10.10 -j DNAT --to-destination 192.168.10.1

REDRECT 重定向,本地使用 8080 这个 port 来启动 WWW ,但是别人都以80来访问,这时候需要重定向80->8080
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

posted on 2019-11-13 14:12  骑着蜗牛追太阳  阅读(388)  评论(0编辑  收藏  举报

导航