iptables防火墙架构:4表5链
4表:filter数据过滤表 nat地址转化表 raw状态跟踪表(消耗大量资源和时间!) mangle包标记表(可以修改数据包)
5链:INPUT链(入站规则)OUTPUT链(出站规则)FORWARD链(转发规则)PREROUTING链(路有前规则) POSTROUTING链(路由后规则)
语法格式:iptables [-t 表名] 选项 [链名] [条件] [-j 目标操作]
iptables -t filter -I INPUT -p icmp -j REJECT
#禁止所有主机ping自己
目标操作:ACCEPT:允许通过/放行
DROP:直接丢弃,不给出任何回应
REJECT:拒绝通过,必要时会给出提示
LOG:记录日志,然后传给下一条规则
常用选项: -A 在链的末尾添加规则
-l 在链的开头添加规则
-nL 以数字显示所有规则
-D 删除指定链的指定序号规则
-F 清空所有规则
-P 为指定的链设置默认规则
--line-numbers 查看规则时,显示规则的行
根据保护的对象不同,防火墙可以分为主机型防火墙与网络型防火墙
常用条件: -p 协议名称
-s 源地址 -d 目标地址
--sport 源端口号 --dport 目标端口号
icmp类型匹配 --icmp-type ICMP 类型
主机型防火墙案例:
iptables -I INPUT -p tcp --dport 80 -j REJECT 禁止所有访问本机80端口的请求
iptables -I INPUT -s 192.168.2.100 -j REJECT 禁止192....访问本机任何服务
iptables -I INPUT -d 192.168.2.5 -p tcp --dport 80 -j REJECT 禁止访问本机192.168.2.5网卡的80端口
iptables -A INPUT -s 10.0.10.0/24 -j DROP 丢弃10.0.10.0网段发送给本机的数据包
iptables -A INPUT -s 1.1.1.1 -p tcp --dport 22 -j REJECT 拒绝1.1.1.1ssh远程本机
网络型防火墙案例:
1.开启路由转发功能:echo 1 > /proc/sys/net/ipv4/ip_forward 临时开启
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf 永久
2.设置防火墙规则(数据过滤表的转发链)
iptables -I FORWARD -s ip -p tcp --dport 80 -j DROP
不为ip进行路由转发80端口
禁PING规则:iptables -I INPUT -p icmp --icmp-type echo-request -j DROP
自己可以ping别人,别人不能ping自己
防火墙扩展规则: 使用-m参数来启动扩展功能
根据MAC地址过滤:
iptables -I INPUT -p tcp --dport 22 -m mac --mac-source mac地址 -j DROP
拒绝指定子网掩码远程本机
多端口过滤规则:
iptables -I INPUT -p tcp -m multiport --dports 20:25,110,443 -j ACCEPT
一次性开启多个端口
根据ip地址范围过滤:
iptables -I INPUT -p tcp --dport 22 -m iprange --src-range 网段到网段 -j REJECT
禁止这个范围内的ip远程本机
配置snat实现共享上网:
设置防火墙规则:
iptables -t nat -A POSTROUTING -s 192.168.4.0/24 -p tcp --dport 80 -j SNAT --to-source 192.168.2.5
访问本机的只要是192.168.4网段,就给转变成192.168.2.5这个公网ip来访问外网
所有规则都是临时设置,重启失效 service iptables save 命令 永久设置