Iptables
IPTABLES 是与最新的 3.5 版本 Linux内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。
防火墙在做信息包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的信 息包过滤表中,而这些表集成在 Linux 内核中。在信息包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 信息包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。
虽然 netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和 iptables 组成。netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易
iptables防火墙默认的规则表和链结构:
1、安装配置iptables
yum install iptables-services.x86_64 -y
systemctl stop firewalld.service ##停止火墙
systemctl mask firewalld.service ##冻结火墙
systemctl start iptables
systemctl enable iptables
2、iptables常用命令
iptables -nL ##查看所有策略
iptables -F ##临时清空所有策略,重启后恢复
service iptables save ##保存
systemctl restart iptables.service ##再次重启
iptables -nL ##再次查看
常用命令及参数:
-A 追加规则-->iptables -A INPUT
-D 删除规则-->iptables -D INPUT 1(编号)
-R 修改规则-->iptables -R INPUT 1 -s 192.168.12.0 -j DROP 取代现行规则,顺序不变(1是位置)
-I 插入规则-->iptables -I INPUT 1 --dport 80 -j ACCEPT 插入一条规则,原本位置上的规则将会往后移动一个顺位
-L 查看规则-->iptables -L INPUT 列出规则链中的所有规则
-N 新的规则-->iptables -N allowed 定义新的规则
通用参数:
-p 协议 例:iptables -A INPUT -p tcp
-s源地址 例:iptables -A INPUT -s 192.168.1.1
-d目的地址 例:iptables -A INPUT -d 192.168.12.1
-sport源端口 例:iptables -A INPUT -p tcp --sport 22
-dport目的端口 例:iptables -A INPUT -p tcp --dport 22
-i指定入口网卡 例:iptables -A INPUT -i eth0
-o指定出口网卡 例:iptables -A FORWARD -o eth0
-j 指定要进行的处理动作
常用的ACTION:
DROP:丢弃
REJECT:明示拒绝
ACCEPT:接受
SNAT基于原地址的转换
source--指定源地址
命令查看iptables表
iptables -t filter -nL ##查看filte表
iptables -t nat -nL ##查看nat表
iptables -t mangle -nL ##查看mangle表
iptables -t row -nL 查看row表
3、给iptables 添加策略
iptables 是从上向下读的
iptables -A INPUT -s 172.25.254.XX -p tcp --dport 22 -j ACCEPT ##给指定IP添加策略
iptables -A INPUT -p tcp --dport 22 -j ACCEPT ##添加22端口
iptables -A INPUT -i lo -j ACCEPT ##添加lo回环接口 默认在最后一行
iptables -nL ##查看
iptables -A INPUT -j REJECT ##拒绝其他请求
iptables -nL
iptables -I INPUT 3 -p tcp --dport 80 -j ACCEPT ##在第三行插入
iptables -R INPUT 3 -p tcp --dport 8080 -j ACCEPT ##修改第3条
iptables -nL
iptables -A INPUT -p tcp --dport 80 -j ACCEPT 接受来自80端口的数据
在打开iptables之后通过http访问不到172.25.254.100,添加上面的策略之后可以访问
iptables -D INPUT 4 ##删除INPUT链的第四条
iptables -nL 对比上图发现第四条策略被删除
客户端安装vsftpd,进行测试
yum install vsftpd -y
systemctl start vsftpd
lftp 172.25.254.100
iptables -P INPUT DROP ##INPUT策略修改为丢掉
iptables -nL
Chain INPUT (policy DROP)
lftp 172.25.254.100 ##请求不会回应
lftp 172.25.254.100:~> ls
`ls' at 0 [Connecting...]
iptables -P INPUT ACCEPT ##默认修改为允许
Chain INPUT (policy ACCEPT)
lftp 172.25.254.108 ##请求会回应
iptables -N westos ##添加链 westos
iptables -nL
iptables -E wy yw ##修改链wy 为yw
iptables -nL
iptables -X yw ##删除链
iptables -nL
火墙策略优化
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -nL
iptables -A INPUT -m state --state NEW -i lo -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -m state --state NEW -j REJECT
iptables -nL
所有策略再次使用时会直接使用第一条提升速度
源地址转换
iptables -t nat -nL
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 172.25.68.68
iptables -nL -t nat
用172.25.254.200 连接172.254.68.250连接成功
目的地址转换:
当68主机访问100主机的时候,100主机将目的地转到200 主机
iptables -t nat -A PREROUTING -j DNAT --to-dest 172.25.254.200
iptables -nL -t nat
iptables -t nat -D PREROUTING 1
iptables -nL -t nat