当前位置:   article > 正文

(CentOS7)配置防火墙iptables(安装、规则语法、示例实验)跟着做一遍就会了_iptables.service - ipv4 firewall with iptables

iptables.service - ipv4 firewall with iptables

目录

实验拓扑图

1 静态IP、子网掩码、网关配置、路由配置

win7:(vmnet1)

centos1:(中间那台,ens33=vmnet1;ens37=vmnet2)

centos2(vmnet2)

2 centos2联网装一下iptables相关组件

3 现在再次恢复之前的静态IP,看看哪些操作会被拒绝

3.1 发现win7 ping不通cent2了​

3.2 当win7访问Cent1提供的网页服务时,在Iptables打开之后发现也被拒绝了

4 怎么才能让操作被允许呢?咋写规则?

4.1 让win7 可以访问cent1网页

4.2 现在介绍具体的规则语法

几个注意事项:

常见的控制类型

添加新的规则

查看规则列表

删除、清空规则

规则的匹配条件

4.3 让win7 ping 通 cent2

4.4 删除FORWARD链的规则

4.5 设置默认策略

5 规则的备份及还原


iptables和netfilter的关系是一个很容易让人搞不清的问题。很多的知道iptables却不知道netfilter。其实iptables只是Linux防火墙的管理工具而已,位于/sbin/iptables。真正实现防火墙功能的是netfilter,它是Linux内核中实现包过滤的内部结构。

iptables不止有防火墙功能,还有NAT、SNAT等功能

4个功能(表):raw、mangle、nat、filter

实验拓扑图

1 静态IP、子网掩码、网关配置、路由配置

俩网卡都是仅主机模式

要配置静态ip,先要在

【虚拟网络编辑器】里取消DHCP

顺便设置一下子网网段范围

之后就开始PC的配置。

win7:(vmnet1)

centos1:(中间那台,ens33=vmnet1;ens37=vmnet2)

不确定对应关系的可以禁用一下试试,就知道对应关系了

ens33:

ens37:

这个图形界面的设置在  【设置】-【网络】里面,设置好了之后关闭再打开生效。找不到图形界面直接编辑配置文件也是一样的效果。

  1. [root@localhost ryan]# cd /etc/sysconfig/network-scripts
  2. [root@localhost network-scripts]# ls
  3. ifcfg-ens33 ifdown-ib ifdown-routes ifup-aliases ifup-isdn ifup-sit network-functions
  4. ifcfg-lo ifdown-ippp ifdown-sit ifup-bnep ifup-plip ifup-Team network-functions-ipv6
  5. ifcfg-有线连接_1 ifdown-ipv6 ifdown-Team ifup-eth ifup-plusb ifup-TeamPort
  6. ifdown ifdown-isdn ifdown-TeamPort ifup-ib ifup-post ifup-tunnel
  7. ifdown-bnep ifdown-post ifdown-tunnel ifup-ippp ifup-ppp ifup-wireless
  8. ifdown-eth ifdown-ppp ifup ifup-ipv6 ifup-routes init.ipv6-global

编辑那个ifcfg-ens33即可,编辑网卡ens37再复制一份文件编辑即可。我的ifcfg-ens33文件内容如下

  1. TYPE=Ethernet
  2. PROXY_METHOD=none
  3. BROWSER_ONLY=no
  4. BOOTPROTO=none
  5. DEFROUTE=yes
  6. IPV4_FAILURE_FATAL=no
  7. IPV6INIT=yes
  8. IPV6_AUTOCONF=yes
  9. IPV6_DEFROUTE=yes
  10. IPV6_FAILURE_FATAL=no
  11. IPV6_ADDR_GEN_MODE=stable-privacy
  12. NAME=ens33
  13. UUID=d32dd883-7c91-41d6-b5ef-aaed07c33ef6
  14. DEVICE=ens33
  15. ONBOOT=no
  16. IPV6_PRIVACY=no
  17. IPADDR=192.168.1.254
  18. PREFIX=24
  19. GATEWAY=192.168.1.254

centos2(vmnet2)


 现在win7还 ping 不通 centos2,不过并不是因为没有配置路由转发表,因为只有一个路由器(centos1)并不需要配置路由表,只需要开启centos的【路由转发】即可

echo "1" > /proc/sys/net/ipv4/ip_forward

 现在win7就可以ping 通centos2了

 现在实验环境搭建完成,可以进行iptables实验了

2 centos2联网装一下iptables相关组件

对中间那台主机做如下操作(安装iptables相关组件,禁用系统自带防火墙,启动iptables):

  1. yum install -y iptables*
  2. yum update iptables 
  3. yum install iptables-services
  4. systemctl stop firewalld
  5. systemctl disable firewalld.service
  6. systemctl mask firewalld
  7. service iptables start

 出现这个状态(Active)即启动iptables成功

  1. [root@localhost ryan]# service iptables status
  2. Redirecting to /bin/systemctl status iptables.service
  3. ● iptables.service - IPv4 firewall with iptables
  4. Loaded: loaded (/usr/lib/systemd/system/iptables.service; disabled; vendor preset: disabled)
  5. Active: active (exited) since 四 2020-09-03 11:51:36 CST; 2min 58s ago
  6. Main PID: 44909 (code=exited, status=0/SUCCESS)
  7. 903 11:51:36 localhost.localdomain systemd[1]: Starting IPv4 firewall wit...
  8. 903 11:51:36 localhost.localdomain iptables.init[44909]: iptables: Applyi… ]
  9. 903 11:51:36 localhost.localdomain systemd[1]: Started IPv4 firewall with...
  10. Hint: Some lines were ellipsized, use -l to show in full.

3 现在再次恢复之前的静态IP,看看哪些操作会被拒绝

3.1 发现win7 ping不通cent2了

 查看当前iptables filter表状态

  1. [root@localhost ryan]# iptables -t filter -nvL
  2. Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
  3. pkts bytes target prot opt in out source destination
  4. 119 11248 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
  5. 1 60 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
  6. 96 6580 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
  7. 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
  8. 108 13542 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
  9. Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
  10. pkts bytes target prot opt in out source destination
  11. 12 784 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
  12. Chain OUTPUT (policy ACCEPT 293 packets, 28400 bytes)
  13. pkts bytes target prot opt in out source destination

每个表都有专门写规则的地方(链chain)
filter里面有三个chain

INPUT:

FORWARD:转发规则链(当源地址以及目标地址都不是本机,经过了我,意思就是让我转发),可以看到转发规则链,all reject,所以win7 ping 不通 cent2 。因为cent1拒绝转发。

OUTPUT:

现在让iptables的规则显示一秒变化一次 

watch -n1 iptables -t filter -nvL

让win7 ping -t 192.168.2.7,会发现cent1的forword这里在不停的增长

而拒绝了之后得给win7一个回复呀,就发现负责恢复的OUTPUT链也在不停的处理数据

3.2 当win7访问Cent1提供的网页服务时,在Iptables打开之后发现也被拒绝了

搭建网页教程见 : https://blog.csdn.net/Drifter_Galaxy/article/details/108355841

这个原因出在INPUT链上;当访问cent1的网页时,源192.168.1.7 目标 192.168.1.254 协议TCP 端口80

第一条规则,all允许,想得美,有附加条件的 state RELATED,ESTABLISHED,即已经建立的连接才被允许。

第二条规则,

icmp协议的,不看

第三条规则,

协议all,源地址目标地址都没限制,然而进口必须是lo——local,这条是说本地环回地址无限制

第四条规则,

这个总是tcp协议了吧,对源地址目标地址也没限制,为啥没连上呢??  仔细看后面那句话,dpt = destination port,即目标端口需要是22才行。

第五条规则,

最后的规则了如果这条还不满足,那就由默认规则进行匹配,哦对了,默认规则是ACCEPT

然而咱们失败了,所以肯定是第五条规则干掉的,第5条说不管啥协议,来源啥,目标啥,都拒绝。

4 怎么才能让操作被允许呢?咋写规则?

4.1 让win7 可以访问cent1网页

iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT

现在可以啦,因为这条规则允许了任何源以tcp协议访问80端口。-I是插入的意思,会在最上面

4.2 现在介绍具体的规则语法

语法构成:

iptables 【-t 表名】 选项 【链名】 【条件】 【-j 控制类型】

eg:iptables -t filter -I INPUT -p icmp -j REJECT
这条规则是阻止ping测试的

几个注意事项:

  • 不指定表名时,默认指filter表
  • 不指定链名时,默认指表中的所有链
  • 除非设置链的默认规则,否则必须指定匹配条件
  • 选项、链名、控制类型必须使用大写字母,其余均为小写

常见的控制类型

  • ACCEPT:允许通过
  • DROP:直接拒绝,不给出任何回应信息
  • REJECT:拒绝通过,必要时会给出提示
  • LOG:记录日志信息,然后传给下一条规则继续匹配

添加新的规则

  • -A:在链的末尾追加一条规则
  • -I:在链的开头(或指定序号)插入一条规则 

eg:iptables -I INPUT 2 -p icmp -j REJECT 

查看规则列表

  • -L:列出所有规则条目
  • -n:以数字形式显示地址、端口等信息
  • -v:以更详细的方式显示规则信息
  • --line-numbers:查看规则时,显示规则的序号

删除、清空规则

  • -D:删除链内指定序号(或内容) 的一条规则
  • -F:清空所有的规则

规则的匹配条件

通用匹配

-可以直接使用,不依赖其他条件或者扩展

-包括网络协议、IP地址、网络接口等条件

隐含匹配

-要求以特定的协议匹配作为前提

-包括端口、TCP标记、ICMP类型等条件

显式匹配

-要求以“-m扩展模块”的形式明确指出类型

-包括多端口、MAC地址、IP范围、数据包状态等条件

常见的通用匹配条件
协议匹配-p 协议名
地址匹配-s 源地址、-d目的地址
接口匹配-i入站网卡、-o出站网卡
常见的隐含匹配条件(配合通用匹配使用)
端口匹配--sport源端口、--dport目标端口
TCP标记匹配--tcp-flag检查范围 被设置的标记
ICMP类型匹配--icmp-type ICMP类型

                                              隐含匹配就可以实现,我ping别人ping的通,别人ping我不通

常见的显式匹配条件
多端口匹配

-m multiport --sport 源端口列表

-m multiport --dport 目标端口列表

IP范围匹配-m iprange --src-range IP范围
MAC地址匹配-m mac --mac-source MAC地址

4.3 让win7 ping 通 cent2

看目前默认的FORWARD是REJECT,所以ping的时候,需要cent1进行转发时,就会提示目标主机不可达

现在再来一条FORWRAD规则
iptables -I FORWARD -s 0.0.0.0/0 -d 0.0.0.0/0 -j DROP
现在的提示信息变成了,请求超时,因为icmp包直接被丢了。

现在干正事!

iptables -I FORWARD -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT

行了

4.4 删除FORWARD链的规则

  • 删除FORWARD链的第二条规则

iptables -D FORWARD 2

再次查看FORWARD链规则 : iptables -t filter -nvL

  • 如果删除FORWARD链所有规则呢》
iptables -F FORWARD 

没有规则啦,这时候生效的就是默认规则,即ACCEPT。所以现在也是可以ping的通的

  • 如果不指定链名,那么就是清空所有链
iptables -F
  1. [root@localhost ryan]# iptables -t filter -nvL
  2. Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
  3. pkts bytes target prot opt in out source destination
  4. Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
  5. pkts bytes target prot opt in out source destination
  6. Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
  7. pkts bytes target prot opt in out source destination

默认都是ACCEPT,现在win7可以访问cent2的网页了

当然cent2本身防火墙必须是关的才行(通过以下命令临时关闭)

  1. [root@localhost html]# setenforce 0
  2. [root@localhost html]# systemctl stop firewalld

担心这些规则都删了是不是不太好啊。。。其实只需要重启一下都出来了

  1. [root@localhost ryan]# service iptables restart
  2. Redirecting to /bin/systemctl restart iptables.service
  3. [root@localhost ryan]# iptables -t filter -nvL
  4. Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
  5. pkts bytes target prot opt in out source destination
  6. 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
  7. 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
  8. 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
  9. 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
  10. 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
  11. Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
  12. pkts bytes target prot opt in out source destination
  13. 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
  14. Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
  15. pkts bytes target prot opt in out source destination

4.5 设置默认策略

设置FORWARD默认策略为DROP成功

  1. [root@localhost ryan]# iptables -P FORWARD DROP
  2. [root@localhost ryan]# iptables -t filter -nvL
  3. Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
  4. pkts bytes target prot opt in out source destination
  5. 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
  6. 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
  7. 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
  8. 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
  9. 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
  10. Chain FORWARD (policy DROP 0 packets, 0 bytes)
  11. pkts bytes target prot opt in out source destination
  12. 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
  13. Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
  14. pkts bytes target prot opt in out source destination
  15. [root@localhost ryan]# iptables -P FORWARD REJECT
  16. iptables: Bad policy name. Run `dmesg' for more information.

注意:默认策略只能为ACCEPT和DROP,不能为REJECT

5 规则的备份及还原

导出(备份)规则

每次重启,之前写的规则失效了多气啊!

用iptables-save工具,可结合重定向输出保存到指定文件!

iptables-save > /opt/iprules_all.txt
  1. [root@localhost ryan]# iptables-save > /tmp/ipt.txt
  2. [root@localhost ryan]# cat /tmp/ipt.txt
  3. # Generated by iptables-save v1.4.21 on Thu Sep 3 15:05:56 2020
  4. *filter
  5. :INPUT ACCEPT [0:0]
  6. :FORWARD DROP [0:0]
  7. :OUTPUT ACCEPT [54:5092]
  8. -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
  9. -A INPUT -p icmp -j ACCEPT
  10. -A INPUT -i lo -j ACCEPT
  11. -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
  12. -A INPUT -j REJECT --reject-with icmp-host-prohibited
  13. -A FORWARD -j REJECT --reject-with icmp-host-prohibited
  14. COMMIT
  15. # Completed on Thu Sep 3 15:05:56 2020

那怎么从文件导入呢?

iptables-restore < /tmp/ipt.txt

备份还原很麻烦哎!怎么保存为默认规则呢,

service iptables save

怎么重启都没事了、

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

闽ICP备14008679号