当前位置:   article > 正文

iptables部署和使用_iptables -a input -p icmp --icmp-type 8 -j drop

iptables -a input -p icmp --icmp-type 8 -j drop

1.iptables是什么?

iptables是开源的基于数据包过滤的防火墙工具。

2.iptables企业应用场景

1、主机防火墙(filter表的INPUT链)。
2、局域网共享上网(nat表的POSTROUTING链)。半个路由器,NAT功能。
3、端口及IP映射(nat表的PREROUTING链),硬防的NAT功能。
4、IP一对一映射。

3.商用防火墙品牌

华为
深信服
思科
H3C
Juniper
天融信
飞塔
网康
绿盟科技
金盾

4.iptables工作流程

iptables是采用数据包过滤机制工作的,所以它会对请求的数据包的包头数据进行分析,并根据我们预先设定的规则进行匹配来决定是否可以进入主机。

1.防火墙是一层层过滤的。实际是按照配置规则的顺序从上到下,从前到后进行过滤的。
2.如果匹配上了规则,即明确表明是阻止还是通过,此时数据包就不在向下匹配新规则了。
3.如果所有规则中没有明确表明是阻止还是通过这个数据包,也就是没有匹配上规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。
4.防火墙的默认规则是对应链的所有的规则执行完以后才会执行的(最后执行的规则)。

5.iptables环境准备

5.1.安装iptables管理命令

[root@m01 ~]# yum install iptables-services -y

5.2.加载防火墙的内核模块

  1. modprobe ip_tables
  2. modprobe iptable_filter
  3. modprobe iptable_nat
  4. modprobe ip_conntrack
  5. modprobe ip_conntrack_ftp
  6. modprobe ip_nat_ftp
  7. modprobe ipt_state

5.3.查看已加载的模块

[root@m01 ~]# lsmod |egrep 'filter|nat|ipt'

5.4.启动防火墙

  1. a.首先停止firewalld
  2. systemctl stop firewalld
  3. systemctl disable firewalld
  4. b.开启iptables
  5. systemctl start iptables.service
  6. systemctl enable iptables.service

6.iptables基本操作命令

6.1.查看防火墙规则

  1. [root@m01 ~]# iptables -nL
  2. Chain INPUT (policy ACCEPT)
  3. target prot opt source destination
  4. Chain FORWARD (policy ACCEPT)
  5. target prot opt source destination
  6. Chain OUTPUT (policy ACCEPT)
  7. target prot opt source destination

6.2.清除防火墙规则

  1. iptables -F <- 清除所有规则,不会处理默认的规则
  2. iptables -X <- 删除用户自定义的链
  3. iptables -Z <- 链的计数器清零(数据包计数器与数据包字节计数器)

6.3.添加防火墙规则

  1. iptables -t <-指定表d(efault: `filter')
  2. iptables -A <-把规则添加到指定的链上,默认添加到最后一行。
  3. iptables -I <-插入规则,默认插入到第一行(封IP)。
  4. iptables -D <-删除链上的规则

6.4.网络连接状态

  1. NEW:已经或将启动新的连接
  2. ESTABLISHED:已建立的连接
  3. RELATED:正在启动的新连接
  4. INVALID:非法或无法识别的

6.5.删除某个规则

  1. iptables -nL --line-numbers 查看规则号码
  2. iptables -D INPUT 1 删除指定链上的指定序号
  3. iptables A INPUT -p tcp -m state --dport 22 -j DROP
  4. iptables -nL
  5. iptables -nL --line-numbers
  6. iptables -D INPUT 1

7.iptables实战

7.1.禁止某个端口访问

  1. iptables -t filter -A INPUT -p tcp --dport 22 -j DROP
  2. 规则解释:
  3. -p #<==指定过滤的协议-p(tcp,udp,icmp,all
  4. --dport #<==指定目标端口(用户请求的端口)。
  5. -j #<==对规则的具体处理方法(ACCEPT,DROP,REJECT,SNAT/DNAT)
  6. --sport #<==指定源端口。

7.2.禁止某个IP访问

  1. iptables -I INPUT -p tcp -s 10.0.0.253 -i eth0 -j DROP
  2. iptables -A INPUT -p tcp ! -s 10.0.0.1 -i eth0 -j DROP
  3. iptables -A INPUT -p tcp ! -s 10.0.0.0/24 -i eth0 -j DROP
  4. 规则解释:
  5. -s #<==指定源地址或网段(192.168.1.0/24)。 ! 取反。
  6. -d #<==指定目的地址(nat表prerouting)。
  7. -i #<==进入的网络接口(eth0,eth1)。
  8. -o #<==出去的网络接口(eth0,eth1)。

7.3.禁止除跳板机以外的IP访问

iptables -I INPUT -p tcp ! -s 10.0.0.1 -j DROP

7.4.匹配端口范围

  1. iptables -I INPUT -p tcp -m multiport --dport 21,22,23,24 -j DROP
  2. iptables -I INPUT -p tcp --dport 3306:8809 -j ACCEPT
  3. iptables -I INPUT -p tcp --dport 18:80 -j DROP #<==最佳

7.5.匹配ICMP类型

  1. iptables -A INPUT -p icmp --icmp-type 8
  2. 例:iptables -A INPUT -p icmp --icmp-type 8 -j DROP
  3. iptables -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
  4. iptables -A FORWARD -s 192.168.1.0/24 -p icmp -m icmp --icmp-type any -j ACCEPT

8.简单练习

8.1、封掉10.0.0.7

iptables -I INPUT -s 10.0.0.7 -j DROP

8.2、让10.0.0.7和SSH客户端(10.0.0.1)服务器可以Ping,其它的不能Ping

  1. iptables -I INPUT -p icmp --icmp-type 8 -s 10.0.0.7 -j ACCEPT
  2. iptables -I INPUT 2 -p icmp ! -s 10.0.0.1 --icmp-type 8 -j DROP

8.3、封掉3306端口

iptables -I INPUT -p tcp --dport 3306 -j DROP

8.4、单向访问控制(A可以访问B, 但B不能访问A)

  1. iptables -I INPUT -m iprange --src-range 192.168.8.200-192.168.8.254 -m state --state NEW -j DROP -m comment --comment "IDC网络策略隔离"
  2. iptables -I INPUT -m iprange --src-range 192.168.60.200-192.168.60.254 -m state --state NEW -j DROP -m comment --comment "IDC网络策略隔离"

9.iptables企业案例

9.1部署一个安全的防火墙

两种思想:针对默认规则而言。
逛公园:黑名单
1、默认规则默认是允许的状态。
看电影:白名单
2、默认规则默认是不允许的状态。更安全。
看电影的思想更安全。

  1. 实战部署:
  2. [root@m01 ~]# iptables -F
  3. [root@m01 ~]# iptables -X
  4. [root@m01 ~]# iptables -Z
  5. [root@m01 ~]# iptables -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT
  6. [root@m01 ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  7. [root@m01 ~]# iptables -A INPUT -s 10.0.0.0/24 -j ACCEPT
  8. [root@m01 ~]# iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT
  9. [root@m01 ~]# iptables -A INPUT -i lo -j ACCEPT
  10. [root@m01 ~]# iptables -P INPUT DROP
  11. [root@m01 ~]# iptables -P FORWARD DROP
  12. [root@m01 ~]# iptables -P OUTPUT ACCEPT
  13. [root@m01 ~]# iptables -nL
  14. Chain INPUT (policy DROP)
  15. target prot opt source destination
  16. ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 80,443
  17. ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
  18. ACCEPT all -- 10.0.0.0/24 0.0.0.0/0
  19. ACCEPT all -- 172.16.1.0/24 0.0.0.0/0
  20. ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
  21. Chain FORWARD (policy DROP)
  22. target prot opt source destination
  23. Chain OUTPUT (policy ACCEPT)
  24. target prot opt source destination

命令集合:

  1. iptables -F
  2. iptables -X
  3. iptables -Z
  4. iptables -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT
  5. iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  6. iptables -A INPUT -s 10.0.1.0/24 -j ACCEPT
  7. iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT
  8. iptables -A INPUT -i lo -j ACCEPT
  9. iptables -P INPUT DROP
  10. iptables -P FORWARD DROP
  11. iptables -P OUTPUT ACCEPT
  12. iptables -nL

9.2局域网共享上网

实现内网上网:
网关服务器:172.16.1.61

9.2.1.开启路由转发功能

  1. [root@oldboy ~]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
  2. [root@oldboy ~]# sysctl -p
  3. net.ipv4.ip_forward = 1

9.2.2.iptables的filter表的FORWARD链允许转发

  1. [root@oldboy ~]# iptables -P INPUT ACCEPT
  2. [root@oldboy ~]# iptables -P FORWARD ACCEPT

9.2.3.加载防火墙模块

  1. modprobe ip_tables
  2. modprobe iptable_filter
  3. modprobe iptable_nat
  4. modprobe ip_conntrack
  5. modprobe ip_conntrack_ftp
  6. modprobe ip_nat_ftp
  7. modprobe ipt_state

9.2.4.模块加载完成后,在进行查看

  1. [root@oldgirl ~]# lsmod | egrep ^ip
  2. iptable_nat 5923 0
  3. iptable_filter 2793 1
  4. ip_tables 17831 2 iptable_nat,iptable_filter
  5. ipt_REJECT 2351 2
  6. ipv6 336282 290 bridge,lockd

9.2.5.iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.61

内网服务器:172.16.1.4

1.首先关闭外网网卡

ifdown eth0         

2.将网关服务器的内网IP设置为网关

route add default gw 172.16.1.61          

3.测试:ping www.baidu.com

  1. [root@web01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
  2. TYPE=Ethernet
  3. BOOTPROTO=none
  4. DEFROUTE=yes
  5. NAME=eth0
  6. DEVICE=eth0
  7. ONBOOT=no
  8. IPADDR=10.0.0.7
  9. PREFIX=24
  10. GATEWAY=10.0.0.2
  11. DNS1=172.16.1.62
  12. [root@web01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
  13. TYPE=Ethernet
  14. BOOTPROTO=none
  15. DEFROUTE=yes
  16. NAME=eth1
  17. DEVICE=eth1
  18. ONBOOT=yes
  19. IPADDR=172.16.1.7
  20. GATEWAY=172.16.1.61
  21. PREFIX=24
  22. DNS1=172.16.1.62

9.端口映射

m01操作:

iptables -t nat -A PREROUTING -d 10.0.1.61 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.7:22

命令拆解:

  1. 表:nat
  2. 链:PREROUTING
  3. 目标IP:10.0.1.61
  4. 目标端口:9000
  5. 协议:tcp
  6. 动作:DNAT
  7. 目标IP:172.16.1.7
  8. 目标端口:22

访问测试:

  1. zhangyadeMacBook-Pro:~ zhangya$ ssh root@10.0.1.61 -p 9000
  2. root@10.0.1.61's password:
  3. Last login: Tue Aug 20 09:38:42 2019 from 172.16.1.51
  4. [root@web01 ~]#

9.4IP映射

  1. [root@m01 ~]# ip a add 10.0.1.62/24 dev eth0 label eth0:0
  2. [root@m01 ~]# iptables -t nat -A PREROUTING -d 10.0.1.62 -j DNAT --to-destination 172.16.1.7
  3. [root@m01 ~]# iptables -nL -t nat
  4. Chain PREROUTING (policy ACCEPT)
  5. target prot opt source destination
  6. DNAT tcp -- 0.0.0.0/0 10.0.1.61 tcp dpt:9000 to:172.16.1.7:22
  7. DNAT all -- 0.0.0.0/0 10.0.1.62 to:172.16.1.7
  8. Chain INPUT (policy ACCEPT)
  9. target prot opt source destination
  10. Chain OUTPUT (policy ACCEPT)
  11. target prot opt source destination
  12. Chain POSTROUTING (policy ACCEPT)
  13. target prot opt source destination
  14. SNAT all -- 172.16.1.0/24 0.0.0.0/0 to:10.0.1.61
  15. 测试访问:
  16. zhangyadeMacBook-Pro:~ zhangya$ ssh root@10.0.1.62
  17. root@10.0.1.62's password:
  18. Last login: Wed Aug 21 13:30:04 2019 from 10.0.1.1
  19. [root@web01 ~]# hostname
  20. web01

10.iptables注意事项

1.从上往下依次匹配
2.一但匹配上,就不在往下匹配了
3.默认规则,默认的情况,默认规则是放行所有

-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

-A INPUT :把这条规则添加到INPUT链的最后一行
-p tcp :指定协议为tcp
-m state --state NEW :匹配TCP的连接状态
-m tcp --dport 22 :匹配TCP协议的目标端口
-j ACCEPT :执行动作 放行

iptables A INPUT -p tcp -m state --dport 22 -j DROP
禁止一个数据包:
tcp协议
访问的端口是22

iptables -A INPUT -p tcp --dport 22 -j DROP
iptables -nL
iptables -nL --line-numbers
iptables -D INPUT 1

禁止源地址是10.0.0.7的主机访问22端口
iptables -A INPUT -p tcp -s 10.0.0.7 --dport 22 -j DROP

禁止源地址是10.0.0.7的主机访问任何端口
iptables -A INPUT -p tcp -s 10.0.0.7 -j DROP

禁止源地址是10.0.0.8的主机访问80端口
iptables -A INPUT -p tcp -s 10.0.0.8 --dport 80 -j DROP

禁止除了10.0.0.7以外的地址访问80端口
iptables -A INPUT -p tcp ! -s 10.0.0.7 --dport 80 -j DROP

2条规则冲突,会以谁先谁为准
iptables -I INPUT -p tcp -s 10.0.0.7 --dport 22 -j ACCEPT
iptables -I INPUT -p tcp -s 10.0.0.7 --dport 22 -j DROP

禁止10.0.0.7访问22和80端口
iptables -I INPUT -p tcp -s 10.0.0.7 -m multiport --dport 22,80 -j DROP

禁止10.0.0.7访问22到100之间的所有端口
iptables -A INPUT -p tcp -s 10.0.0.7 --dport 22:100 -j DROP

禁止所有主机ping
iptables -A INPUT -p icmp --icmp-type 8 -j DROP

放行10.0.0.7可以ping
iptables -I INPUT 2 -p icmp --icmp-type 8 -s 10.0.0.7 -j ACCEPT

只允许10.0.0.7可以ping
ACCEPT icmp – 10.0.0.7 0.0.0.0/0 icmptype 8
DROP icmp – 0.0.0.0/0 0.0.0.0/0 icmptype 8

等同于上一条,优化版,只要不是10.0.0.7就不允许ping
iptables -I INPUT -p icmp --icmp-type 8 ! -s 10.0.0.7 -j DROP

优先级:
匹配频次最高的条件放前面

100次
80 90
22 10

安全策略:
一种是广场上巡逻的人,默认认为大家都是安全的,只有通缉令上的人需要关注
一种是火车进站安检,默认所有人都是不安全的,只有有票的人才放行

iptables -F
iptables -X
iptables -Z
iptables -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 10.0.0.0/24 -j ACCEPT
iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -nL

共享上网
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.61

-t nat :NAT表
-A POSTROUTING :POSTROUTING链
-s 172.16.1.0/24 :源地址172.16.1.0/24
-j SNAT :SNAT 改写源地址
–to-source 10.0.0.61 :将源地址改写成10.0.0.61

172.16.1.7发给百度的数据包格式
源端口: 80
目的端口: 80
源IP: 172.16.1.7
目的IP: 百度的IP
网关: 172.16.1.61

如果172.16.1.7想上网,需要改成如下的包格式

10.0.0.61访问百度
源端口: 80
目的端口: 80
源IP: 10.0.0.61
目的IP: 百度的IP
网关: 10.0.0.2

天坑
如果你的默认规则设置了拒绝所有,又执行了清除规则的语句-F
那就意味着,所有的请求全部都拒绝了
原因是-F不会改变默认规则

[root@web01 ~]# iptables -nL
Chain INPUT (policy DROP)
target prot opt source destination

Chain FORWARD (policy DROP)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

解决:
物理机:
1.去机房自己清空
2.让机房的人重启服务器,前提条件是规则没有写入配置里
云服务器:
直接通过控制台恢复

如何避免:
1.测试规则之前,先写个定时任务,每隔5分钟重启一次iptables

FORWARD链默认为DROP的时候共享上网失效
解决方法:
第一种,添加2条规则
iptables -A FORWARD -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -d 172.16.1.0/24 -j ACCEPT
第二种:修改FORWARD链默认规则为ACCEPT
iptables -P FORWARD ACCEPT

端口映射:
访问10.0.0.61的9000端口,跳转到172.16.1.7的22端口

访问10.0.0.61的9000端口的数据包格式
源端口: 9000
目的端口: 9000
源IP: 10.0.0.1
目的IP: 10.0.0.61

源端口: 22
目的端口: 22
源IP: 10.0.0.1
目的IP: 172.16.1.7:22

iptables -t nat -A PREROUTING -d 10.0.0.61 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.7:22
注意:
改写数据包的目标IP和端口
用到的是PREROUTING链

IP映射:
ip a add 10.0.1.62/24 dev eth0 label eth0:0
iptables -t nat -A PREROUTING -d 10.0.1.62 -j DNAT --to-destination 172.16.1.7

保存命令:
iptables-save
iptables-save > iptables_m01
iptables-restore < iptables_m01
iptables-save > /etc/sysconfig/iptables

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/632047
推荐阅读
相关标签
  

闽ICP备14008679号