、
检查机目标机器 httpd 服务
/etc/init.d/httpd status
=================================================================================================
Netfilter是Linux网络层 IP数据包处理模块。
【Chain】【Hook point】 ,数据包在 Netfilter 的挂载点 (PRE_ROUTING、INPUT、OUTPUT、FORWARD、POST_ROUTING)
【iptables】
Filter 表
NAT 表
Mangle 表
Raw 表
iptables 规则
数据包访问控制 ACCEPT 、DROP 、REJECT
数据包改写 SNAT DNAT
信息记录 LOG
规则一 对所有地址开放本机的 tcp ( 80 22 10~21 )端口访问。
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
规则二 允许对所有地址开放本机的 ICMP 协议数据包访问。
iptables -I INPUT -p icmp -j ACCEPT
规则三 其他未被允许端口 禁止访问
iptables -A INPUT -j REJECT
解决思路:
【查看本机 端口开放情况】netstat -lntp
【列出已有规则】iptables -L
【清空已有规则】iptables -F
【客户机验证服务器 iptables规则】nmap -sS -p 0-1000 服务器IP地址
iptables -D INPUT -p tcp --dport 80 -j ACCEPT iptables -I INPUT -p tcp --dport 80 -j REJECT
【本机无法访问本机】环回地址 lo
iptables -I INPUT -i lo -j ACCEPT
【本机无法访问 其他主机】ESTABLISHED,RELATED 建立连接,FTP连接状态
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
【只允许某台主机访问本机的 httpd 】
iptables -D INPUT -p tcp --dport 80 -j ACCEPT iptables -I INPUT -p tcp -s 某台主机 --dport 80 -j ACCEPT
======================================================
ftp连接默认是【被动模式 passive on 】
【配置vsftpd服务支持主动模式】sudo vi /etc/vsftpd/vsftpd.conf
port_enable=yes
connect_from_port_20=YES【启动 vsftpd 】/etc/init.d/vsftpd restart
【匿名用户】anonymous
【切换主动模式命令】 passive
【主动模式 关联 iptables 规则】
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 -A INPUT -j REJECT
【被动模式 关联 iptables 规则】
iptables -I INPUT -p tcp --dport 21 -j ACCEPT iptables -I INPUT -p tcp --dport 50000:60000 -j ACCEPT
sudo vi /etc/vsftpd/vsftpd.conf pasv_min_port=50000 pasv_max_port=60000
【被动模式 】
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -I INPUT -p tcp --dport 21 -j ACCEPT # 临时 modprobe nf_conntrack_ftp # 开机启动 sudo vi /etc/sysconfig/iptables-config IPTABLES_MODULES="nf_conntrack_ftp"
=================================
需求 员工在公司内部 10.10.155.0/24 10.10.188.0/24 能访问服务器上任何服务
需求 员工出差 外网拨号给 VPN服务器 => 连接内网FTP服务器 、SAMBA NFS SSH
需求 公司有一个门户网站需要允许 公网访问
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 -s 本机.0/24 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 1723 -j ACCEPT iptables -I INPUT -p icmp -j ACCEPT iptables -A INPUT -j REJECT
【保存到配置文件】/etc/sysconfig/iptables
/etc/init.d/iptables save
【开机启动】chkconfig iptables on
【验证开启 2345 on】chkconfig --list | grep iptables
一般允许外网访问的服务
网站 www http 80/tcp https 443/tcp 邮件 mail smtp 25/tcp smtps 465/tcp pop3 110/tcp pop3s 995/tcp imap 143/tcp
一般不允许外网访问的服务
文件服务器 NFS 123/udp SAMBA 137,138,139/tcp 445/tcp FTP 20/TCP 21/tcp 远程管理 SSH 22/tcp 数据库 MYSQL 3306/tcp ORACLE 1521/tcp
【配置规则基本思路】
ACCEPT 的规则 ① 允许本地访问 ②允许已经监听状态数据包通过 ③允许规则中允许的数据包(SSH要开放)
DENY规则 拒绝不允许的数据包
=================================
【NAT Server】
sudo vi /etc/sysctl.conf net.ipv4.ip_forward = 1 sysctl -p sysctl -a|grep ip_forward iptables -t nat -A POSTROUTING -s 10.10.177.0/24 -j SNAT --to 10.10.188.232
【客户机默认网关设置】
netstat -rn sudo vi /etc/sysconfig/network NETWORKING=yes HOSTNAME=blahblah GATEWAY=10.10.177.232 -------------------------------- 或者 route add 0.0.0.0 gw 10.10.177.232
【客户机】iptables -F
【服务器】curl http://10.10.177.233
【NAT Server】
iptables -t nat -A PREROUTING -d 10.10.188.232 -p tcp --dport 80 -j DNAT --to 10.10.177.233:80
================================================
防止 CC 攻击
connlimit 模块,限制并发连接数 100 个
iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECT
limit 模块 限制流量 限制速度 ,比如 icmp 协议,,ping 可达 10个包之后就 ACCEPT
iptables -A INPUT -p icmp -m limit --limit 1/m --limit-burst 10 -j ACCEPT
iptables -A INPUT -p icmp -j DROP