|
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协议数据包的访问
其他未被允许的端口则禁止访问
1
2
3
4
5
6
| 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
|
以上配置存在的问题:① 本机无法访问本机 ② 本机无法访问其他主机 解决如下
1
2
| iptables -I INPUT -i lo -j ACCEPT
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
|
修改只允许10.103.188.233访问本机的httpd服务
1
2
| 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 设置:
1
2
3
4
5
6
| 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 设置:
1
| iptables -I INPUT -p tcp --dport 50000:6000 -j ACCEPT
|
场景3:公司常用简单 iptables 规则
员工在公司内部(10.10.155.0/24;10.10.188.0/24)能访问服务器上的任何服务
员工出差上海,通过VPN访问
公司有一个网站允许公网访问
1
2
3
4
5
6
7
8
9
| 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 #让此配置生效
1
| 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配置:
1
2
| 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 #限制并发个数
1
| iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECT
|
limit模块:限速、控制流量
1
2
| iptables -A INPUT -p icmp -m limit --limit 1/m --limit-burst 10 -j ACCEPT
iptables -A INPUT -p icmp -j DROP
|
|
|
|
|
|
|
|