iptables 防火墙

iptables防火墙

一、iptables防火墙基本概述

1.应用场景

1.主机安全
2.端口转发/ip转发
3.内部共享上网

2.iptables工作流程

1.配置防火墙规则可以添加在下面,也可以添加在前面,是有顺序的
2.匹配规则时是按照从上到下依次匹配
3.只要符合匹配到的规则,就不再往下匹配
4.如果都没有匹配上,则匹配默认规则
5.默认规则最后执行,默认规则是全部都允许

6.匹配次数越多的规则越往前放

二、iptables四表五链

#四表:
1.filter表
2.nat表
3.raw表
4.mangle表

#五链:
1.INPUT
2.OUTPUT
3.FORWARD
4.PREROUTING
5.POSTROUTING

1.filter表

主要作用就是阻止和允许访问
#包含的链:
1.INPUT:过滤进入主机的数据包
2.OUTPUT:过滤从主机出去的数据包
3.FORWARD:转发经过主机的数据包

2.nat表

主要作用就是IP和端口转发
#包含的链:
1.PREROUTING:数据流入时,改写数据包地址
2.POSTROUTING:数据流出时,改写数据包地址
3.OUTPUT:过滤从主机出去的数据包

三、iptables安装

1.安装

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

2.安装iptbles支持的内核模块

[root@m01 ~]# modprobe ip_tables
[root@m01 ~]# modprobe iptable_filter
[root@m01 ~]# modprobe iptable_nat
[root@m01 ~]# modprobe ip_conntrack
[root@m01 ~]# modprobe ip_conntrack_ftp
[root@m01 ~]# modprobe ip_nat_ftp
[root@m01 ~]# modprobe ipt_state

#查看加载的模块
[root@m01 ~]# lsmod | egrep 'filter|nat|ipt'

modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state

3.启动

[root@m01 ~]# systemctl stop firewalld.service

[root@m01 ~]# systemctl start iptables.service

4.iptables常用命令

#常用参数
1.链管理:
    -N:new, 自定义一条新的规则链;
    -X:delete,删除自定义的规则链;
        注意:仅能删除 用户自定义的 引用计数为0的 空的 链;
    -P:Policy,设置默认策略;对filter表中的链而言,其默认策略有:
           ACCEPT:接受
           DROP:丢弃
           REJECT:拒绝
    -E:重命名自定义链;引用计数不为0的自定义链不能够被重命名,也不能被删除;
    
2.规则管理:
    -A:append,追加规则;
    -I:insert, 插入,要指明位置,省略时表示第一条;
    -D:delete,删除;
        (1) 指明规则序号;
        (2) 指明规则本身;
    -R:replace,替换指定链上的指定规则;

    -F:flush,清空指定的规则链;
    -Z:zero,置零;
        iptables的每条规则都有两个计数器:
            (1) 匹配到的报文的个数;
            (2) 匹配到的所有报文的大小之和;        
3.查看:
	-L:list, 列出指定鏈上的所有规则;
    -n:numberic,以数字格式显示地址和端口号;
    -v:verbose,详细信息;
        -vv, -vvv
    -x:exactly,显示计数器结果的精确值;
    --line-numbers:显示规则的序号;

四、iptables常用操作

1.查看防火墙

#默认是filter表
[root@m01 ~]# iptables -nL
Chain 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:22
REJECT     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

2.查看指定表

#-t:	指定表
[root@m01 ~]# iptables -nL -t nat

3.清除防火墙规则

[root@m01 ~]# iptables -F
[root@m01 ~]# iptables -X
[root@m01 ~]# iptables -Z

4.添加防火墙规则

[root@m01 ~]# iptables -t filter -A INPUT -p tcp --dport 22 -j DROP

[root@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:22

5.删除防火墙规则

#防火墙规则加序号
[root@m01 ~]# iptables -nL --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:2
2    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

#删除指定id的规则
[root@m01 ~]# iptables -D INPUT 3

五、防火墙配置实例

1.禁止访问22端口

[root@m01 ~]# iptables -t filter -A INPUT -p tcp --dport 22 -j DROP

iptables 	#防火墙命令
-t 			#指定表
filter 		#filter表
-A 			#追加规则到链
INPUT 		#指定链
-p 			#指定协议
tcp 		#tcp协议
--dport 	#指定端口
22 			#端口号
-j 			#指定动作
DROP		#丢弃

2.禁止IP访问

[root@m01 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.7 -j DROP

-s			#指定IP
10.0.0.7	#IP地址或网段

3.禁止IP网段

[root@m01 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.0/24 -i eth0 -j DROP

-i			#指定网卡

4.只允许某个IP访问

#方式一:
[root@m01 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.1 -j ACCEPT
[root@m01 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.0/24 -j DROP

#方式二:
[root@m01 ~]# iptables -t filter -A INPUT -p tcp ! -s 10.0.0.1 -i eth0 -j DROP

!  			#取反

5.拒绝端口范围

#如果端口是连续的
[root@m01 ~]# iptables -t filter -A INPUT -p tcp --dport 22:200 -j DROP

#如果端口不是连续的
[root@m01 ~]# iptables -t filter -A INPUT -p tcp -m multiport --dport 22:200,3000:4000 -j DROP 

六、企业如何配置

1.配置之前

1.考虑一下哪些机器需要防火墙
2.该服务器部署了哪些服务
	nginx
	sshd
3.服务的端口
	80
	443
	22
4.其他端口全部拒绝

2.配置

3.防火墙规则永久生效

#防火墙配置文件,当重启防火墙时,会读取配置文件,配置文件中的配置才会永久生效
[root@m01 /home/lhd]# vim /etc/sysconfig/iptables

#想要永久生效配置,配置好防火墙策略,测试成功
[root@m01 /home/lhd]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]

七、iptables转发

1.端口转发

[root@m01 ~]# iptables -t nat -A PREROUTING -d 10.0.0.61 -p tcp --dport 5555 -j DNAT --to-destination 172.16.1.7:22

[root@m01 ~]# iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.61

2.IP转发

iptables -t nat -A PREROUTING -d 10.0.1.61 -j DNAT --to-destination 172.16.1.7
iptables -A FORWARD -i eth1 -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth0 -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -i eth0 -d 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth1 -d 172.16.1.0/24 -j ACCEPT
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.61

3.内部共享上网

echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p

iptables -A FORWARD -i eth1 -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth0 -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -i eth0 -d 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth1 -d 172.16.1.0/24 -j ACCEPT
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.61
posted @ 2020-09-16 14:29  nick_xm  阅读(117)  评论(0编辑  收藏  举报