###iptables的四表五链
#Filter表
INPUT:到达目标主机套接字的包
FORWARD:经过路由的包,主要为路由转发
OUTPUT:本地主机创建的数据包
#NAT表
PREROUTING:对刚进来的数据包进行更改
OUTPUT:本地创建的数据包在路由之前进行更改
POSTROUTING:在数据包出去时更改数据包信息
#Managle表
INPUT:进入设备本身的包
FORWARD:对经过路由通过设备的包进行更改
PREROUTING:在路由之前更改传入的包
OUTPUT:本地创建的数据包在路由之前进行更改
POSTROUTING:在数据包出去时更改数据包信息
#raw表
略
###iptables的安装
yum install iptables-services -y
#加载模块
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state
#查看加载的模块
lsmod |egrep 'filter|nat|ipt'
#停止firewalld
systemctl stop firewalld
systemctl disable firewalld
#开启iptables
systemctl start iptables.service
systemctl enable iptables.service
###iptables命令
注:iptables规则的读取为从上到下,若匹配到了,就不会往下匹配,所以注意规则的顺序。
iptables -nL #查看Filter表的防火墙规则,-n为显示源地址栏信息,-L为显示列表信息list,注意参数顺序不能颠倒
iptables -nL -t nat #查看NAT表的防火墙规则,-t为指定表类型table
iptables -F #清除Filter表所有规则,注意:这种清除不会清除默认的规则,当改变过默认规则时要注意,以防被挡在防火墙外
iptables -F -t nat #清除NAT表的规则
iptables -X #删除用户自定义的链
iptables -Z #将链的计数器清零(数据包计数器与数据包字节计数器)
iptables -t #指定表
iptables -A #将规则追加到指定的链上,链的最后一行
iptables -I #插入规则到指定的链上,链的第一行
iptables -R #替换链的规则,默认为第一行
iptables -D #删除链上的规则
iptables -nL --line-numbers #查看Filter表规则,并标注规则号码
iptables -nL -t nat --line-numbers #查看NAT表规则,并标注规则号码
iptables -D INPUT 1 #删除指定表序号所对应的规则
iptables -A INPUT -p tcp -m state --dport 22 -j DROP #-A为在指定链后面追加规则,-p(protocol)指定协议为tcp,-m指定匹配状态,--dport指定目标地址端口号,-j指定执行的动作为拦截
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP #为指定表指定链追加规则,--dport为目标端口,--sport为源端口
iptables -I INPUT -p tcp -s 10.0.1.51 -i eth0 -j DROP #为指定链添加规则,-s为指定源地址,-i为指定网络接口。表示禁止该ip地址从eth0网卡进入
iptables -A INPUT -p tcp ! -s 10.0.1.0/24 -i eth0 -j DROP #为指定链追加规则,!为非。表示禁止所有地址连接eth0网卡,除了指定的地址段
iptables -A INPUT -p tcp ! -s 10.0.0.1 -i eth0 -j DROP #表示拒绝连接eth0,除了这一个ip地址
#其他参数说明
-s #<==指定源地址或网段(192.168.1.0/24)。! 取反。
-d #<==指定目的地址(nat表prerouting)
-i #<==进入的网络接口(eth0,eth1)
-o #<==出去的网络接口(eth0,eth1)
iptables -I INPUT -p tcp -m multiport --dport 21,22,23,24 -j DROP #-m表示指定状态为多端口,--dport定义多端口,-m multiport不可省略
iptables -I INPUT -p tcp --dport 3306:3308 -j ACCEPT #--dport为指定端口地址段3306,3307,3308。-j为指定类型为可进入,-m multiport可省略
iptables -A INPUT -p icmp --icmp-type 8 -j DROP #-p指定协议为icmp,--icmp-type为指定协议类型为ping。表示禁用对主机ping
iptables -A FORWARD -s 192.168.1.0/24 -p icmp -m icmp --icmp-type any -j DROP #为指定链追加规则。表示只允许该地址段的ip通过icmp协议类型转发
iptables -I INPUT -s 10.0.0.7 -j DROP #禁止该ip访问
iptables -I INPUT -p icmp --icmp-type 8 -s 10.0.0.7 -j ACCEPT #允许该地址的所有icmp协议类型
iptables -I INPUT 2 -p icmp ! -s 10.0.0.1 --icmp-type 8 -j DROP #除了该地址拒绝所有的ip地址ping
iptables -I INPUT -p tcp --dport 3306 -j DROP #禁止访问主机3306端口
###iptables部署实例
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.1.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策略,注意顺序
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.61 #-A指定链为POSTROUTING,-j指定动作为将源地址进行NAT转换,--to-source指定转换成的地址
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf #添加内核地址转发功能
sysctl -p #查看内核参数设置
#清除防火墙规则
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
#设置放行的ip段
iptables -A INPUT -s 10.0.1.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 -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
##上网的内网主机设置
将主机的网关设置为能上网的主机的ip地址,重启网卡
###端口映射
#-d为目标端口,-j指定动作为DNAT目标地址NAT转换,--to-destination指定要转换成的地址和端口。表示将对10地址9000端口的请求转发到172地址的22端口
iptables -t nat -A PREROUTING -d 10.0.1.61 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.7:22
###ip映射
#表示将对10地址的请求转发到172地址上
iptables -t nat -A PREROUTING -d 10.0.1.62 -j DNAT --to-destination 172.16.1.7
###iptables规则保存
#由于之前的命令操作都是临时的
iptables-save > 20190821 #将防火墙规则保存到文件中
iptables-save #将防火墙规则保存到配置文件中,防止重启后失效
iptables-restore < 20190821 #从配置文件里载入防火墙配置
###iptables配置小技巧
1.修改之前先导出备份一份
2.修改的时候小心别把自己关在外面,可以现在定时任务里添加一条定时清空的规则,等测试没问题再取消定时任务。