Add sftp jail.
This commit is contained in:
parent
0363a462a0
commit
566b7dfd0b
@ -56,6 +56,7 @@ jail_list:
|
|||||||
- name: sftp
|
- name: sftp
|
||||||
conf:
|
conf:
|
||||||
src: sftp
|
src: sftp
|
||||||
|
fstab: sftp_fstab
|
||||||
# - name: mumble
|
# - name: mumble
|
||||||
# conf:
|
# conf:
|
||||||
# src: mumble
|
# src: mumble
|
||||||
|
6
ansible/environments/jail/host_vars/sftp
Normal file
6
ansible/environments/jail/host_vars/sftp
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
os_flavor: "freebsd"
|
||||||
|
users:
|
||||||
|
nochainstounlock:
|
||||||
|
initialize: true
|
||||||
|
uid: 11235
|
||||||
|
gid: 11235
|
@ -1,7 +1,8 @@
|
|||||||
[jail]
|
[jail]
|
||||||
nat_dhcp ansible_connection=jail
|
nat_dhcp ansible_connection=jail
|
||||||
homeserver_nat_dhcp ansible_ssh_host=nat_dhcp@172.16.16.2 ansible_connection=sshjail
|
homeserver_nat_dhcp ansible_ssh_host=nat_dhcp@homeserver ansible_connection=sshjail
|
||||||
mrmanager_nat_dhcp ansible_ssh_host=nat_dhcp@10.217.2.1 ansible_connection=sshjail
|
mrmanager_nat_dhcp ansible_ssh_host=nat_dhcp@10.217.2.1 ansible_connection=sshjail
|
||||||
nat_dhcp@172.16.16.2 ansible_connection=sshjail
|
nat_dhcp@172.16.16.2 ansible_connection=sshjail
|
||||||
admin_git ansible_ssh_host=admin_git@10.217.2.1 ansible_connection=sshjail
|
admin_git ansible_ssh_host=admin_git@10.217.2.1 ansible_connection=sshjail
|
||||||
public_dns ansible_ssh_host=public_dns@10.217.2.1 ansible_connection=sshjail
|
public_dns ansible_ssh_host=public_dns@10.217.2.1 ansible_connection=sshjail
|
||||||
|
sftp ansible_ssh_host=sftp@homeserver ansible_connection=sshjail
|
||||||
|
@ -135,3 +135,11 @@
|
|||||||
ansible_become: True
|
ansible_become: True
|
||||||
roles:
|
roles:
|
||||||
- odowork
|
- odowork
|
||||||
|
|
||||||
|
- hosts: sftp
|
||||||
|
vars:
|
||||||
|
ansible_become: True
|
||||||
|
roles:
|
||||||
|
- users
|
||||||
|
- sftp
|
||||||
|
|
||||||
|
@ -33,6 +33,10 @@ nat pass on restricted_nat proto {tcp, udp} from any to 10.215.2.2 port 8081 ->
|
|||||||
rdr pass on $ext_if inet proto tcp from $not_restricted_nat_v4 to any port 8082 -> 10.215.2.2 port 8082
|
rdr pass on $ext_if inet proto tcp from $not_restricted_nat_v4 to any port 8082 -> 10.215.2.2 port 8082
|
||||||
nat pass on restricted_nat proto {tcp, udp} from any to 10.215.2.2 port 8082 -> 10.215.2.1
|
nat pass on restricted_nat proto {tcp, udp} from any to 10.215.2.2 port 8082 -> 10.215.2.1
|
||||||
|
|
||||||
|
# -> sftp
|
||||||
|
rdr pass on $ext_if inet proto tcp from $not_jail_nat_v4 to any port 8022 -> 10.215.1.216 port 22
|
||||||
|
nat pass on jail_nat proto {tcp, udp} from any to 10.215.1.216 port 22 -> 10.215.1.1
|
||||||
|
|
||||||
# Forward ports for unifi controller
|
# Forward ports for unifi controller
|
||||||
# rdr pass on $ext_if inet proto tcp from any to any port 65022 -> 10.213.177.8 port 22
|
# rdr pass on $ext_if inet proto tcp from any to any port 65022 -> 10.213.177.8 port 22
|
||||||
rdr pass on $ext_if inet proto {udp, tcp} from any to any port $unifi_ports -> 10.215.1.202
|
rdr pass on $ext_if inet proto {udp, tcp} from any to any port $unifi_ports -> 10.215.1.202
|
||||||
|
@ -7,6 +7,7 @@ admin_git {
|
|||||||
|
|
||||||
devfs_ruleset = 14;
|
devfs_ruleset = 14;
|
||||||
mount.devfs;
|
mount.devfs;
|
||||||
|
mount.fstab = "/etc/fstab.${name}";
|
||||||
|
|
||||||
exec.start += "/bin/sh /etc/rc";
|
exec.start += "/bin/sh /etc/rc";
|
||||||
exec.stop = "/bin/sh /etc/rc.shutdown jail";
|
exec.stop = "/bin/sh /etc/rc.shutdown jail";
|
||||||
|
@ -11,6 +11,7 @@ cloak {
|
|||||||
|
|
||||||
devfs_ruleset = 13;
|
devfs_ruleset = 13;
|
||||||
mount.devfs; # To expose tun device
|
mount.devfs; # To expose tun device
|
||||||
|
mount.fstab = "/etc/fstab.${name}";
|
||||||
|
|
||||||
exec.start += "/bin/sh /etc/rc";
|
exec.start += "/bin/sh /etc/rc";
|
||||||
exec.stop = "/bin/sh /etc/rc.shutdown jail";
|
exec.stop = "/bin/sh /etc/rc.shutdown jail";
|
||||||
|
@ -6,6 +6,8 @@ dagger {
|
|||||||
exec.prestart += "/usr/local/bin/jail_netgraph_bridge start cloak ${name} 192.168.1.0/24";
|
exec.prestart += "/usr/local/bin/jail_netgraph_bridge start cloak ${name} 192.168.1.0/24";
|
||||||
exec.poststop += "/usr/local/bin/jail_netgraph_bridge stop cloak ${name}";
|
exec.poststop += "/usr/local/bin/jail_netgraph_bridge stop cloak ${name}";
|
||||||
|
|
||||||
|
mount.fstab = "/etc/fstab.${name}";
|
||||||
|
|
||||||
exec.start += "/bin/sh /etc/rc";
|
exec.start += "/bin/sh /etc/rc";
|
||||||
exec.stop = "/bin/sh /etc/rc.shutdown jail";
|
exec.stop = "/bin/sh /etc/rc.shutdown jail";
|
||||||
exec.consolelog = "/var/log/jail_${name}_console.log";
|
exec.consolelog = "/var/log/jail_${name}_console.log";
|
||||||
|
@ -3,6 +3,8 @@ cloak {
|
|||||||
vnet;
|
vnet;
|
||||||
vnet.interface += "host_link3";
|
vnet.interface += "host_link3";
|
||||||
|
|
||||||
|
mount.fstab = "/etc/fstab.${name}";
|
||||||
|
|
||||||
exec.start += "/bin/sh /etc/rc";
|
exec.start += "/bin/sh /etc/rc";
|
||||||
exec.stop = "/bin/sh /etc/rc.shutdown jail";
|
exec.stop = "/bin/sh /etc/rc.shutdown jail";
|
||||||
exec.consolelog = "/var/log/jail_${name}_console.log";
|
exec.consolelog = "/var/log/jail_${name}_console.log";
|
||||||
|
@ -7,8 +7,9 @@ nat_dhcp {
|
|||||||
|
|
||||||
devfs_ruleset = 14;
|
devfs_ruleset = 14;
|
||||||
mount.devfs;
|
mount.devfs;
|
||||||
|
mount.fstab = "/etc/fstab.${name}";
|
||||||
|
|
||||||
exec.start += "/bin/sh /etc/rc";
|
exec.start += "/bin/sh -c 'mkdir /var/run/kea && exec /bin/sh /etc/rc'";
|
||||||
exec.stop = "/bin/sh /etc/rc.shutdown jail";
|
exec.stop = "/bin/sh /etc/rc.shutdown jail";
|
||||||
exec.consolelog = "/var/log/jail_${name}_console.log";
|
exec.consolelog = "/var/log/jail_${name}_console.log";
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,8 @@ olddagger {
|
|||||||
exec.prestart += "/usr/local/bin/jail_netgraph_bridge start cloak ${name} 192.168.1.0/24";
|
exec.prestart += "/usr/local/bin/jail_netgraph_bridge start cloak ${name} 192.168.1.0/24";
|
||||||
exec.poststop += "/usr/local/bin/jail_netgraph_bridge stop cloak ${name}";
|
exec.poststop += "/usr/local/bin/jail_netgraph_bridge stop cloak ${name}";
|
||||||
|
|
||||||
|
mount.fstab = "/etc/fstab.${name}";
|
||||||
|
|
||||||
exec.start += "/bin/sh /etc/rc";
|
exec.start += "/bin/sh /etc/rc";
|
||||||
exec.stop = "/bin/sh /etc/rc.shutdown jail";
|
exec.stop = "/bin/sh /etc/rc.shutdown jail";
|
||||||
exec.consolelog = "/var/log/jail_${name}_console.log";
|
exec.consolelog = "/var/log/jail_${name}_console.log";
|
||||||
|
@ -7,6 +7,7 @@ public_dns {
|
|||||||
|
|
||||||
devfs_ruleset = 14;
|
devfs_ruleset = 14;
|
||||||
mount.devfs;
|
mount.devfs;
|
||||||
|
mount.fstab = "/etc/fstab.${name}";
|
||||||
|
|
||||||
exec.start += "/bin/sh /etc/rc";
|
exec.start += "/bin/sh /etc/rc";
|
||||||
exec.stop = "/bin/sh /etc/rc.shutdown jail";
|
exec.stop = "/bin/sh /etc/rc.shutdown jail";
|
||||||
|
@ -7,6 +7,7 @@ sample {
|
|||||||
|
|
||||||
devfs_ruleset = 14;
|
devfs_ruleset = 14;
|
||||||
mount.devfs;
|
mount.devfs;
|
||||||
|
mount.fstab = "/etc/fstab.${name}";
|
||||||
|
|
||||||
exec.start += "/bin/sh /etc/rc";
|
exec.start += "/bin/sh /etc/rc";
|
||||||
exec.stop = "/bin/sh /etc/rc.shutdown jail";
|
exec.stop = "/bin/sh /etc/rc.shutdown jail";
|
||||||
|
@ -7,6 +7,7 @@ sftp {
|
|||||||
|
|
||||||
devfs_ruleset = 14;
|
devfs_ruleset = 14;
|
||||||
mount.devfs;
|
mount.devfs;
|
||||||
|
mount.fstab = "/etc/fstab.${name}";
|
||||||
|
|
||||||
exec.start += "/bin/sh /etc/rc";
|
exec.start += "/bin/sh /etc/rc";
|
||||||
exec.stop = "/bin/sh /etc/rc.shutdown jail";
|
exec.stop = "/bin/sh /etc/rc.shutdown jail";
|
||||||
|
10
ansible/roles/jail/files/sftp_fstab
Normal file
10
ansible/roles/jail/files/sftp_fstab
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
tmpfs /jail/sftp/tmp tmpfs rw,mode=777 0 0
|
||||||
|
tmpfs /jail/sftp/var/run tmpfs rw,mode=755 0 0
|
||||||
|
|
||||||
|
/data /jail/sftp/chroot/readonly/library nullfs ro,noexec 0 0
|
||||||
|
/jail/dagger/incomplete /jail/sftp/chroot/readonly/incomplete nullfs ro,noexec 0 0
|
||||||
|
/jail/dagger/downloads /jail/sftp/chroot/readonly/downloads nullfs ro,noexec 0 0
|
||||||
|
|
||||||
|
/data /jail/sftp/chroot/readwrite/library nullfs rw,noexec 0 0
|
||||||
|
/jail/dagger/incomplete /jail/sftp/chroot/readwrite/incomplete nullfs rw,noexec 0 0
|
||||||
|
/jail/dagger/downloads /jail/sftp/chroot/readwrite/downloads nullfs rw,noexec 0 0
|
@ -42,13 +42,23 @@
|
|||||||
dest: /usr/local/bin/new_jail
|
dest: /usr/local/bin/new_jail
|
||||||
|
|
||||||
- name: Install config files
|
- name: Install config files
|
||||||
|
when: item.fstab is defined
|
||||||
copy:
|
copy:
|
||||||
src: "files/{{ item.fstab }}"
|
src: 'files/{{ item.fstab }}'
|
||||||
|
dest: '{{ item.fstab_dest|default("/etc/fstab." + item.name) }}'
|
||||||
|
mode: 0644
|
||||||
|
owner: root
|
||||||
|
group: wheel
|
||||||
|
loop: "{{ jail_list }}"
|
||||||
|
|
||||||
|
- name: Install config files
|
||||||
|
when: item.fstab is not defined
|
||||||
|
template:
|
||||||
|
src: 'templates/fstab_default.j2'
|
||||||
dest: '{{ item.fstab_dest|default("/etc/fstab." + item.name) }}'
|
dest: '{{ item.fstab_dest|default("/etc/fstab." + item.name) }}'
|
||||||
mode: 0644
|
mode: 0644
|
||||||
owner: root
|
owner: root
|
||||||
group: wheel
|
group: wheel
|
||||||
when: item.fstab is defined
|
|
||||||
loop: "{{ jail_list }}"
|
loop: "{{ jail_list }}"
|
||||||
|
|
||||||
- name: Install persistent files
|
- name: Install persistent files
|
||||||
|
2
ansible/roles/jail/templates/fstab_default.j2
Normal file
2
ansible/roles/jail/templates/fstab_default.j2
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
tmpfs /jail/{{ item.name }}/tmp tmpfs rw,mode=777 0 0
|
||||||
|
tmpfs /jail/{{ item.name }}/var/run tmpfs rw,mode=755 0 0
|
@ -49,7 +49,19 @@ EOF
|
|||||||
)
|
)
|
||||||
IGNORE_OSVERSION=yes pkg --rootdir "$DESTDIR" --config <(cat <<<"$config") install --repository base --yes --glob 'FreeBSD-*'
|
IGNORE_OSVERSION=yes pkg --rootdir "$DESTDIR" --config <(cat <<<"$config") install --repository base --yes --glob 'FreeBSD-*'
|
||||||
switch_to_latest_packages
|
switch_to_latest_packages
|
||||||
cat > "$DESTDIR/usr/local/etc/pkg/repos/pkgbase.conf" <<<"$config"
|
local in_jail_config
|
||||||
|
in_jail_config=$(cat <<EOF
|
||||||
|
base: {
|
||||||
|
url: "pkg+https://pkg.freebsd.org/\${ABI}/base_release_1",
|
||||||
|
mirror_type: "srv",
|
||||||
|
signature_type: "fingerprints",
|
||||||
|
fingerprints: "/usr/share/keys/pkg",
|
||||||
|
enabled: yes,
|
||||||
|
priority: 100
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
)
|
||||||
|
cat > "$DESTDIR/usr/local/etc/pkg/repos/pkgbase.conf" <<<"$in_jail_config"
|
||||||
# Post-install remove extra packages
|
# Post-install remove extra packages
|
||||||
# pkg remove --glob 'FreeBSD-*-lib32*' 'FreeBSD-*-dbg*' FreeBSD-src
|
# pkg remove --glob 'FreeBSD-*-lib32*' 'FreeBSD-*-dbg*' FreeBSD-src
|
||||||
}
|
}
|
||||||
|
@ -78,6 +78,11 @@
|
|||||||
// brianai
|
// brianai
|
||||||
"hw-address": "06:a6:dc:59:78:12",
|
"hw-address": "06:a6:dc:59:78:12",
|
||||||
"ip-address": "10.215.1.215"
|
"ip-address": "10.215.1.215"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// sftp
|
||||||
|
"hw-address": "58:9c:fc:10:ff:ab",
|
||||||
|
"ip-address": "10.215.1.216"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
17
ansible/roles/sftp/files/sshd_config
Normal file
17
ansible/roles/sftp/files/sshd_config
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
|
||||||
|
# but this is overridden so installations will only check .ssh/authorized_keys
|
||||||
|
AuthorizedKeysFile .ssh/authorized_keys
|
||||||
|
|
||||||
|
# Only allow sftp users
|
||||||
|
AllowUsers nochainstounlock
|
||||||
|
ChrootDirectory /chroot
|
||||||
|
|
||||||
|
# override default of no subsystems
|
||||||
|
Subsystem sftp /usr/libexec/sftp-server
|
||||||
|
|
||||||
|
# Example of overriding settings on a per-user basis
|
||||||
|
Match User nochainstounlock
|
||||||
|
X11Forwarding no
|
||||||
|
AllowTcpForwarding no
|
||||||
|
PermitTTY no
|
||||||
|
ForceCommand internal-sftp
|
1
ansible/roles/sftp/files/sshd_rc.conf
Normal file
1
ansible/roles/sftp/files/sshd_rc.conf
Normal file
@ -0,0 +1 @@
|
|||||||
|
sshd_enable="YES"
|
71
ansible/roles/sftp/tasks/common.yaml
Normal file
71
ansible/roles/sftp/tasks/common.yaml
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
- name: Create directories
|
||||||
|
file:
|
||||||
|
name: "{{ item }}"
|
||||||
|
state: directory
|
||||||
|
mode: 0755
|
||||||
|
owner: root
|
||||||
|
group: wheel
|
||||||
|
loop:
|
||||||
|
- /chroot
|
||||||
|
- /chroot/readonly
|
||||||
|
- /chroot/readwrite
|
||||||
|
|
||||||
|
- name: Create directories
|
||||||
|
file:
|
||||||
|
name: "{{ item }}"
|
||||||
|
state: directory
|
||||||
|
mode: 0755
|
||||||
|
owner: nochainstounlock
|
||||||
|
group: nochainstounlock
|
||||||
|
loop:
|
||||||
|
- /chroot/readonly/downloads
|
||||||
|
- /chroot/readonly/incomplete
|
||||||
|
- /chroot/readwrite/downloads
|
||||||
|
- /chroot/readwrite/incomplete
|
||||||
|
|
||||||
|
- name: Create directories
|
||||||
|
file:
|
||||||
|
name: "{{ item }}"
|
||||||
|
state: directory
|
||||||
|
mode: 0755
|
||||||
|
owner: 11235
|
||||||
|
group: nochainstounlock
|
||||||
|
loop:
|
||||||
|
- /chroot/readonly/library
|
||||||
|
- /chroot/readwrite/library
|
||||||
|
|
||||||
|
# - name: Install scripts
|
||||||
|
# copy:
|
||||||
|
# src: "files/{{ item.src }}"
|
||||||
|
# dest: "{{ item.dest }}"
|
||||||
|
# mode: 0755
|
||||||
|
# owner: root
|
||||||
|
# group: wheel
|
||||||
|
# loop:
|
||||||
|
# - src: foo.bash
|
||||||
|
# dest: /usr/local/bin/foo
|
||||||
|
|
||||||
|
- name: Install Configuration
|
||||||
|
copy:
|
||||||
|
src: "files/{{ item.src }}"
|
||||||
|
dest: "{{ item.dest }}"
|
||||||
|
mode: 0644
|
||||||
|
owner: root
|
||||||
|
group: wheel
|
||||||
|
loop:
|
||||||
|
- src: sshd_config
|
||||||
|
dest: /etc/ssh/sshd_config
|
||||||
|
|
||||||
|
# - name: Clone Source
|
||||||
|
# git:
|
||||||
|
# repo: "https://foo.bar/baz.git"
|
||||||
|
# dest: /foo/bar
|
||||||
|
# version: "v1.0.2"
|
||||||
|
# force: true
|
||||||
|
# diff: false
|
||||||
|
|
||||||
|
- import_tasks: tasks/freebsd.yaml
|
||||||
|
when: 'os_flavor == "freebsd"'
|
||||||
|
|
||||||
|
- import_tasks: tasks/linux.yaml
|
||||||
|
when: 'os_flavor == "linux"'
|
19
ansible/roles/sftp/tasks/freebsd.yaml
Normal file
19
ansible/roles/sftp/tasks/freebsd.yaml
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
- name: Create directories
|
||||||
|
file:
|
||||||
|
name: "{{ item }}"
|
||||||
|
state: directory
|
||||||
|
mode: 0755
|
||||||
|
owner: root
|
||||||
|
group: wheel
|
||||||
|
loop:
|
||||||
|
- /etc/rc.conf.d
|
||||||
|
|
||||||
|
- name: Install service configuration
|
||||||
|
copy:
|
||||||
|
src: "files/{{ item }}_rc.conf"
|
||||||
|
dest: "/etc/rc.conf.d/{{ item }}"
|
||||||
|
mode: 0644
|
||||||
|
owner: root
|
||||||
|
group: wheel
|
||||||
|
loop:
|
||||||
|
- sshd
|
29
ansible/roles/sftp/tasks/linux.yaml
Normal file
29
ansible/roles/sftp/tasks/linux.yaml
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
# - name: Build aur packages
|
||||||
|
# register: buildaur
|
||||||
|
# become_user: "{{ build_user.name }}"
|
||||||
|
# command: "aurutils-sync --no-view {{ item }}"
|
||||||
|
# args:
|
||||||
|
# creates: "/var/cache/pacman/custom/{{ item }}-*.pkg.tar.*"
|
||||||
|
# loop:
|
||||||
|
# - foo
|
||||||
|
|
||||||
|
# - name: Update cache
|
||||||
|
# when: buildaur.changed
|
||||||
|
# pacman:
|
||||||
|
# name: []
|
||||||
|
# state: present
|
||||||
|
# update_cache: true
|
||||||
|
|
||||||
|
# - name: Install packages
|
||||||
|
# package:
|
||||||
|
# name:
|
||||||
|
# - foo
|
||||||
|
# state: present
|
||||||
|
|
||||||
|
# - name: Enable services
|
||||||
|
# systemd:
|
||||||
|
# enabled: yes
|
||||||
|
# name: "{{ item }}"
|
||||||
|
# daemon_reload: yes
|
||||||
|
# loop:
|
||||||
|
# - foo.service
|
2
ansible/roles/sftp/tasks/main.yaml
Normal file
2
ansible/roles/sftp/tasks/main.yaml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
- import_tasks: tasks/common.yaml
|
||||||
|
# when: foo is defined
|
@ -1,2 +1,3 @@
|
|||||||
dependencies:
|
# dependencies:
|
||||||
- sudo
|
# - sudo
|
||||||
|
# TODO: When any user is in wheel group
|
||||||
|
@ -28,6 +28,8 @@ elif [ "$target" = "jail_nat_dhcp" ]; then
|
|||||||
ansible-playbook -v -i environments/jail playbook.yaml --diff --limit nat_dhcp "${@}"
|
ansible-playbook -v -i environments/jail playbook.yaml --diff --limit nat_dhcp "${@}"
|
||||||
elif [ "$target" = "jail_homeserver_nat_dhcp" ]; then
|
elif [ "$target" = "jail_homeserver_nat_dhcp" ]; then
|
||||||
ansible-playbook -v -i environments/jail playbook.yaml --diff --limit homeserver_nat_dhcp "${@}"
|
ansible-playbook -v -i environments/jail playbook.yaml --diff --limit homeserver_nat_dhcp "${@}"
|
||||||
|
elif [ "$target" = "sftp" ]; then
|
||||||
|
ansible-playbook -v -i environments/jail playbook.yaml --diff --limit sftp "${@}"
|
||||||
elif [ "$target" = "vm_poudriereodo" ]; then
|
elif [ "$target" = "vm_poudriereodo" ]; then
|
||||||
ansible-playbook -v -i environments/vm playbook.yaml --diff --limit poudriereodo "${@}"
|
ansible-playbook -v -i environments/vm playbook.yaml --diff --limit poudriereodo "${@}"
|
||||||
elif [ "$target" = "vm_poudrieremrmanager" ]; then
|
elif [ "$target" = "vm_poudrieremrmanager" ]; then
|
||||||
|
Loading…
x
Reference in New Issue
Block a user