Linux 下防火墙与端口

1. 配置防火墙

开启指定端口,如:22,80,443,3306端口,编辑 iptables 开启端口
1.1 在 /etc/sysconfig/iptables 文件中加入

*filter
:INPUT DROP [0:0]      # 丢弃所有进入请求
:FORWARD ACCEPT [0:0]  # 允许转发
:OUTPUT ACCEPT [0:0]   # 允许流出
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #对进来的包的状态进行检测,已经建立tcp连接的包以及该连接相关的包允许通过
-A INPUT -i lo -j ACCEPT # 默认允许网卡流入数据
# -A INPUT -p icmp -j ACCEPT  # 允许ping通,不想被ping通注释此行
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT # 添加一条规则,允许22端口
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
COMMIT # 提交设置

参数解释
-A:添加一条规则,针对什么数据包,INPUT流入的数据包,OUTPUT流出的数据包,FORWARD转发的数据包
-p:指定协议,如TCP,UDP
–dport:目标端口,当数据从外部进入服务器为目标端口
–sport:源端口,数据从服务器出去,则为数据源端口使用
–j:指定策略规则,ACCEPT(允许接收)、DROP(拒绝接收,无响应)、REJECT(拒绝接收,有响应)
-s:指定某一个IP地址的访问,加叹号“!”表示除这个IP外
-L:查看规则链
-F:清空规则链
-I num:在规则链的头部加入新规则
-D num:删除某一条规则
-d:匹配目标地址
-i:网卡名称 匹配从这块网卡流入的数据
-o:网卡名称 匹配从这块网卡流出的数据

1.2 保存后重启防火墙

service iptables restart  

2. 防火墙基本操作

查看防火墙状态
service iptables status
停止防火墙
service iptables stop
启动防火墙
service iptables start
重启防火墙
service iptables restart
永久关闭防火墙
chkconfig iptables off
永久关闭后重启
chkconfig iptables on

3. 端口查看

3.1 查看端口是否开放
netstat -anp  或  netstat -ntupl

参数说明
a 表示所有
n表示以数字形式显示地址和端口号
t表示tcp协议
u表示udp协议
p表示查询占用的程序
l表示查询正在监听的程序

[root@Z bin]# netstat -ntupl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      6740/php-fpm        
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      1539/mysqld         
tcp        0      0 0.0.0.0:9901                0.0.0.0:*                   LISTEN      1755/./pk24Server   
tcp        0      0 0.0.0.0:9902                0.0.0.0:*                   LISTEN      1755/./pk24Server   
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      1632/nginx          
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1277/sshd           
tcp        0      0 0.0.0.0:443                 0.0.0.0:*                   LISTEN      1632/nginx          
udp        0      0 0.0.0.0:68                  0.0.0.0:*                               925/dhclient        
udp        0      0 172.16.17.231:123           0.0.0.0:*                               1288/ntpd           
udp        0      0 127.0.0.1:123               0.0.0.0:*                               1288/ntpd           
udp        0      0 0.0.0.0:123                 0.0.0.0:*                               1288/ntpd    

State 状态说明:
LISTEN
侦听来自远方的TCP端口的连接请求
SYN-SENT
在发送连接请求后等待匹配的连接请求。(客户端发送一个SYN以请求建立一个连接.之后状态置为SYN_SENT。如果有大量这样的状态包,检查是否中招了)
SYN_RECV
在收到和发送一个连接请求后等待对方对连接请求的确认。(服务端应发出ACK确认客户端的 SYN,同时自己向客户端发送一个SYN. 之后状态置为SYN_RECV。如有大量此状态,估计被flood攻击了)
ESTABLISHED
代表一个打开的连接,双方可以进行或已经在数据交互了
FIN-WAIT-1
等待远程TCP连接中断请求,或先前的连接中断请求的确认 (主动关闭端程序调用close,于是其TCP发出FIN请求主动关闭连接,之后进入FIN_WAIT1状态)
CLOSE-WAIT
等待从本地用户发来的连接中断请求 (被动关闭端TCP接到FIN后,就发出ACK以回应FIN请求,它的接收也作为文件结束符传递给上层应用程序,并进入CLOSE_WAIT)
FIN-WAIT-2
从远程TCP等待连接中断请求 (主动关闭端接到ACK后,就进入了 FIN-WAIT-2)
CLOSING
等待远程TCP对连接中断的确认 (比较少见 Both sockets are shut down but we still don’t have all our data sent)
LAST-ACK
等待原来的发向远程TCP的连接中断请求的确认(被动关闭端一段时间后,接收到文件结束符的应用程 序将调用CLOSE关闭连接。这导致它的TCP也发送一个 FIN,等待对方的ACK.就进入了LAST-ACK ,不是什么好东西,此项出现,检查是否被攻击)
TIME-WAIT
等待足够的时间以确保远程TCP接收到连接中断请求的确认 (在主动关闭端接收到FIN后,TCP 就发送ACK包,并进入TIME-WAIT状态)
CLOSED
没有任何连接状态(被动关闭端在接受到ACK包后,就进入了CLOSED的状态,连接结束)

3.2查看指定端口是否在监听

如查看9901是否在监听 lsof -i:9901

[root@Z bin]# lsof -i:9901
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
pk24Serve 1755 root    9u  IPv4  12558      0t0  TCP *:9901 (LISTEN)

端口不是独立存在的,它是依附于进程的。某个进程开启,那么它对应的端口就开启了,进程关闭,则该端口也就关闭了。

你可能感兴趣的:(Linux 下防火墙与端口)