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