netfiler:Framework, TCP/IP
iptables [-t TABLE] COMMAND CHAIN [num] 匹配条件 -j 处理动作
匹配条件
通用匹配
-s 匹配源地址
-d 匹配目标地址
-p 匹配协议的{tcp|udp|icmp}
-i 指定数据报文流入接口
-o 指定书库报文流出接口
扩展匹配
隐含扩展
-p tcp
--sport PORT [-PORT]: 源端口
--dport PORT [-PORT]: 目标端口
--tcp-flags mask comp:只检查mask指定的标志位,是逗号分隔的标志位列表;
comp:此列表中出现的标记为必须为1,comp中没出现,而mask中出现,必须为0;
--tcp-flags SYN,FIN,ACK,RST SYN = --syn
--syn:专门匹配tcp三次握手的第一次
-p icmp
--icmp-type
0:echo-reply 响应报文
8:echo-request 请求报文
-p udp
--sport
--dport
显示扩展:使用额外的匹配机制
-m EXTESTION --spe-opt
state:状态扩展
结合ip_conntrack追踪会话的状态
NEW:新连接请求
ESTABLISHED:已建立的连接
INBALID:非法连接
RELATED:相关联的
-m state --state NWE,ESTABLISHED -j ACCEPT
multiport:离散的多端口扩展
--source-ports
--destination-ports
--ports
-m multiport --destination-ports 21,22,80 -j ACCEPT 合并端口
条件取反:!, -s ! 172.16.100.6 除了此IP以外都可以作为原地址
命令:
管理规则
-A:附加一条规则,在链的尾部追加一条规则
-I:CHAIN [num]:插入一条规则,插入为对应CHAIN上的第num条
-D:CHAIN [num]:删除指定链中第num条规则
-R:CHAIN [num]:替换指定的规则
管理链
-F [CHAIN]:flush,清空指定规则链,如果省略CHAIN则表示清空对应表中的所有链。
-P CHAIN: 设定指定链的默认策略:
-N:自定义一条新的空链
-X:删除一个自定义的空链
-Z:置零指定链中所有规则的计数器
-E:重命名一条自定义的链
查看类:
-L:显示指定表中的所有规则;
-n:以数字格式显示主机地址和端口号
-V:显示详细信息
-VV
-X:显示精确值
--line-numbers:显示规则号码
动作(target)
ACCEPT 允许通过
DROP 丢弃
REJECT 拒绝
DNAT 目标地址转换
SNAT 源地址转换
REDIRECT 端口重定向
MASQUERADE 地址伪装
LOG 日志
MARK 给一个报文设定标记
iptables -t filter -A INPUT -s 192.168.1.0/24 -j DROP
允许172.16.0.0网段的用户访问172.16.100.7,的sshd:22/tcp
iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.100.7 -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -s 172.16.100.7 -d 172.16.0.0/16 -p tcp --sport 22 -j ACCEPT
iptables 不是服务,而是服务脚本;服务脚本的主要作用,在于生效保存的规则
lsmod命了可以检查iptables的模块是都装载
开启或者停止iptables服务 其实是装载或移除iptables/netfilter相关内核模块
iptanles_nat , iptables_filter, iptables_mangle, iptables_raw, iptables_nat
ip_conntrack
yum install mysql-server vsftpd httpd -y
iptables -P INPUT DROP 修改默认链为丢弃
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -L -n 查看修改后的链
允许所有主机访问本机的web服务
iptables -I INPUT -d 192.168.1.51 -p tcp --dport 80 -j ACCEPT
iptables -I OUTPUT -s 192.168.1.51 -p tcp --sport 80 -j ACCEPT
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -i l0 -j ACCEPT
iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -o lo -j ACCEPT
允许自己ping任意主机
iptables -A OUTPUT -s 192.168.1.51 -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -d 192.168.1.51 -p icmp --icmp-type 0 -j ACCEPT
DNS服务器:放行别人到服务器来请求
iptables -A INPUT -d 192.168.1.51 -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -s 192.168.1.51 -p udp --sport 53 -j ACCEPT
iptables -A INPUT -s 192.168.1.51 -p udp --sport 53 -j ACCEPT
iptables -A OUTPUT -d 192.168.1.51 -p udp --dport 53 -j ACCEPT
/proc/net/ip_conntrack 记录连接信息,追踪连接,此功能可以使服务器根据追踪信息 只允许响应回复出站,从而有效的避免反弹性的病毒。
iptstate
-t 显示当前所有连接的个数
modprobe ip_conntrack 装载模块
modprobe -r ipcontrack 移除模块
[[email protected] ~]# lsmod |grep ip 查看已装载的模块
[[email protected] ~]# cat /proc/sys/net/ipv4/ip_conntrack_max 查看ip_conntrack记载的最大条目数
注意:特别繁忙的服务器不要装载ip_conntrack模块。否则会出现问题
iptables -t nat -L 查看nat表,也会自动加载此模块
重启iptables 会清空表里的规则
[[email protected] ~]# cat /etc/sysconfig/iptables
service iptables save 保存规则到此文件,后重启服务规则不会丢失
iptables-save > /etc/sysconfig/iptables.2013041801 可以使用输出重定向来指明保存到什么位置
iptables-restore < /etc/sysconfig/iptables.2013041801 使用输入重定向来指明从什么位置读取信息
-------------------------------
server:172.16.100.7
放行sshd,httpd服务
iptables -I OUTPUT -s 172.16.100.7 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
iptables -I INPUT -d 172.16.100.7 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -d 172.16.100.7 -P tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 172.16.100.7 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP
-------------------------------
修改ip_conntrack最大连接数
sysctl -w net.ipv4.ip_conntrack_max=65536
要永久有效需要修改/etc/sysctl.conf
/proc/sys/net/ipv4/netfilter 此目录里的文件定义了一些超时时间
iptables -L -n --line-numbers -v 查看一写的规则
-------------------------------------------
FTP:
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
需要安装ip_conntrack_ftp和ip_nat_ftp模块
[[email protected] ~]# vim /etc/sysconfig/iptables-config
IPTABLES_MODULES="ip_conntrack_ftp ip_nat_ftp"
iptables -A INPUT -d 172.16.100.7 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 172.16.100.7 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
----------------------
[[email protected] ~]# vim /etc/sysconfig/iptables 可以直接编辑配置文件写入防火墙规则
由于匹配规则是从第一条开始匹配,直到匹配到就为止,所有可以把相同的规则,统一后写到最前面从而提高性能。
把端口相同的合并:
列如:
iptables -I INPUT 2 -d 172.16.100.7 -p tcp -m multiport --destination-ports 21,22,80 -m state --state NEW -j ACCEPT
iptables -R 修改
列如:
修改第6条 为 -d 172.16.100.7 -p tcp -m state --state ESTABLISHED,REDIRECT -j ACCEPT
iptanles -R INPUT 6 -d 172.16.100.7 -p tcp -m state --state ESTABLISHED,REDIRECT -j ACCEPT
iptables -D 删除