一、iptables 概要
iptables是linux自带的一种基于包过滤的的防火墙工具,根据设置的规则处理数据包,如放行(accept)、拒绝(reject)、丢弃(drop)等
配置防火墙的主要工作就是添加、修改、删除规则
二、iptables 原理
1.iptables 与 netfilter
linux 下的软件防火墙 Firewalld与iptables 自身不具备防火墙功能,都是通过内核的netfilter 来实现,Firewalld与iptables的作用是维护规则,netfilter使规则生效
2.四张表
filter、nat、mangle、raw,默认表是filter(没有指定表的时候就是filter表)。表的处理优先级:raw>mangle>nat>filter。
- filter:一般的过滤功能
- nat:用于nat功能(端口映射,地址映射等)
- mangle:用于对特定数据包的修改
- raw:有限级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能
RAW 表只使用在PREROUTING链和OUTPUT链上,因为优先级最高,从而可以对收到的数据包在连接跟踪前进行处理。一但用户使用了RAW表,在某个链 上,RAW表处理完后,将跳过NAT表和 ip_conntrack处理,即不再做地址转换和数据包的链接跟踪处理了。
RAW表可以应用在那些不需要做nat的情况下,以提高性能。如大量访问的web服务器,可以让80端口不再让iptables做数据包的链接跟踪处理,以提高用户的访问速度。
3.五条链
PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING。
- PREROUTING:数据包进入路由表之前
- INPUT:通过路由表后目的地为本机
- FORWARD:通过路由表后,目的地不为本机
- OUTPUT:由本机产生,向外转发
- POSTROUTIONG:发送到网卡接口之前
链原理
链与表的关系
三、iptables 配置(v1.4.7)
基本命令
## 查看所有规则与规则行数
[root@server ~]# iptables -L -n --line-number
1.两种配置方式
1.1 命令配置
[root@server ~]# iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
[root@server ~]# service iptables save
iptables:将防火墙规则保存到 /etc/sysconfig/iptables: [确定]
[root@server ~]# service iptables restart
iptables:将链设置为政策 ACCEPT:filter [确定]
iptables:清除防火墙规则: [确定]
iptables:正在卸载模块: [确定]
iptables:应用防火墙规则: [确定]
1.2 修改配置文件
[root@server ~]# vi /etc/sysconfig/iptables
[root@server ~]# service iptables restart
iptables:将链设置为政策 ACCEPT:filter [确定]
iptables:清除防火墙规则: [确定]
iptables:正在卸载模块: [确定]
iptables:应用防火墙规则: [确定]
2.参数 A 与 I 的区别
A 为在规则最后追加,I 为在规则最前新建
如果防火墙默认为拒绝所有,那么开放的规则应该插入在拒绝规则的前面才会生效
3.端口管理
3.1 开放某个端口传入
[root@server ~]# iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
3.2 开放某几个端口传入
[root@server ~]# iptables -I INPUT -p tcp --dport 80,8080,8090 -j ACCEPT
3.3 开放某段端口
[root@server ~]# iptables -I INPUT -p tcp --dport 8000:8080 -j ACCEPT
3.4 关闭端口传入
将ACCEPT修改为DROP
3.5 控制端口传出
将 INPUT 修改为 OUTPUT
4.ip 地址管理
4.1 屏蔽某个地址
[root@server ~]# iptables -I INPUT -s 192.168.3.101 -j DROP
4.2 屏蔽某段地址
[root@server ~]# iptables -I INPUT -s 192.168.3.101/24 -j DROP
5.禁ping
[root@server ~]# iptables -I INPUT -p icmp --icmp-type any -j DROP
6.控制单个IP的最大并发连接数(防止DDOS攻击)
[root@server ~]# iptables -I INPUT -p tcp --dport 25 -m connlimit --connlimit-above 20 -j REJECT
[root@server ~]# iptables -I INPUT -p tcp --dport 110 -m connlimit --connlimit-above 20 -j REJECT
[root@server ~]# iptables -I INPUT -p tcp --dport 443 -m connlimit --connlimit-above 20 -j REJECT
7.阻止连接到某块网卡
## 可以为单个IP地址或网段
[root@server ~]# iptables -I INPUT -i eth0 -s xxx.xxx.xxx.xxx -j DROP
8.清空iptables规则
[root@server ~]# iptables -F
9.屏蔽指定的MAC地址
[root@server ~]# iptables -I INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP
10.规则增删改查
10.1 增加指定访问地址的规则
[root@webserver2 ~]# iptables -I INPUT -s 192.168.1.1 -p tcp --dport 80 -j ACCEPT
10.2 删除规则
## 删除第二条规则
[root@webserver2 ~]# iptables -D INPUT 2
10.3 修改某条规则
[root@webserver2 ~]# iptables -R INPUT 2 -s 192.168.1.101 -p tcp --dport 80 -j ACCEPT
10.4 设置默认缺省规则
应该在所有的规则设置完成后再设置缺省规则
[root@webserver2 ~]# iptables -P OUTPUT ACCEPT
[root@webserver2 ~]# iptables -P INPUT DROP
11.centos 6服务器初始化配置 iptables 防火墙
11.1 启动 iptables 防火墙
[root@webserver2 ~]# /etc/init.d/iptables start
11.2 添加开放端口或服务规则
[root@webserver2 ~]# iptables -A INPUT -s 192.168.1.1 -p tcp --dport 80 -j ACCEPT
[root@webserver2 ~]# iptables -A INPUT -s 192.168.1.101 -p tcp --dport 80 -j ACCEPT
[root@webserver2 ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
11.3 设置默认缺省规则
## 设置允许本地环回接口lo访问本地服务
[root@webserver2 ~]# iptables -I INPUT -i lo -j ACCEPT
[root@webserver2 ~]# iptables -P OUTPUT ACCEPT
[root@webserver2 ~]# iptables -P INPUT DROP
[root@webserver2 ~]# iptables -L -n
11.4 保存配置并重启防火墙
[root@webserver2 ~]# service iptables save
[root@webserver2 ~]# /etc/init.d/iptables restart