关闭firewalld启动iptables服务
关闭firewalld服务器
systemctl stop firewalld.service
systemctl disable firewalld.service
下载iptables-server
yum -y install iptables-services
启动服务和设置自启:
systemctl restart iptables.service
systemctl enable iptables.service
iptables框架结构图:
熟悉iptables框架:
1)iptables的4个表(区分大小写):
iptables默认有4个表,nat表(地址转换表)、filter表(数据过滤表)、raw表(状态跟踪表)、mangle表(包标记表)。
2)iptables的5个链(区分大小写):
INPUT链 (入站规则)
OUTPUT链 (出站规则)
FORWARD链 (转发规则)
PREROUTING链 (路由前规则)
POSTROUTING链 (路由后规则)
目标操作:
// ACCEPT: 允许通过/放行
// DROP: 直接丢弃,不给出任何回应
// REJECT: 拒绝通过,必要时会给出提示
// LOG: 记录日志,然后传给下一条规则
注意事项与规律:
//可以不指定表,默认为filter表
//可以不指定链,默认为对应表的所有链
//如果没有找到匹配条件,则执行防火墙默认规则
//选项/链名/目标操作用大写字母,其余都小写
规则链内的匹配规则:
-顺序比对,匹配即停止(LOG除外)
-诺无任何匹配,则按改链的默认策略处理
iptables用法解析:
指令组成:
Iptables [-t表名] 选项 [链名] [条件] [-j 目标操作]
iptables -L
//查看当前表的结构链,默认fiter表
iptables -t nat -L
//指定查看nat表的结构链
iptables -L --line-number
//给表中规则链加编号
iptables -nL --line-number
//数字显示源和目标地址(也就是IP)
iptables -F
//清除表中所有数据
iptables -t nat -F
//清空所有表中数据
iptables-save > /etc/sysconfig/iptables
//清空后的表,要存在配置文件中,这样才永久有效,不然只是临时有效
iptables -t filter -P INPUT DROP
//设置 filter表中的INPUT链默认规则为DROP拒绝
iptables防火墙可以根据很多很灵活的规则进行过滤行为,具体常用的过滤条件
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
//追加规则至fiter表中的INPUT链的末尾,允许任何人使用tcp协议访问本机
iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT
//插入网页服务规则 tcp 端口80 到表中的INPUT开头
iptables -t filter -A INPUT -p icmp -j ACCEPT
//添加规则至filter表中的INPUT链,允许任何人使用ICMP协议访问本机 // icmp (ping之类的)
iptables-save > /etc/sysconfig/iptables
//添加完规则一定要保存到文件里
iptables -t filter -D INPUT 3
//删除filter 表中 INPUT链中的第三条规则
iptables -t filter -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
//添加允许 协议是 iCMP 类型是 echo-reply 规则到 filter表中的 INPUT 链中
网络型防火墙
基本匹配:
sysctl -a | grep "net.ipv4.ip_forward"
net.ipv4.ip_forward = 1 //查询是否开启路由转发
echo 1 > /proc/sys/net/ipv4/ip_forward
//开启路由转发
echo 0 > /proc/sys/net/ipv4/ip_forward
//关闭路由转发
//注意以上操作仅当前有效,计算机重启后无效
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
//修改/etc/sysctl.conf配置文件,可以实现永久有效规则
iptables -t filter -P FORWARD DROP
//修改转发链默认规则为不让转发通过
iptables -t filter -A FORWARD -p icmp -j ACCEPT
//设置允许协议是icmp 的访问通过
有来有回才算传输数据:
iptables -t filter -A FORWARD -p tcp --dport 22 -j ACCEPT
//设置允许客户端访问目标端口是 22 的服务通过
iptables -t filter -A FORWARD -p tcp --sport 22 -j ACCEPT
//设置允许客户端访问源端口是 22 的服务通过
扩展匹配:
ip范围匹配:
iptables -t filter -A FORWARD -p icmp -m iprange --src-range 192.168.4.0-192.168.4.95 -j ACCEPT
//允许访问协议是icmp 源目标IP是 192.168.4.0-4.95的通过
iptables -t filter -A FORWARD -p icmp -m iprange --dst-range 192.168.4.0-192.168.4.95 -j ACCEPT
//允许访问协议是icmp 目标IP是 192.168.4.0-4.95的通过
iptables -I INPUT -s 192.168.4.100 -p tcp --dport 22 -j DROP
// 禁止mac 地址是52:54:00:11:c5:73 的主机访问
Nat表典型应用
-让多台私有IP地址主机共享同一个公网IP地址 上网
SNAT:
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -p tcp --dport 80 -j SNAT --to-source 192.168.4.92
//添加规则: 条件是 IP是2.0/24 网段 的IP 并且访问的目标端口是80 的,进行 SNAT 地址转换 成4.92
或者:
iptables -t nat -I POSTROUTING -s 172.31.128.0/20 -j SNAT --to-source 172.31.66.212
snat配置一次就好了, 172.31.128.0/20 这个是无公网服务器的交换机网段,(简称:广播地址)172.31.66.212是有EIP服务器的内网ip
iptables -t nat -nL POSTROUTING
//查看一下规则
DNAT:
iptables -t nat -I PREROUTING -d 172.31.66.212 -p tcp --dport 65530 -j DNAT --to 172.31.129.86:8440
这个是实现把有公网的服务器的65530端口映射到无公网的8440端口上。
iptables -t nat -I POSTROUTING -p tcp --dport 8440 -j MASQUERADE
这个是为了,转发到后面服务器的8440端口的返回数据包可以再通过有公网的服务器出去
扩展知识,对于proxy外网IP不固定的情况可以执行下面的地址伪装,动态伪装IP。
iptables -t nat -A POSTROUTING -s 192.168.4.0/24 -p tcp --dport 80 -j MASQUERADE
//添加规则: 访问外网的如果是 4.0这个网段 并且目标端口是80 的进行地址伪装
iptables-save > /etc/sysconfig/iptables
//永久保存一下
iptables为了保证服务器安全,禁止ip登录访问:
比如现在要将47.52.209.185这个IP封杀,就输入:
iptables -I INPUT -s 47.74.209.185 -j DROP
要解封则将-I换成-D即可,前提是iptables已经有这条记录。如果要想清空封掉的IP地址,可以输入:
iptables -flush
要添加IP段到封停列表中,使用下面的命令:
iptables -I INPUT -s 121.0.0.0/8 -j DROP
设置白名单:
iptables -A INPUT -s 192.111.51.45 -p all -j ACCEPT
#开放所有端口给指定ip:192.111.51.45
iptables -A INPUT -s 192.111.51.44 -p all -j ACCEPT
#开放所有端口给本机