目录

  • iptables防火墙
  • 一、iptables防火墙
  • 1.应用场景
  • 2.iptables工作机制
  • 二、iptables四表五链
  • 1.filter表
  • 2.NAT表
  • 三、安装iptables防火墙
  • 1.停止firewalld防火墙
  • 2.安装iptables
  • 3.安装内核模块
  • 4.启动iptables
  • 四、iptables常用参数
  • 1.查看防火墙(默认filter表)
  • 2.查看指定表规则
  • 3.清空防火墙规则
  • 4.配置防火墙规则
  • 5.删除防火墙规则
  • 五、防火墙配置实例
  • 1.禁止端口访问
  • 2.拒绝IP访问
  • 3.禁止IP网段访问
  • 4.只允许某个IP访问
  • 5.只允许某个端口范围访问
  • 六、企业中一般如何配置
  • 1.配置前先思考
  • 2.配置安全规则
  • 3.企业中一般的配置
  • 天坑:
  • 七、防火墙规则永久生效
  • 1.默认配置文件
  • 2.自己配置防火墙规则永久生效
  • 八、iptables配置内部共享上网
  • 1.在防火墙机器上操作
  • 2.在没有外网的机器上配置

iptables防火墙

一、iptables防火墙

1.应用场景

1.主机安全
2.内部共享上网
3.端口或IP映射

2.iptables工作机制

1.匹配规则是从上往下依次匹配
2.只要匹配到规则,就不再往下匹配
3.如果没有匹配的规则,走默认规则
4.默认规则是允许所有

#注意:经常匹配的规则往上配置

二、iptables四表五链

centos6配置lvm centos6配置防火墙规则_自定义

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

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

1.filter表

#重要作用阻止和允许访问服务器

#包含的链:
1.INPUT:过滤进入主机的数据包
2.FORWARD:转发数据包
3.OUTPUT:过滤从主机出去的数据包

2.NAT表

#主要做端口或IP转发

#包含的链
1.PREROUTING:在数据包到达防火墙时,改写数据包目的地址和端口(端口转发)
2.OUTPUT:过滤从主机出去的数据包
3.POSTROUTIONG:在数据包到达防火墙时,改写数据包目的地址和端口(内部共享上网)

三、安装iptables防火墙

1.停止firewalld防火墙

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

2.安装iptables

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

3.安装内核模块

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

#检查加载的内核模块
[root@web01 ~]# lsmod |egrep 'filter|nat'

4.启动iptables

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

四、iptables常用参数

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

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

1.查看防火墙(默认filter表)

[root@web01 ~]# 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.查看指定表规则

[root@web01 ~]# iptables -nL -t nat
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

3.清空防火墙规则

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

4.配置防火墙规则

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

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

5.删除防火墙规则

-D:delete,删除;
	(1) 指明规则序号;
	(2) 指明规则本身;
	
#查看防火墙规则
[root@web01 ~]# 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:3306
2    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:6379
3    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:111
4    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:10050
5    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:873
6    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:443
7    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80

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

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

#删除指定序号的规则
[root@web01 ~]# iptables -D INPUT 7
[root@web01 ~]# 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:3306
2    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:6379
3    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:111
4    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:10050
5    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:873
6    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:443

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

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

#删除规则本身
[root@web01 ~]# iptables -D INPUT -p tcp --dport 443 -j DROP

五、防火墙配置实例

1.禁止端口访问

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

2.拒绝IP访问

[root@web01 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.61 -i eth0 -j DROP

-s			#指定来源地址
-i			#指定网卡

[root@web01 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.61 -i eth0 -j REJECT

3.禁止IP网段访问

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

4.只允许某个IP访问

[root@web01 ~]# iptables -t filter -A INPUT -p tcp ! -s 10.0.0.61 -i eth0 -j DROP

!			#取反

5.只允许某个端口范围访问

[root@web01 ~]# iptables -t filter -A INPUT -m multiport -p tcp --dport 22,23,24 -j ACCEPT

-m			#指定扩展项
multiport	#多端口匹配

[root@web01 ~]# iptables -t filter -A INPUT -m multiport -p tcp --dport 80:100 -j ACCEPT

六、企业中一般如何配置

1.配置前先思考

1.架构中哪一台机器要开防火墙
2.配置防火墙的机器都部署了哪些
	Nginx
	keepalived
3.服务需要开启的端口有哪些
	80
	443
	22
4.默认其他都拒绝

2.配置安全规则

#允许访问80和443
[root@web01 ~]# iptables -t filter -I INPUT -m multiport -p tcp --dport 80,443 -j ACCEPT

#只允许61访问web的22端口
[root@web01 ~]# iptables -t filter -A INPUT -p tcp -s 172.16.1.61 --dport=22 -j ACCEPT

#所有都拒绝,修改默认规则全部拒绝
[root@web01 ~]# iptables -P INPUT DROP
-P		#修改默认规则

3.企业中一般的配置

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 -P INPUT DROP`,默认所有全部拒绝

#解决方法: 到物理机操作
1.iptables -P INPUT ACCEPT
2.systemctl restart iptables
3.重启服务器

#避免方法:
1.配置定时任务
* * * * * /usr/sbin/iptables -P INPUT ACCEPT
2.准备一台机器先配置测试没问题,再到生产环境配置

七、防火墙规则永久生效

1.默认配置文件

[root@web01 ~]# vim /etc/sysconfig/iptables
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

2.自己配置防火墙规则永久生效

[root@web01 ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]

八、iptables配置内部共享上网

1.在防火墙机器上操作

#配置内核转发
[root@m01 ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1

#在CentOS6中开启之后生效命令
[root@m01 ~]# sysctl -p

#查看内核转发是否开启
[root@m01 ~]# sysctl -a|grep net.ipv4.ip_forward
net.ipv4.ip_forward = 1

#配置内部共享上网
[root@web02 ~]# iptables -A FORWARD -i eth0 -s 172.16.1.0/24 -j ACCEPT
[root@web02 ~]# iptables -A FORWARD -i eth1 -s 10.0.0.0/24 -j ACCEPT
[root@web02 ~]# iptables -A FORWARD -o eth1 -s 10.0.0.0/24 -j ACCEPT
[root@web02 ~]# iptables -A FORWARD -o eth0 -s 172.16.1.0/24 -j ACCEPT
[root@web01 ~]# iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.7

2.在没有外网的机器上配置

[root@web02 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1
#添加配置
GATEWAY=172.16.1.7    #防火墙内网地址
DNS1=223.5.5.5

#重启网卡
[root@web02 ~]# ifdown eth1
[root@web02 ~]# ifup eth1