iptables功能:
搭建一套防火墙规则
进行攻击防护、访问策略
进行数据包转发
Netfilter:
Linux系统核心层内部的一个数据包处理模块
Hook point:(PRE_ROUTING、INPUT、OUTPUT、FORWARD、POST_ROUTING)
数据包在Netfilter中的挂载点
iptables规则组成:
四张表 + 五条链(Hook point) + 规则
四张表:filter表、nat表、mangle表、raw表
filter表:访问控制、规则匹配
nat表:地址转发
数据包访问控制:ACCEPT、DROP、REJECT
数据包改写:SNAT、DNAT
信息记录:LOG
iptables -nL #列出已经设置的规则-n不显示主机名
iptables -F #清除之前设置的规则
场景1:
对所有的地址开放本机的TCP(80、22、10-21)端口的访问
允许对所有的地址开放本机的基于ICMP协议数据包的访问
其他未被允许的端口则禁止访问
iptables -F iptables -I INPUT -p tcp --dport 80 -j ACCEPT iptables -I INPUT -p tcp --dport 22 -j ACCEPT iptables -I INPUT -p tcp --dport 10:21 -j ACCEPT iptables -I INPUT -p icmp -j ACCEPT iptables -A INPUT -j REJECT
以上配置存在的问题:① 本机无法访问本机 ② 本机无法访问其他主机 解决如下
iptables -I INPUT -i lo -j ACCEPT iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
修改只允许10.103.188.233访问本机的httpd服务
iptables -D INPUT -p tcp --dport 80 -j ACCEPT iptables -I INPUT -p tcp -s 10.103.188.233 --dport 80 -j ACCEPT
场景2:
FTP主动模式 iptables 设置:
iptables -F iptables -I INPUT -p tcp --dport 21 -j ACCEPT iptables -I INPUT -p tcp --dport 22 -j ACCEPT iptables -I INPUT -p icmp -j ACCEPT iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -j REJECT
FTP被动模式 iptables 设置:
iptables -I INPUT -p tcp --dport 50000:6000 -j ACCEPT
场景3:公司常用简单 iptables 规则
员工在公司内部(10.10.155.0/24;10.10.188.0/24)能访问服务器上的任何服务
员工出差上海,通过VPN访问
公司有一个网站允许公网访问
iptables -F iptables -I INPUT -i lo -j ACCEPT iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -s 10.10.155.0/24 -j ACCEPT iptables -A INPUT -s 10.10.188.0/24 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 1723 -j ACCEPT #VPN访问 iptables -I INPUT -p icmp -j ACCEPT iptables -A INPUT -j REJECT
执行 /etc/init.d/iptables save 命令;iptables的当前配置会保存在 /etc/sysconfig/iptables 文件中
iptables中NAT模式设置
SNAT:源地址转换 DNAT:目的地址转换
SNAT规则设置:
环境:webserver:10.10.188.173 SNATserver:eth0:10.10.188.232:eth1:10.10.177.232 client:10.10.177.233
SNATserver配置:
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 #打开此配置
sysctl -p #让此配置生效
iptables -t nat -A POSTROUTING -s 10.10.177.0/24 -j SNAT --to 10.10.188.232
client配置:
配置client路由;可以将client的默认网关设为SNATserver;vim /etc/sysconfig/network ; GATEWAY=10.10.177.232
配置完成client可以直接访问webserver:10.10.188.173
DNAT规则设置:
环境:webserver:10.10.177.233:80 DNATserver:10.10.177.232 10.10.188.232:80 client:10.10.188.173
DNATserver配置:
iptables -t nat -A PREROUTING -d 10.10.188.232 -p tcp --dport 80 -j DNAT --to 10.10.177.233:80 iptables -t nat -L
client测试:curl http://10.10.188.232
client表面访问的是10.10.188.232,实际访问的是10.10.177.233:80
iptables防CC攻击
connlimit模块:限制每一个客户端IP的并发连接数
-connlimit-above n #限制并发个数
iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECT
limit模块:限速、控制流量
iptables -A INPUT -p icmp -m limit --limit 1/m --limit-burst 10 -j ACCEPT iptables -A INPUT -p icmp -j DROP