ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Linux安全之防火墙——iptables超详细教程及使用示例!

Linux安全之防火墙——iptables超详细教程及使用示例!

原创 Linux操作系统 作者:老男孩Linux 时间:2025-11-14 14:03:30 0 删除 编辑

  在计算机科学领域中,防火墙(Firewall)是一个架设在互联网与企业内网之间的信息安全系统,根据企业预定的策略来监控往来的传输。

  防火墙可能是一台专属的网络设备或是运行于主机上来检查各个网络接口上的网络传输。它是目前最重要的一种网络防护设备,从专业角度来说,防火墙是位于两个(或多个)网络间,实行网络间访问或控制的一组组件集合之硬件或软件。

  从物理层面讲,防火墙可以分为硬件防火墙和软件防火墙:

  ①硬件防火墙:即整个企业入口,如深信服;

  ②软件防火墙:即开源软件、网站内部;

  下面是几个必须要熟悉的名词:

  ①容器:瓶子,罐子,用于存放东西;

  ②表(table):存放链的容器,防火墙最大概念;

  ③链(chain):存放规则的容器;

  ④规则(policy):准许或拒绝规则,未来书写的防火墙条件就是各种防火墙规则;

  iptables执行过程

  防火墙是层层过滤的,实际是按照配置规则的顺序从上到下,从前到后进行过滤的。

  如果匹配成功规则,即明确表示是拒绝(DROP)还是接收(ACCEPT),数据包就不再向下匹配新的规则。

  如果规则中没有明确表明是阻止还是通过的,也就是没有匹配规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。

  防火墙的默认规则是所有规则都匹配完才会匹配的。

  四表说明

  filter表说明

  用于实现防火墙功能,屏蔽或准许端口 ip。

  nat表说明

  用于实现nat功能,如共享上网(内网服务器上外网)、端口映射和ip映射。

  环境准备及命令

  iptables启动或关闭的命令

m01  10.0.0.61   172.16.1.61web01   10.0.0.7  172.16.1.7web02   10.0.0.8  172.16.1.8
yum install -y  iptables-services[root@oldboy-m01 ~]# uname -r 3.10.0-862.el7.x86_64[root@oldboy-m01 ~]# yum install -y  iptables-services [root@m01 ~]# rpm -ql   iptables-services /etc/sysconfig/ip6tables/etc/sysconfig/iptables                          #防火墙的配置文件    /usr/lib/systemd/system/ip6tables.service 
/usr/lib/systemd/system/iptables.service         #防火墙服务配置文件(命令)  systemctl start iptables [root@m01 ~]# rpm -ql iptables /usr/sbin/iptables           #iptables 命令 添加/删除/查看 规则(4表伍链)
  /usr/sbin/iptables-save      #iptables规则 输出(保存)/usr/sbin/iptables-restore   #  恢复#防火墙相关模块 加载到内核中#写入到开机自启动.modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state 
#永 久 cat >>/etc/rc.local<<EOF
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state 
EOF[root@m01 ~]# lsmod |egrep 'filter|nat|ipt'nf_nat_ftp             12770  0 nf_conntrack_ftp       18638  1 nf_nat_ftp
iptable_nat            12875  0 nf_nat_ipv4            14115  1 iptable_nat
nf_nat                 26787  2 nf_nat_ftp,nf_nat_ipv4
nf_conntrack          133053  6 nf_nat_ftp,nf_nat,xt_state,nf_nat_ipv4,nf_conntrack_ftp,nf_conntrack_ipv4
iptable_filter         12810  0 ip_tables              27126  2 iptable_filter,iptable_nat
libcrc32c              12644  3 xfs,nf_nat,nf_conntrack[root@m01 ~]# systemctl stop firewalld [root@m01 ~]# systemctl disable   firewalld [root@m01 ~]# systemctl start iptables.service [root@m01 ~]# systemctl enable iptables.service Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service.[root@m01 ~]# systemctl status iptables.service ● iptables.service - IPv4 firewall with iptables
   Loaded: loaded (/usr/lib/systemd/system/iptables.service; enabled; vendor preset: disabled)
   Active: active (exited) since Fri 2021-05-28 09:59:53 CST; 5s ago
  Process: 7971 ExecStart=/usr/libexec/iptables/iptables.init start (code=exited, status=0/SUCCESS)
 Main PID: 7971 (code=exited, status=0/SUCCESS)May 28 09:59:53 m01 systemd[1]: Starting IPv4 firewall with iptables...May 28 09:59:53 m01 iptables.init[7971]: iptables: Applying firewall rules: [  OK  ]May 28 09:59:53 m01 systemd[1]: Started IPv4 firewall with iptables#查看filter表中的规则 ,默认查看的是filter表 [root@m01 ~]# iptables -nLChain INPUT (policy ACCEPT)target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)target     prot opt source               destination         
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)target     prot opt source               destination     
#查看指定表中的规则[root@m01 ~]# iptables  -t nat -nL Chain PREROUTING (policy ACCEPT)target     prot opt source               destination         
Chain INPUT (policy ACCEPT)target     prot opt source               destination         
Chain OUTPUT (policy ACCEPT)target     prot opt source               destination         
Chain POSTROUTING (policy ACCEPT)target     prot opt source               destination

  iptables命令参数

  配置filter表规则

  在正式配置前,先备份,清空规则

[root@m01 ~]# iptables -F [root@m01 ~]# iptables -X[root@m01 ~]# iptables -Z[root@m01 ~]# iptables -nL Chain INPUT (policy ACCEPT)target     prot opt source               destination         
Chain FORWARD (policy ACCEPT)target     prot opt source               destination         
Chain OUTPUT (policy ACCEPT)target     prot opt source               destination

  禁止访问22端口

#拒绝用户访问22端口 iptables -t filter  -A  INPUT   -p tcp --dport 22 -j DROP#查看规则并加上序号iptables -t filter  -nL   --line-number 
#删除规则iptables -t filter  -D INPUT  1   #根据序号删除

  删除规则-D

  封ip 屏蔽某个ip

[root@oldboy-m01 ~]# iptables -I INPUT  -s 10.0.0.7   -j DROP [root@oldboy-m01 ~]# iptables -I INPUT  -s 172.16.1.7   -j DROP [root@oldboy-m01 ~]# [root@oldboy-m01 ~]# iptables -nL   Chain INPUT (policy ACCEPT)target     prot opt source               destination         
DROP       all  --  172.16.1.7           0.0.0.0/0           DROP       all  --  10.0.0.7             0.0.0.0/0           Chain FORWARD (policy ACCEPT)target     prot opt source               destination         
Chain OUTPUT (policy ACCEPT)target     prot opt source               destination   
[root@m01 ~]# iptables -I INPUT  -s 172.16.1.0/24  -j DROP

  禁止网段连入(禁止10.0.0.0/24网段访问 8888端口)

iptables -I INPUT  -s 10.0.0.0/24  -p tcp  --dport 8080  -j DROP
[root@web01 ~]# ssh 10.0.0.61 hostname ^C[root@web01 ~]# ssh 172.16.1.61 hostname root@172.16.1.61's password: m01

  只允许指定网段连入(允许172.16.1.0网段)

#方法1: 利用 !  进行排除 iptables -I INPUT  ! -s 172.16.1.0/24  -j DROP#只准许 10.0.0.0/24 访问  言外之意   除了 10.0.0.0/24  都拒绝 iptables -I INPUT ! -s 10.0.0.0/24  -j DROP

#方法2:  修改链默认规则  修改为拒绝  添加准许先配置好规则 准许规则
修改默认规则[root@oldboy-m01 ~]# iptables -nLChain INPUT (policy ACCEPT)target     prot opt source               destination         
Chain FORWARD (policy ACCEPT)target     prot opt source               destination         
Chain OUTPUT (policy ACCEPT)target     prot opt source               destination         
[root@oldboy-m01 ~]# iptables -A  INPUT   -s 10.0.0.0/24   -j  ACCEPT [root@oldboy-m01 ~]# iptables -nLChain INPUT (policy ACCEPT)target     prot opt source               destination         
ACCEPT     all  --  10.0.0.0/24          0.0.0.0/0           Chain FORWARD (policy ACCEPT)target     prot opt source               destination         
Chain OUTPUT (policy ACCEPT)target     prot opt source               destination         
[root@oldboy-m01 ~]# iptables -P INPUT DROP                #修改默认规则 [root@oldboy-m01 ~]# iptables -nLChain INPUT (policy DROP)target     prot opt source               destination         
ACCEPT     all  --  10.0.0.0/24          0.0.0.0/0           Chain FORWARD (policy ACCEPT)target     prot opt source               destination         
Chain OUTPUT (policy ACCEPT)target     prot opt source               destination    
#测试完成后 修改回去 iptables  -P  INPUT  ACCEPT

  指定多个端口

[root@oldboy-m01 ~]# iptables -I  INPUT  -p tcp --dport 8888   -j DROP [root@oldboy-m01 ~]# iptables -I  INPUT  -p tcp --dport 9999   -j DROP [root@oldboy-m01 ~]# iptables -nL Chain INPUT (policy ACCEPT)target     prot opt source               destination         
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:9999DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8888Chain FORWARD (policy ACCEPT)target     prot opt source               destination         
Chain OUTPUT (policy ACCEPT)target     prot opt source               destination  
#指定多个端口  -m multiport   -p tcp   --dport 80,443  iptables  -A INPUT   -m multiport -p tcp  --dport 80,443  -j  ACCEPT 
iptables -nL 
iptables  -A INPUT    -p tcp  --dport 1:1024   -j  ACCEPT 
#补充:#[root@m01 ~]# iptables -I INPUT  -p tcp -m multiport ! --dport 80,443  -j DROP#如果是 连续的端口  可以不加上-m multiport   1:1024 [root@m01 ~]# iptables -I INPUT  -p tcp  --dport 1024:65535  -j DROP

 


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69952968/viewspace-3101559/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
老男孩it教育——致力于帮助有志向的年轻人通过努力学习获得体面的工作和生活。专注于Linux云计算运维、Python全栈开发、网络安全、新媒体运营、容器云架构师、MySQL数据库、go语言的培训。学习可call:18710030740

注册时间:2019-11-06

  • 博文量
    389
  • 访问量
    1010040